From: Eric Biggers <ebiggers@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-xfs@vger.kernel.org, linux-api@vger.kernel.org, linux-fscrypt@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 7/7] f2fs: support STATX_IOALIGN Date: Thu, 10 Feb 2022 22:11:58 -0800 [thread overview] Message-ID: <20220211061158.227688-8-ebiggers@kernel.org> (raw) In-Reply-To: <20220211061158.227688-1-ebiggers@kernel.org> From: Eric Biggers <ebiggers@google.com> Add support for STATX_IOALIGN to f2fs, so that I/O alignment information is exposed to userspace in a consistent and easy-to-use way. Signed-off-by: Eric Biggers <ebiggers@google.com> --- fs/f2fs/file.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 9cc985258f17e..334d363a7b8c5 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -835,6 +835,21 @@ static bool f2fs_force_buffered_io(struct inode *inode) return false; } +/* Return the maximum value of io_opt across all the filesystem's devices. */ +static unsigned int f2fs_max_io_opt(struct inode *inode) +{ + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); + int io_opt = 0; + int i; + + if (!f2fs_is_multi_device(sbi)) + return bdev_io_opt(sbi->sb->s_bdev); + + for (i = 0; i < sbi->s_ndevs; i++) + io_opt = max(io_opt, bdev_io_opt(FDEV(i).bdev)); + return io_opt; +} + int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path, struct kstat *stat, u32 request_mask, unsigned int query_flags) { @@ -851,6 +866,22 @@ int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path, stat->btime.tv_nsec = fi->i_crtime.tv_nsec; } + /* + * Return the I/O alignment information if requested. We only return + * this information when requested, since on encrypted files it might + * take a fair bit of work to get if the file wasn't opened recently. + */ + if ((request_mask & STATX_IOALIGN) && S_ISREG(inode->i_mode)) { + unsigned int bsize = i_blocksize(inode); + + stat->result_mask |= STATX_IOALIGN; + if (!f2fs_force_buffered_io(inode)) { + stat->mem_align_dio = bsize; + stat->offset_align_dio = bsize; + } + stat->offset_align_optimal = max(f2fs_max_io_opt(inode), bsize); + } + flags = fi->i_flags; if (flags & F2FS_COMPR_FL) stat->attributes |= STATX_ATTR_COMPRESSED; -- 2.35.1
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers <ebiggers@kernel.org> To: linux-fsdevel@vger.kernel.org Cc: linux-api@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-xfs@vger.kernel.org, linux-fscrypt@vger.kernel.org, linux-ext4@vger.kernel.org Subject: [f2fs-dev] [RFC PATCH 7/7] f2fs: support STATX_IOALIGN Date: Thu, 10 Feb 2022 22:11:58 -0800 [thread overview] Message-ID: <20220211061158.227688-8-ebiggers@kernel.org> (raw) In-Reply-To: <20220211061158.227688-1-ebiggers@kernel.org> From: Eric Biggers <ebiggers@google.com> Add support for STATX_IOALIGN to f2fs, so that I/O alignment information is exposed to userspace in a consistent and easy-to-use way. Signed-off-by: Eric Biggers <ebiggers@google.com> --- fs/f2fs/file.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 9cc985258f17e..334d363a7b8c5 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -835,6 +835,21 @@ static bool f2fs_force_buffered_io(struct inode *inode) return false; } +/* Return the maximum value of io_opt across all the filesystem's devices. */ +static unsigned int f2fs_max_io_opt(struct inode *inode) +{ + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); + int io_opt = 0; + int i; + + if (!f2fs_is_multi_device(sbi)) + return bdev_io_opt(sbi->sb->s_bdev); + + for (i = 0; i < sbi->s_ndevs; i++) + io_opt = max(io_opt, bdev_io_opt(FDEV(i).bdev)); + return io_opt; +} + int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path, struct kstat *stat, u32 request_mask, unsigned int query_flags) { @@ -851,6 +866,22 @@ int f2fs_getattr(struct user_namespace *mnt_userns, const struct path *path, stat->btime.tv_nsec = fi->i_crtime.tv_nsec; } + /* + * Return the I/O alignment information if requested. We only return + * this information when requested, since on encrypted files it might + * take a fair bit of work to get if the file wasn't opened recently. + */ + if ((request_mask & STATX_IOALIGN) && S_ISREG(inode->i_mode)) { + unsigned int bsize = i_blocksize(inode); + + stat->result_mask |= STATX_IOALIGN; + if (!f2fs_force_buffered_io(inode)) { + stat->mem_align_dio = bsize; + stat->offset_align_dio = bsize; + } + stat->offset_align_optimal = max(f2fs_max_io_opt(inode), bsize); + } + flags = fi->i_flags; if (flags & F2FS_COMPR_FL) stat->attributes |= STATX_ATTR_COMPRESSED; -- 2.35.1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2022-02-11 6:13 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-02-11 6:11 [RFC PATCH 0/7] make statx() return I/O alignment information Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 6:11 ` [RFC PATCH 1/7] statx: add " Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 11:40 ` Chaitanya Kulkarni 2022-02-11 11:40 ` [f2fs-dev] " Chaitanya Kulkarni via Linux-f2fs-devel 2022-02-11 11:45 ` Chaitanya Kulkarni 2022-02-11 11:45 ` [f2fs-dev] " Chaitanya Kulkarni via Linux-f2fs-devel 2022-02-11 6:11 ` [RFC PATCH 2/7] fscrypt: change fscrypt_dio_supported() to prepare for STATX_IOALIGN Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 6:11 ` [RFC PATCH 3/7] ext4: support STATX_IOALIGN Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 6:11 ` [RFC PATCH 4/7] f2fs: move f2fs_force_buffered_io() into file.c Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 6:11 ` [RFC PATCH 5/7] f2fs: don't allow DIO reads but not DIO writes Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 6:11 ` [RFC PATCH 6/7] f2fs: simplify f2fs_force_buffered_io() Eric Biggers 2022-02-11 6:11 ` [f2fs-dev] " Eric Biggers 2022-02-11 6:11 ` Eric Biggers [this message] 2022-02-11 6:11 ` [f2fs-dev] [RFC PATCH 7/7] f2fs: support STATX_IOALIGN Eric Biggers
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220211061158.227688-8-ebiggers@kernel.org \ --to=ebiggers@kernel.org \ --cc=linux-api@vger.kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-f2fs-devel@lists.sourceforge.net \ --cc=linux-fscrypt@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-xfs@vger.kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.