From: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
To: John Garry <john.g.garry@oracle.com>, linux-ext4@vger.kernel.org
Cc: Theodore Ts'o <tytso@mit.edu>, Jan Kara <jack@suse.cz>,
"Darrick J . Wong" <djwong@kernel.org>,
Christoph Hellwig <hch@infradead.org>,
Ojaswin Mujoo <ojaswin@linux.ibm.com>,
Dave Chinner <david@fromorbit.com>,
linux-kernel@vger.kernel.org, linux-xfs@vger.kernel.org,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH v4 1/4] ext4: Add statx support for atomic writes
Date: Fri, 01 Nov 2024 22:53:03 +0530 [thread overview]
Message-ID: <8734kazx54.fsf@gmail.com> (raw)
In-Reply-To: <4198772d-54c8-44b9-8e85-0ec089032514@oracle.com>
John Garry <john.g.garry@oracle.com> writes:
> On 01/11/2024 06:50, Ritesh Harjani (IBM) wrote:
>> This patch adds base support for atomic writes via statx getattr.
>> On bs < ps systems, we can create FS with say bs of 16k. That means
>> both atomic write min and max unit can be set to 16k for supporting
>> atomic writes.
>>
>> Co-developed-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
>> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
>> Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
>
> Regardless of nitpicks:
>
> Reviewed-by: John Garry <john.g.garry@oracle.com>
>
Thanks John for the review!
Since as you too mentioned the remaining points are minor and not
critical review comments, I will address them next time in the
multi-fsblock variant. With all other aspects now finalized in this v4
version, this looks ready to be picked up for the merge window.
-ritesh
>> ---
>> fs/ext4/ext4.h | 10 ++++++++++
>> fs/ext4/inode.c | 12 ++++++++++++
>> fs/ext4/super.c | 31 +++++++++++++++++++++++++++++++
>> 3 files changed, 53 insertions(+)
>>
>> diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
>> index 44b0d418143c..494d443e9fc9 100644
>> --- a/fs/ext4/ext4.h
>> +++ b/fs/ext4/ext4.h
>> @@ -1729,6 +1729,10 @@ struct ext4_sb_info {
>> */
>> struct work_struct s_sb_upd_work;
>>
>> + /* Atomic write unit values in bytes */
>> + unsigned int s_awu_min;
>> + unsigned int s_awu_max;
>> +
>> /* Ext4 fast commit sub transaction ID */
>> atomic_t s_fc_subtid;
>>
>> @@ -3855,6 +3859,12 @@ static inline int ext4_buffer_uptodate(struct buffer_head *bh)
>> return buffer_uptodate(bh);
>> }
>>
>> +static inline bool ext4_inode_can_atomic_write(struct inode *inode)
>> +{
>> +
>
> nit: superfluous blank line
>
Sure.
>> + return S_ISREG(inode->i_mode) && EXT4_SB(inode->i_sb)->s_awu_min > 0;
>
> I am not sure if the S_ISREG() check is required. Other callers also do
> the check (like ext4_getattr() for when calling
> ext4_inode_can_atomic_write()) or don't need it (ext4_file_open()). I
> say ext4_file_open() doesn't need it as ext4_file_open() is only ever
> called for regular files, right?
>
Yes. However I believe we might end up using this from other places when
we add support of extsize. So we might need S_ISREG check.
But sure let me re-think on that during the multi-fsblock variant time.
>> +}
>> +
>> extern int ext4_block_write_begin(handle_t *handle, struct folio *folio,
>> loff_t pos, unsigned len,
>> get_block_t *get_block);
>> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
>> index 54bdd4884fe6..3e827cfa762e 100644
>> --- a/fs/ext4/inode.c
>> +++ b/fs/ext4/inode.c
>> @@ -5578,6 +5578,18 @@ int ext4_getattr(struct mnt_idmap *idmap, const struct path *path,
>> }
>> }
>>
>> + if ((request_mask & STATX_WRITE_ATOMIC) && S_ISREG(inode->i_mode)) {
>
> nit: maybe you could have factored out the S_ISREG() check with
> STATX_DIOALIGN
>
Sure.
>> + struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
>> + unsigned int awu_min = 0, awu_max = 0;
>> +
>> + if (ext4_inode_can_atomic_write(inode)) {
>> + awu_min = sbi->s_awu_min;
>> + awu_max = sbi->s_awu_max;
>> + }
>> +
>> + generic_fill_statx_atomic_writes(stat, awu_min, awu_max);
>> + }
>> +
>> flags = ei->i_flags & EXT4_FL_USER_VISIBLE;
>> if (flags & EXT4_APPEND_FL)
>> stat->attributes |= STATX_ATTR_APPEND;
>> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
>> index 16a4ce704460..ebe1660bd840 100644
>> --- a/fs/ext4/super.c
>> +++ b/fs/ext4/super.c
>> @@ -4425,6 +4425,36 @@ static int ext4_handle_clustersize(struct super_block *sb)
>> return 0;
>> }
>>
>> +/*
>> + * ext4_atomic_write_init: Initializes filesystem min & max atomic write units.
>> + * @sb: super block
>> + * TODO: Later add support for bigalloc
>> + */
>> +static void ext4_atomic_write_init(struct super_block *sb)
>> +{
>> + struct ext4_sb_info *sbi = EXT4_SB(sb);
>> + struct block_device *bdev = sb->s_bdev;
>> +
>> + if (!bdev_can_atomic_write(bdev))
>> + return;
>> +
>> + if (!ext4_has_feature_extents(sb))
>> + return;
>> +
>> + sbi->s_awu_min = max(sb->s_blocksize,
>> + bdev_atomic_write_unit_min_bytes(bdev));
>> + sbi->s_awu_max = min(sb->s_blocksize,
>> + bdev_atomic_write_unit_max_bytes(bdev));
>> + if (sbi->s_awu_min && sbi->s_awu_max &&
>> + sbi->s_awu_min <= sbi->s_awu_max) {
>> + ext4_msg(sb, KERN_NOTICE, "Supports (experimental) DIO atomic writes awu_min: %u, awu_max: %u",
>> + sbi->s_awu_min, sbi->s_awu_max);
>> + } else {
>> + sbi->s_awu_min = 0;
>> + sbi->s_awu_max = 0;
>> + }
>> +}
>> +
>> static void ext4_fast_commit_init(struct super_block *sb)
>> {
>> struct ext4_sb_info *sbi = EXT4_SB(sb);
>> @@ -5336,6 +5366,7 @@ static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
>>
>> spin_lock_init(&sbi->s_bdev_wb_lock);
>>
>> + ext4_atomic_write_init(sb);
>> ext4_fast_commit_init(sb);
>>
>> sb->s_root = NULL;
next prev parent reply other threads:[~2024-11-01 18:02 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-01 6:50 [PATCH v4 0/4] ext4: Add atomic writes support for DIO Ritesh Harjani (IBM)
2024-11-01 6:50 ` [PATCH v4 1/4] ext4: Add statx support for atomic writes Ritesh Harjani (IBM)
2024-11-01 11:17 ` Jan Kara
2024-11-01 15:12 ` Darrick J. Wong
2024-11-01 16:00 ` John Garry
2024-11-01 17:23 ` Ritesh Harjani [this message]
2024-11-01 6:50 ` [PATCH v4 2/4] ext4: Check for atomic writes support in write iter Ritesh Harjani (IBM)
2024-11-01 11:15 ` Jan Kara
2024-11-01 6:50 ` [PATCH v4 3/4] ext4: Support setting FMODE_CAN_ATOMIC_WRITE Ritesh Harjani (IBM)
2024-11-01 11:14 ` Jan Kara
2024-11-01 6:50 ` [PATCH v4 4/4] ext4: Do not fallback to buffered-io for DIO atomic write Ritesh Harjani (IBM)
2024-11-01 11:13 ` Jan Kara
2024-11-01 14:46 ` Darrick J. Wong
2024-11-02 10:16 ` kernel test robot
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=8734kazx54.fsf@gmail.com \
--to=ritesh.list@gmail.com \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=hch@infradead.org \
--cc=jack@suse.cz \
--cc=john.g.garry@oracle.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=ojaswin@linux.ibm.com \
--cc=tytso@mit.edu \
/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: link
Be 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.