Skip to content
Snippets Groups Projects
Commit 245741a1 authored by Johann Lombardi's avatar Johann Lombardi
Browse files

Branch b1_6

b=13828
i=adilger
i=shadow

Land 2nd attachment (#13342):
- use a higher value for ATTR_CTIME_SET
- define MDS_ATTR_* in hex
- improve attr_unpack/attr_pack/mds_pack_open_flags
parent 10ee4d68
No related branches found
No related tags found
No related merge requests found
......@@ -108,7 +108,11 @@ static inline void d_rehash_cond(struct dentry * entry, int lock)
#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 */
......@@ -831,21 +831,21 @@ struct mds_rec_setattr {
* 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);
......
......@@ -107,22 +107,29 @@ void mdc_create_pack(struct ptlrpc_request *req, int offset,
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 */
......@@ -176,21 +183,39 @@ void mdc_open_pack(struct ptlrpc_request *req, int offset,
}
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,
......
......@@ -93,21 +93,39 @@ void mds_pack_inode2body(struct mds_body *b, struct inode *inode)
}
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 */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment