On Thu 09-10-25 09:59:22, 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/smb/client/cifsfs.c | 2 +-
> fs/smb/client/inode.c | 14 +++++++-------
> 2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/fs/smb/client/cifsfs.c b/fs/smb/client/cifsfs.c
> index 1775c2b7528f..103289451bd7 100644
> --- a/fs/smb/client/cifsfs.c
> +++ b/fs/smb/client/cifsfs.c
> @@ -484,7 +484,7 @@ cifs_evict_inode(struct inode *inode)
> {
> netfs_wait_for_outstanding_io(inode);
> truncate_inode_pages_final(&inode->i_data);
> - if (inode->i_state & I_PINNING_NETFS_WB)
> + if (inode_state_read_once(inode) & I_PINNING_NETFS_WB)
> cifs_fscache_unuse_inode_cookie(inode, true);
> cifs_fscache_release_inode_cookie(inode);
> clear_inode(inode);
> diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c
> index 8bb544be401e..32d9054a77fc 100644
> --- a/fs/smb/client/inode.c
> +++ b/fs/smb/client/inode.c
> @@ -101,7 +101,7 @@ cifs_revalidate_cache(struct inode *inode, struct cifs_fattr *fattr)
> cifs_dbg(FYI, "%s: revalidating inode %llu\n",
> __func__, cifs_i->uniqueid);
>
> - if (inode->i_state & I_NEW) {
> + if (inode_state_read_once(inode) & I_NEW) {
> cifs_dbg(FYI, "%s: inode %llu is new\n",
> __func__, cifs_i->uniqueid);
> return;
> @@ -146,7 +146,7 @@ cifs_nlink_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr)
> */
> if (fattr->cf_flags & CIFS_FATTR_UNKNOWN_NLINK) {
> /* only provide fake values on a new inode */
> - if (inode->i_state & I_NEW) {
> + if (inode_state_read_once(inode) & I_NEW) {
> if (fattr->cf_cifsattrs & ATTR_DIRECTORY)
> set_nlink(inode, 2);
> else
> @@ -167,12 +167,12 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr,
> struct cifsInodeInfo *cifs_i = CIFS_I(inode);
> struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
>
> - if (!(inode->i_state & I_NEW) &&
> + if (!(inode_state_read_once(inode) & I_NEW) &&
> unlikely(inode_wrong_type(inode, fattr->cf_mode))) {
> CIFS_I(inode)->time = 0; /* force reval */
> return -ESTALE;
> }
> - if (inode->i_state & I_NEW)
> + if (inode_state_read_once(inode) & I_NEW)
> CIFS_I(inode)->netfs.zero_point = fattr->cf_eof;
>
> cifs_revalidate_cache(inode, fattr);
> @@ -194,7 +194,7 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr,
> inode->i_gid = fattr->cf_gid;
>
> /* if dynperm is set, don't clobber existing mode */
> - if (inode->i_state & I_NEW ||
> + if (inode_state_read(inode) & I_NEW ||
> !(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_DYNPERM))
> inode->i_mode = fattr->cf_mode;
>
> @@ -236,7 +236,7 @@ cifs_fattr_to_inode(struct inode *inode, struct cifs_fattr *fattr,
>
> if (fattr->cf_flags & CIFS_FATTR_JUNCTION)
> inode->i_flags |= S_AUTOMOUNT;
> - if (inode->i_state & I_NEW) {
> + if (inode_state_read_once(inode) & I_NEW) {
> cifs_set_netfs_context(inode);
> cifs_set_ops(inode);
> }
> @@ -1638,7 +1638,7 @@ cifs_iget(struct super_block *sb, struct cifs_fattr *fattr)
> cifs_fattr_to_inode(inode, fattr, false);
> if (sb->s_flags & SB_NOATIME)
> inode->i_flags |= S_NOATIME | S_NOCMTIME;
> - if (inode->i_state & I_NEW) {
> + if (inode_state_read_once(inode) & I_NEW) {
> inode->i_ino = hash;
> cifs_fscache_get_inode_cookie(inode);
> unlock_new_inode(inode);
> --
> 2.34.1
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR