Re: [PATCH v7 10/14] gfs2: use the new ->i_state accessors

Jan Kara
2025-10-10T14:17:20Z

On Thu 09-10-25 09:59:24, Mateusz Guzik wrote:
> Change generated with coccinelle and fixed up by hand as appropriate.
>
> Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>

Looks good. Feel free to add:

Reviewed-by: Jan Kara <jack@suse.cz>

Honza

> ---
>
> cheat sheet:
>
> If ->i_lock is held, then:
>
> state = inode->i_state => state = inode_state_read(inode)
> inode->i_state |= (I_A | I_B) => inode_state_set(inode, I_A | I_B)
> inode->i_state &= ~(I_A | I_B) => inode_state_clear(inode, I_A | I_B)
> inode->i_state = I_A | I_B => inode_state_assign(inode, I_A | I_B)
>
> If ->i_lock is not held or only held conditionally:
>
> state = inode->i_state => state = inode_state_read_once(inode)
> inode->i_state |= (I_A | I_B) => inode_state_set_raw(inode, I_A | I_B)
> inode->i_state &= ~(I_A | I_B) => inode_state_clear_raw(inode, I_A | I_B)
> inode->i_state = I_A | I_B => inode_state_assign_raw(inode, I_A | I_B)
>
> fs/gfs2/file.c | 2 +-
> fs/gfs2/glops.c | 2 +-
> fs/gfs2/inode.c | 4 ++--
> fs/gfs2/ops_fstype.c | 2 +-
> 4 files changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
> index bc67fa058c84..ee92f5910ae1 100644
> --- a/fs/gfs2/file.c
> +++ b/fs/gfs2/file.c
> @@ -744,7 +744,7 @@ static int gfs2_fsync(struct file *file, loff_t start, loff_t end,
> {
> struct address_space *mapping = file->f_mapping;
> struct inode *inode = mapping->host;
> - int sync_state = inode->i_state & I_DIRTY;
> + int sync_state = inode_state_read_once(inode) & I_DIRTY;
> struct gfs2_inode *ip = GFS2_I(inode);
> int ret = 0, ret1 = 0;
>
> diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
> index 0c0a80b3baca..c94e42b0c94d 100644
> --- a/fs/gfs2/glops.c
> +++ b/fs/gfs2/glops.c
> @@ -394,7 +394,7 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
> u16 height, depth;
> umode_t mode = be32_to_cpu(str->di_mode);
> struct inode *inode = &ip->i_inode;
> - bool is_new = inode->i_state & I_NEW;
> + bool is_new = inode_state_read_once(inode) & I_NEW;
>
> if (unlikely(ip->i_no_addr != be64_to_cpu(str->di_num.no_addr))) {
> gfs2_consist_inode(ip);
> diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
> index 8a7ed80d9f2d..890c87e3e365 100644
> --- a/fs/gfs2/inode.c
> +++ b/fs/gfs2/inode.c
> @@ -127,7 +127,7 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type,
>
> ip = GFS2_I(inode);
>
> - if (inode->i_state & I_NEW) {
> + if (inode_state_read_once(inode) & I_NEW) {
> struct gfs2_sbd *sdp = GFS2_SB(inode);
> struct gfs2_glock *io_gl;
> int extra_flags = 0;
> @@ -924,7 +924,7 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
> gfs2_dir_no_add(&da);
> gfs2_glock_dq_uninit(&d_gh);
> if (!IS_ERR_OR_NULL(inode)) {
> - if (inode->i_state & I_NEW)
> + if (inode_state_read_once(inode) & I_NEW)
> iget_failed(inode);
> else
> iput(inode);
> diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
> index aa15183f9a16..889682f051ea 100644
> --- a/fs/gfs2/ops_fstype.c
> +++ b/fs/gfs2/ops_fstype.c
> @@ -1751,7 +1751,7 @@ static void gfs2_evict_inodes(struct super_block *sb)
> spin_lock(&sb->s_inode_list_lock);
> list_for_each_entry(inode, &sb->s_inodes, i_sb_list) {
> spin_lock(&inode->i_lock);
> - if ((inode->i_state & (I_FREEING|I_WILL_FREE|I_NEW)) &&
> + if ((inode_state_read(inode) & (I_FREEING | I_WILL_FREE | I_NEW)) &&
> !need_resched()) {
> spin_unlock(&inode->i_lock);
> continue;
> --
> 2.34.1
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR