From b51a1e1140cac80c0590183be05e905bf87294d4 Mon Sep 17 00:00:00 2001 From: Andreas Dilger Date: Fri, 18 Oct 2019 19:43:11 +0900 Subject: [PATCH] LU-12885 llite: mark extended attr and inode flags Clearly name the extended attribute and inode flags so that it is possible to distinguish them more easily. Test-Parameters: trivial Signed-off-by: Andreas Dilger Change-Id: Id1ad2ba6411f69efb2de38e1019940f5fb3ebbe5 Reviewed-on: https://review.whamcloud.com/36519 Tested-by: jenkins Tested-by: Maloo Reviewed-by: James Simmons Reviewed-by: Arshad Hussain Reviewed-by: Neil Brown Reviewed-by: Oleg Drokin --- lustre/include/obd_support.h | 28 ++++++++++++------------ lustre/include/uapi/linux/lustre/lustre_idl.h | 4 +++- lustre/llite/file.c | 31 +++++++++++---------------- lustre/llite/llite_internal.h | 12 +++++------ lustre/llite/llite_lib.c | 2 +- 5 files changed, 37 insertions(+), 40 deletions(-) diff --git a/lustre/include/obd_support.h b/lustre/include/obd_support.h index 085a71f..b212042 100644 --- a/lustre/include/obd_support.h +++ b/lustre/include/obd_support.h @@ -990,28 +990,28 @@ static inline int lustre_to_lma_flags(__u32 la_flags) * versions. These flags are set/cleared via FSFILT_IOC_{GET,SET}_FLAGS. * See b=16526 for a full history. */ -static inline int ll_ext_to_inode_flags(int flags) +static inline int ll_ext_to_inode_flags(int ext_flags) { - return (((flags & LUSTRE_SYNC_FL) ? S_SYNC : 0) | - ((flags & LUSTRE_NOATIME_FL) ? S_NOATIME : 0) | - ((flags & LUSTRE_APPEND_FL) ? S_APPEND : 0) | - ((flags & LUSTRE_DIRSYNC_FL) ? S_DIRSYNC : 0) | + return (((ext_flags & LUSTRE_SYNC_FL) ? S_SYNC : 0) | + ((ext_flags & LUSTRE_NOATIME_FL) ? S_NOATIME : 0) | + ((ext_flags & LUSTRE_APPEND_FL) ? S_APPEND : 0) | + ((ext_flags & LUSTRE_DIRSYNC_FL) ? S_DIRSYNC : 0) | #if defined(S_ENCRYPTED) - ((flags & LUSTRE_ENCRYPT_FL) ? S_ENCRYPTED : 0) | + ((ext_flags & LUSTRE_ENCRYPT_FL) ? S_ENCRYPTED : 0) | #endif - ((flags & LUSTRE_IMMUTABLE_FL) ? S_IMMUTABLE : 0)); + ((ext_flags & LUSTRE_IMMUTABLE_FL) ? S_IMMUTABLE : 0)); } -static inline int ll_inode_to_ext_flags(int iflags) +static inline int ll_inode_to_ext_flags(int inode_flags) { - return (((iflags & S_SYNC) ? LUSTRE_SYNC_FL : 0) | - ((iflags & S_NOATIME) ? LUSTRE_NOATIME_FL : 0) | - ((iflags & S_APPEND) ? LUSTRE_APPEND_FL : 0) | - ((iflags & S_DIRSYNC) ? LUSTRE_DIRSYNC_FL : 0) | + return (((inode_flags & S_SYNC) ? LUSTRE_SYNC_FL : 0) | + ((inode_flags & S_NOATIME) ? LUSTRE_NOATIME_FL : 0) | + ((inode_flags & S_APPEND) ? LUSTRE_APPEND_FL : 0) | + ((inode_flags & S_DIRSYNC) ? LUSTRE_DIRSYNC_FL : 0) | #if defined(S_ENCRYPTED) - ((iflags & S_ENCRYPTED) ? LUSTRE_ENCRYPT_FL : 0) | + ((inode_flags & S_ENCRYPTED) ? LUSTRE_ENCRYPT_FL : 0) | #endif - ((iflags & S_IMMUTABLE) ? LUSTRE_IMMUTABLE_FL : 0)); + ((inode_flags & S_IMMUTABLE) ? LUSTRE_IMMUTABLE_FL : 0)); } struct obd_heat_instance { diff --git a/lustre/include/uapi/linux/lustre/lustre_idl.h b/lustre/include/uapi/linux/lustre/lustre_idl.h index 1fc0e64..b05a4c3 100644 --- a/lustre/include/uapi/linux/lustre/lustre_idl.h +++ b/lustre/include/uapi/linux/lustre/lustre_idl.h @@ -1834,7 +1834,9 @@ struct mdt_body { __u32 mbo_mode; __u32 mbo_uid; __u32 mbo_gid; - __u32 mbo_flags; /* LUSTRE_*_FL file attributes */ + __u32 mbo_flags; /* most replies: LUSTRE_*_FL file attributes, + * data_version: OBD_FL_* flags + */ __u32 mbo_rdev; __u32 mbo_nlink; /* #bytes to read in the case of MDS_READPAGE */ __u32 mbo_layout_gen; /* was "generation" until 2.4.0 */ diff --git a/lustre/llite/file.c b/lustre/llite/file.c index f307298..1e01323 100644 --- a/lustre/llite/file.c +++ b/lustre/llite/file.c @@ -3266,14 +3266,12 @@ int ll_ioctl_check_project(struct inode *inode, struct fsxattr *fa) int ll_ioctl_fssetxattr(struct inode *inode, unsigned int cmd, unsigned long arg) { - struct md_op_data *op_data; struct ptlrpc_request *req = NULL; - int rc = 0; struct fsxattr fsxattr; struct cl_object *obj; - struct iattr *attr; - int flags; + unsigned int inode_flags; + int rc = 0; if (copy_from_user(&fsxattr, (const struct fsxattr __user *)arg, @@ -3289,34 +3287,31 @@ int ll_ioctl_fssetxattr(struct inode *inode, unsigned int cmd, if (IS_ERR(op_data)) RETURN(PTR_ERR(op_data)); - flags = ll_xflags_to_inode_flags(fsxattr.fsx_xflags); - op_data->op_attr_flags = ll_inode_to_ext_flags(flags); + inode_flags = ll_xflags_to_inode_flags(fsxattr.fsx_xflags); + op_data->op_attr_flags = ll_inode_to_ext_flags(inode_flags); if (fsxattr.fsx_xflags & FS_XFLAG_PROJINHERIT) op_data->op_attr_flags |= LUSTRE_PROJINHERIT_FL; op_data->op_projid = fsxattr.fsx_projid; op_data->op_xvalid |= OP_XVALID_PROJID | OP_XVALID_FLAGS; - rc = md_setattr(ll_i2sbi(inode)->ll_md_exp, op_data, NULL, - 0, &req); + rc = md_setattr(ll_i2sbi(inode)->ll_md_exp, op_data, NULL, 0, &req); ptlrpc_req_finished(req); if (rc) GOTO(out_fsxattr, rc); ll_update_inode_flags(inode, op_data->op_attr_flags); - obj = ll_i2info(inode)->lli_clob; - if (obj == NULL) - GOTO(out_fsxattr, rc); - /* Avoiding OST RPC if this is only project ioctl */ + /* Avoid OST RPC if this is only ioctl setting project inherit flag */ if (fsxattr.fsx_xflags == 0 || fsxattr.fsx_xflags == FS_XFLAG_PROJINHERIT) GOTO(out_fsxattr, rc); - OBD_ALLOC_PTR(attr); - if (attr == NULL) - GOTO(out_fsxattr, rc = -ENOMEM); + obj = ll_i2info(inode)->lli_clob; + if (obj) { + struct iattr attr = { 0 }; + + rc = cl_setattr_ost(obj, &attr, OP_XVALID_FLAGS, + fsxattr.fsx_xflags); + } - rc = cl_setattr_ost(obj, attr, OP_XVALID_FLAGS, - fsxattr.fsx_xflags); - OBD_FREE_PTR(attr); out_fsxattr: ll_finish_md_op_data(op_data); RETURN(rc); diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h index c64b95f..69c6f79 100644 --- a/lustre/llite/llite_internal.h +++ b/lustre/llite/llite_internal.h @@ -1136,12 +1136,12 @@ static inline int ll_xflags_to_inode_flags(int xflags) ((xflags & FS_XFLAG_IMMUTABLE) ? S_IMMUTABLE : 0); } -static inline int ll_inode_flags_to_xflags(int flags) +static inline int ll_inode_flags_to_xflags(int inode_flags) { - return ((flags & S_SYNC) ? FS_XFLAG_SYNC : 0) | - ((flags & S_NOATIME) ? FS_XFLAG_NOATIME : 0) | - ((flags & S_APPEND) ? FS_XFLAG_APPEND : 0) | - ((flags & S_IMMUTABLE) ? FS_XFLAG_IMMUTABLE : 0); + return ((inode_flags & S_SYNC) ? FS_XFLAG_SYNC : 0) | + ((inode_flags & S_NOATIME) ? FS_XFLAG_NOATIME : 0) | + ((inode_flags & S_APPEND) ? FS_XFLAG_APPEND : 0) | + ((inode_flags & S_IMMUTABLE) ? FS_XFLAG_IMMUTABLE : 0); } int ll_migrate(struct inode *parent, struct file *file, @@ -1204,7 +1204,7 @@ int ll_statfs(struct dentry *de, struct kstatfs *sfs); int ll_statfs_internal(struct ll_sb_info *sbi, struct obd_statfs *osfs, u32 flags); int ll_update_inode(struct inode *inode, struct lustre_md *md); -void ll_update_inode_flags(struct inode *inode, int ext_flags); +void ll_update_inode_flags(struct inode *inode, unsigned int ext_flags); int ll_read_inode2(struct inode *inode, void *opaque); void ll_delete_inode(struct inode *inode); int ll_iocontrol(struct inode *inode, struct file *file, diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 3a778a6..5bdef51 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -2418,7 +2418,7 @@ void ll_inode_size_unlock(struct inode *inode) mutex_unlock(&lli->lli_size_mutex); } -void ll_update_inode_flags(struct inode *inode, int ext_flags) +void ll_update_inode_flags(struct inode *inode, unsigned int ext_flags) { /* do not clear encryption flag */ ext_flags |= ll_inode_to_ext_flags(inode->i_flags) & LUSTRE_ENCRYPT_FL; -- 1.8.3.1