inode flags should be convert to platform-neutral MDS_*_FL before
being sent on the wire. Also removed unused flags MDS_BFLAG_EXT_FLAGS.
i=adilger
#define MF_SOM_LOCAL_FLAGS (MF_SOM_CHANGE | MF_EPOCH_OPEN | MF_EPOCH_CLOSE)
#define MDS_BFLAG_UNCOMMITTED_WRITES 0x1
#define MF_SOM_LOCAL_FLAGS (MF_SOM_CHANGE | MF_EPOCH_OPEN | MF_EPOCH_CLOSE)
#define MDS_BFLAG_UNCOMMITTED_WRITES 0x1
-#define MDS_BFLAG_EXT_FLAGS 0x80000000 /* == EXT3_RESERVED_FL */
/* these should be identical to their EXT3_*_FL counterparts, and are
* redefined here only to avoid dragging in ext3_fs.h */
/* these should be identical to their EXT3_*_FL counterparts, and are
* redefined here only to avoid dragging in ext3_fs.h */
#define MDS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (dir only) */
#ifdef __KERNEL__
#define MDS_DIRSYNC_FL 0x00010000 /* dirsync behaviour (dir only) */
#ifdef __KERNEL__
-/* If MDS_BFLAG_IOC_FLAGS is set it means we requested EXT3_*_FL inode flags
- * and we need to decode these into local S_* flags in the inode. Otherwise
- * we pass flags straight through (see bug 9486). */
+/* Convert wire MDS_*_FL to corresponding client local VFS S_* values
+ * for the client inode i_flags. The MDS_*_FL are the Lustre wire
+ * protocol equivalents of LDISKFS_*_FL values stored on disk, while
+ * the S_* flags are kernel-internal values that change between kernel
+ * 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 flags)
{
- return (flags & MDS_BFLAG_EXT_FLAGS) ?
- (((flags & MDS_SYNC_FL) ? S_SYNC : 0) |
+ return (((flags & MDS_SYNC_FL) ? S_SYNC : 0) |
((flags & MDS_NOATIME_FL) ? S_NOATIME : 0) |
((flags & MDS_APPEND_FL) ? S_APPEND : 0) |
#if defined(S_DIRSYNC)
((flags & MDS_DIRSYNC_FL) ? S_DIRSYNC : 0) |
#endif
((flags & MDS_NOATIME_FL) ? S_NOATIME : 0) |
((flags & MDS_APPEND_FL) ? S_APPEND : 0) |
#if defined(S_DIRSYNC)
((flags & MDS_DIRSYNC_FL) ? S_DIRSYNC : 0) |
#endif
- ((flags & MDS_IMMUTABLE_FL) ? S_IMMUTABLE : 0)) :
- (flags & ~MDS_BFLAG_EXT_FLAGS);
+ ((flags & MDS_IMMUTABLE_FL) ? S_IMMUTABLE : 0));
-/* If MDS_BFLAG_EXT_FLAGS is set it means we requested EXT3_*_FL inode flags
- * and we pass these straight through. Otherwise we need to convert from
- * S_* flags to their EXT3_*_FL equivalents (see bug 9486). */
-static inline int ll_inode_to_ext_flags(int oflags, int iflags)
+static inline int ll_inode_to_ext_flags(int iflags)
- return (oflags & MDS_BFLAG_EXT_FLAGS) ? (oflags & ~MDS_BFLAG_EXT_FLAGS):
- (((iflags & S_SYNC) ? MDS_SYNC_FL : 0) |
+ return (((iflags & S_SYNC) ? MDS_SYNC_FL : 0) |
((iflags & S_NOATIME) ? MDS_NOATIME_FL : 0) |
((iflags & S_APPEND) ? MDS_APPEND_FL : 0) |
#if defined(S_DIRSYNC)
((iflags & S_NOATIME) ? MDS_NOATIME_FL : 0) |
((iflags & S_APPEND) ? MDS_APPEND_FL : 0) |
#if defined(S_DIRSYNC)
op_data->op_attr.ia_ctime = inode->i_ctime;
op_data->op_attr.ia_size = i_size_read(inode);
op_data->op_attr_blocks = inode->i_blocks;
op_data->op_attr.ia_ctime = inode->i_ctime;
op_data->op_attr.ia_size = i_size_read(inode);
op_data->op_attr_blocks = inode->i_blocks;
- ((struct ll_iattr *)&op_data->op_attr)->ia_attr_flags = inode->i_flags;
+ ((struct ll_iattr *)&op_data->op_attr)->ia_attr_flags =
+ ll_inode_to_ext_flags(inode->i_flags);
op_data->op_ioepoch = ll_i2info(inode)->lli_ioepoch;
if (fh)
op_data->op_handle = *fh;
op_data->op_ioepoch = ll_i2info(inode)->lli_ioepoch;
if (fh)
op_data->op_handle = *fh;
- inode->i_flags = ll_ext_to_inode_flags(flags |
- MDS_BFLAG_EXT_FLAGS);
+ inode->i_flags = ll_ext_to_inode_flags(flags);
b->valid |= OBD_MD_FLCKSPLIT;
if (op_data->op_bias & MDS_CROSS_REF)
b->valid |= OBD_MD_FLCROSSREF;
b->valid |= OBD_MD_FLCKSPLIT;
if (op_data->op_bias & MDS_CROSS_REF)
b->valid |= OBD_MD_FLCROSSREF;
- b->flags = flags | MDS_BFLAG_EXT_FLAGS;
b->suppgid = op_data->op_suppgids[0];
b->fid1 = op_data->op_fid1;
b->suppgid = op_data->op_suppgids[0];
b->fid1 = op_data->op_fid1;
- /* MDS_BFLAG_EXT_FLAGS: request "new" flags(bug 9486) */
- mdc_pack_body(req, fid, oc, valid, ea_size, -1, MDS_BFLAG_EXT_FLAGS);
+ mdc_pack_body(req, fid, oc, valid, ea_size, -1, 0);
req_capsule_set_size(&req->rq_pill, &RMF_MDT_MD, RCL_SERVER, ea_size);
if (valid & OBD_MD_FLRMTPERM) {
req_capsule_set_size(&req->rq_pill, &RMF_MDT_MD, RCL_SERVER, ea_size);
if (valid & OBD_MD_FLRMTPERM) {
- /* MDS_BFLAG_EXT_FLAGS: request "new" flags(bug 9486) */
- mdc_pack_body(req, fid, oc, valid, ea_size, suppgid,
- MDS_BFLAG_EXT_FLAGS);
+ mdc_pack_body(req, fid, oc, valid, ea_size, suppgid, 0);
if (filename) {
char *name = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
if (filename) {
char *name = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
CLASSERT(MDS_APPEND_FL == 0x00000020);
CLASSERT(MDS_NOATIME_FL == 0x00000080);
CLASSERT(MDS_DIRSYNC_FL == 0x00010000);
CLASSERT(MDS_APPEND_FL == 0x00000020);
CLASSERT(MDS_NOATIME_FL == 0x00000080);
CLASSERT(MDS_DIRSYNC_FL == 0x00010000);
- CLASSERT(MDS_BFLAG_EXT_FLAGS == 0x80000000);
CLASSERT(MDS_INODELOCK_LOOKUP == 0x000001);
CLASSERT(MDS_INODELOCK_UPDATE == 0x000002);
CLASSERT(MDS_INODELOCK_OPEN == 0x000004);
CLASSERT(MDS_INODELOCK_LOOKUP == 0x000001);
CLASSERT(MDS_INODELOCK_UPDATE == 0x000002);
CLASSERT(MDS_INODELOCK_OPEN == 0x000004);
CHECK_CDEFINE(MDS_APPEND_FL);
CHECK_CDEFINE(MDS_NOATIME_FL);
CHECK_CDEFINE(MDS_DIRSYNC_FL);
CHECK_CDEFINE(MDS_APPEND_FL);
CHECK_CDEFINE(MDS_NOATIME_FL);
CHECK_CDEFINE(MDS_DIRSYNC_FL);
- CHECK_CDEFINE(MDS_BFLAG_EXT_FLAGS);
CHECK_CDEFINE(MDS_INODELOCK_LOOKUP);
CHECK_CDEFINE(MDS_INODELOCK_UPDATE);
CHECK_CDEFINE(MDS_INODELOCK_LOOKUP);
CHECK_CDEFINE(MDS_INODELOCK_UPDATE);
CLASSERT(MDS_APPEND_FL == 0x00000020);
CLASSERT(MDS_NOATIME_FL == 0x00000080);
CLASSERT(MDS_DIRSYNC_FL == 0x00010000);
CLASSERT(MDS_APPEND_FL == 0x00000020);
CLASSERT(MDS_NOATIME_FL == 0x00000080);
CLASSERT(MDS_DIRSYNC_FL == 0x00010000);
- CLASSERT(MDS_BFLAG_EXT_FLAGS == 0x80000000);
CLASSERT(MDS_INODELOCK_LOOKUP == 0x000001);
CLASSERT(MDS_INODELOCK_UPDATE == 0x000002);
CLASSERT(MDS_INODELOCK_OPEN == 0x000004);
CLASSERT(MDS_INODELOCK_LOOKUP == 0x000001);
CLASSERT(MDS_INODELOCK_UPDATE == 0x000002);
CLASSERT(MDS_INODELOCK_OPEN == 0x000004);