#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 */
#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)
{
- 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_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)
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;
EXIT;
update_cache:
- inode->i_flags = ll_ext_to_inode_flags(flags |
- MDS_BFLAG_EXT_FLAGS);
+ inode->i_flags = ll_ext_to_inode_flags(flags);
return 0;
}
default:
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->flags = flags;
b->suppgid = op_data->op_suppgids[0];
b->fid1 = op_data->op_fid1;
RETURN(rc);
}
- /* 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) {
RETURN(rc);
}
- /* 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);
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);
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);
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);