#endif
#ifndef ATTR_CTIME_SET
-#define ATTR_CTIME_SET 131072
+/*
+ * set ATTR_CTIME_SET to a high value to avoid any risk of collision with other
+ * ATTR_* attributes (see bug 13828)
+ */
+#define ATTR_CTIME_SET (1 << 28)
#endif
#endif /* LUSTRE_PATCHLESS_COMPAT_H */
* since the client and MDS may run different kernels (see bug 13828)
* Therefore, we should only use MDS_ATTR_* attributes for sa_valid.
*/
-#define MDS_ATTR_MODE 1
-#define MDS_ATTR_UID 2
-#define MDS_ATTR_GID 4
-#define MDS_ATTR_SIZE 8
-#define MDS_ATTR_ATIME 16
-#define MDS_ATTR_MTIME 32
-#define MDS_ATTR_CTIME 64
-#define MDS_ATTR_ATIME_SET 128
-#define MDS_ATTR_MTIME_SET 256
-#define MDS_ATTR_FORCE 512 /* Not a change, but a change it */
-#define MDS_ATTR_ATTR_FLAG 1024
-#define MDS_ATTR_KILL_SUID 2048
-#define MDS_ATTR_KILL_SGID 4096
-#define MDS_ATTR_CTIME_SET 8192
-#define MDS_ATTR_FROM_OPEN 16384 /* called from open path, ie O_TRUNC */
+#define MDS_ATTR_MODE 0x1ULL /* = 1 */
+#define MDS_ATTR_UID 0x2ULL /* = 2 */
+#define MDS_ATTR_GID 0x4ULL /* = 4 */
+#define MDS_ATTR_SIZE 0x8ULL /* = 8 */
+#define MDS_ATTR_ATIME 0x10ULL /* = 16 */
+#define MDS_ATTR_MTIME 0x20ULL /* = 32 */
+#define MDS_ATTR_CTIME 0x40ULL /* = 64 */
+#define MDS_ATTR_ATIME_SET 0x80ULL /* = 128 */
+#define MDS_ATTR_MTIME_SET 0x100ULL /* = 256 */
+#define MDS_ATTR_FORCE 0x200ULL /* = 512, Not a change, but a change it */
+#define MDS_ATTR_ATTR_FLAG 0x400ULL /* = 1024 */
+#define MDS_ATTR_KILL_SUID 0x800ULL /* = 2048 */
+#define MDS_ATTR_KILL_SGID 0x1000ULL /* = 4096 */
+#define MDS_ATTR_CTIME_SET 0x2000ULL /* = 8192 */
+#define MDS_ATTR_FROM_OPEN 0x4000ULL /* = 16384, called from open path, ie O_TRUNC */
extern void lustre_swab_mds_rec_setattr (struct mds_rec_setattr *sa);
static __u32 mds_pack_open_flags(__u32 flags)
{
- return
- (flags & (FMODE_READ | FMODE_WRITE |
- MDS_OPEN_DELAY_CREATE | MDS_OPEN_HAS_EA |
- MDS_OPEN_HAS_OBJS | MDS_OPEN_OWNEROVERRIDE |
- MDS_OPEN_LOCK)) |
- ((flags & O_CREAT) ? MDS_OPEN_CREAT : 0) |
- ((flags & O_EXCL) ? MDS_OPEN_EXCL : 0) |
- ((flags & O_TRUNC) ? MDS_OPEN_TRUNC : 0) |
- ((flags & O_APPEND) ? MDS_OPEN_APPEND : 0) |
- ((flags & O_SYNC) ? MDS_OPEN_SYNC : 0) |
- ((flags & O_DIRECTORY) ? MDS_OPEN_DIRECTORY : 0) |
- ((flags & O_JOIN_FILE) ? MDS_OPEN_JOIN_FILE : 0) |
+ __u32 cr_flags = (flags & (FMODE_READ | FMODE_WRITE |
+ MDS_OPEN_DELAY_CREATE | MDS_OPEN_HAS_EA |
+ MDS_OPEN_HAS_OBJS | MDS_OPEN_OWNEROVERRIDE |
+ MDS_OPEN_LOCK));
+ if (flags & O_CREAT)
+ cr_flags |= MDS_OPEN_CREAT;
+ if (flags & O_EXCL)
+ cr_flags |= MDS_OPEN_EXCL;
+ if (flags & O_TRUNC)
+ cr_flags |= MDS_OPEN_TRUNC;
+ if (flags & O_APPEND)
+ cr_flags |= MDS_OPEN_APPEND;
+ if (flags & O_SYNC)
+ cr_flags |= MDS_OPEN_SYNC;
+ if (flags & O_DIRECTORY)
+ cr_flags |= MDS_OPEN_DIRECTORY;
+ if (flags & O_JOIN_FILE)
+ cr_flags |= MDS_OPEN_JOIN_FILE;
#ifdef FMODE_EXEC
- ((flags & FMODE_EXEC) ? MDS_FMODE_EXEC : 0) |
+ if (flags & FMODE_EXEC)
+ cr_flags |= MDS_FMODE_EXEC;
#endif
- 0;
+ return cr_flags;
}
/* packing of MDS records */
}
static inline __u64 attr_pack(unsigned int ia_valid) {
- return (ia_valid & ATTR_MODE ? MDS_ATTR_MODE : 0) | \
- (ia_valid & ATTR_UID ? MDS_ATTR_UID : 0) | \
- (ia_valid & ATTR_GID ? MDS_ATTR_GID : 0) | \
- (ia_valid & ATTR_SIZE ? MDS_ATTR_SIZE : 0) | \
- (ia_valid & ATTR_ATIME ? MDS_ATTR_ATIME : 0) | \
- (ia_valid & ATTR_MTIME ? MDS_ATTR_MTIME : 0) | \
- (ia_valid & ATTR_CTIME ? MDS_ATTR_CTIME : 0) | \
- (ia_valid & ATTR_ATIME_SET ? MDS_ATTR_ATIME_SET : 0) | \
- (ia_valid & ATTR_MTIME_SET ? MDS_ATTR_MTIME_SET : 0) | \
- (ia_valid & ATTR_FORCE ? MDS_ATTR_FORCE : 0) | \
- (ia_valid & ATTR_ATTR_FLAG ? MDS_ATTR_ATTR_FLAG : 0) | \
- (ia_valid & ATTR_KILL_SUID ? MDS_ATTR_KILL_SUID : 0) | \
- (ia_valid & ATTR_KILL_SGID ? MDS_ATTR_KILL_SGID : 0) | \
- (ia_valid & ATTR_CTIME_SET ? MDS_ATTR_CTIME_SET : 0) | \
- (ia_valid & ATTR_FROM_OPEN ? MDS_ATTR_FROM_OPEN : 0);
+ __u64 sa_valid = 0;
+
+ if (ia_valid & ATTR_MODE)
+ sa_valid |= MDS_ATTR_MODE;
+ if (ia_valid & ATTR_UID)
+ sa_valid |= MDS_ATTR_UID;
+ if (ia_valid & ATTR_GID)
+ sa_valid |= MDS_ATTR_GID;
+ if (ia_valid & ATTR_SIZE)
+ sa_valid |= MDS_ATTR_SIZE;
+ if (ia_valid & ATTR_ATIME)
+ sa_valid |= MDS_ATTR_ATIME;
+ if (ia_valid & ATTR_MTIME)
+ sa_valid |= MDS_ATTR_MTIME;
+ if (ia_valid & ATTR_CTIME)
+ sa_valid |= MDS_ATTR_CTIME;
+ if (ia_valid & ATTR_ATIME_SET)
+ sa_valid |= MDS_ATTR_ATIME_SET;
+ if (ia_valid & ATTR_MTIME_SET)
+ sa_valid |= MDS_ATTR_MTIME_SET;
+ if (ia_valid & ATTR_FORCE)
+ sa_valid |= MDS_ATTR_FORCE;
+ if (ia_valid & ATTR_ATTR_FLAG)
+ sa_valid |= MDS_ATTR_ATTR_FLAG;
+ if (ia_valid & ATTR_KILL_SUID)
+ sa_valid |= MDS_ATTR_KILL_SUID;
+ if (ia_valid & ATTR_KILL_SGID)
+ sa_valid |= MDS_ATTR_KILL_SGID;
+ if (ia_valid & ATTR_CTIME_SET)
+ sa_valid |= MDS_ATTR_CTIME_SET;
+ if (ia_valid & ATTR_FROM_OPEN)
+ sa_valid |= MDS_ATTR_FROM_OPEN;
+ return sa_valid;
}
void mdc_setattr_pack(struct ptlrpc_request *req, int offset,
}
static inline unsigned int attr_unpack(__u64 sa_valid) {
- return (sa_valid & MDS_ATTR_MODE ? ATTR_MODE : 0) | \
- (sa_valid & MDS_ATTR_UID ? ATTR_UID : 0) | \
- (sa_valid & MDS_ATTR_GID ? ATTR_GID : 0) | \
- (sa_valid & MDS_ATTR_SIZE ? ATTR_SIZE : 0) | \
- (sa_valid & MDS_ATTR_ATIME ? ATTR_ATIME : 0) | \
- (sa_valid & MDS_ATTR_MTIME ? ATTR_MTIME : 0) | \
- (sa_valid & MDS_ATTR_CTIME ? ATTR_CTIME : 0) | \
- (sa_valid & MDS_ATTR_ATIME_SET ? ATTR_ATIME_SET : 0) | \
- (sa_valid & MDS_ATTR_MTIME_SET ? ATTR_MTIME_SET : 0) | \
- (sa_valid & MDS_ATTR_FORCE ? ATTR_FORCE : 0) | \
- (sa_valid & MDS_ATTR_ATTR_FLAG ? ATTR_ATTR_FLAG : 0) | \
- (sa_valid & MDS_ATTR_KILL_SUID ? ATTR_KILL_SUID : 0) | \
- (sa_valid & MDS_ATTR_KILL_SGID ? ATTR_KILL_SGID : 0) | \
- (sa_valid & MDS_ATTR_CTIME_SET ? ATTR_CTIME_SET : 0) | \
- (sa_valid & MDS_ATTR_FROM_OPEN ? ATTR_FROM_OPEN : 0);
+ unsigned int ia_valid = 0;
+
+ if (sa_valid & MDS_ATTR_MODE)
+ ia_valid |= ATTR_MODE;
+ if (sa_valid & MDS_ATTR_UID)
+ ia_valid |= ATTR_UID;
+ if (sa_valid & MDS_ATTR_GID)
+ ia_valid |= ATTR_GID;
+ if (sa_valid & MDS_ATTR_SIZE)
+ ia_valid |= ATTR_SIZE;
+ if (sa_valid & MDS_ATTR_ATIME)
+ ia_valid |= ATTR_ATIME;
+ if (sa_valid & MDS_ATTR_MTIME)
+ ia_valid |= ATTR_MTIME;
+ if (sa_valid & MDS_ATTR_CTIME)
+ ia_valid |= ATTR_CTIME;
+ if (sa_valid & MDS_ATTR_ATIME_SET)
+ ia_valid |= ATTR_ATIME_SET;
+ if (sa_valid & MDS_ATTR_MTIME_SET)
+ ia_valid |= ATTR_MTIME_SET;
+ if (sa_valid & MDS_ATTR_FORCE)
+ ia_valid |= ATTR_FORCE;
+ if (sa_valid & MDS_ATTR_ATTR_FLAG)
+ ia_valid |= ATTR_ATTR_FLAG;
+ if (sa_valid & MDS_ATTR_KILL_SUID)
+ ia_valid |= ATTR_KILL_SUID;
+ if (sa_valid & MDS_ATTR_KILL_SGID)
+ ia_valid |= ATTR_KILL_SGID;
+ if (sa_valid & MDS_ATTR_CTIME_SET)
+ ia_valid |= ATTR_CTIME_SET;
+ if (sa_valid & MDS_ATTR_FROM_OPEN)
+ ia_valid |= ATTR_FROM_OPEN;
+ return ia_valid;
}
/* unpacking */