#include <linux/stat.h>
#include <linux/errno.h>
#include <linux/version.h>
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-# include <linux/locks.h> // for wait_on_buffer
-#else
-# include <linux/buffer_head.h> // for wait_on_buffer
-#endif
+#include <linux/buffer_head.h> // for wait_on_buffer
#include <linux/unistd.h>
#include <asm/system.h>
#include <linux/stat.h>
#include <asm/uaccess.h>
#include <linux/slab.h>
-#include <asm/segment.h>
#include <obd_support.h>
#include <lustre_lib.h>
b->suppgid = -1;
}
+static inline unsigned int attr_unpack(__u64 sa_valid) {
+ 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;
+ if (sa_valid & MDS_ATTR_BLOCKS)
+ ia_valid |= ATTR_BLOCKS;
+ if (sa_valid & MDS_OPEN_OWNEROVERRIDE)
+ ia_valid |= MDS_OPEN_OWNEROVERRIDE;
+ return ia_valid;
+}
+
/* unpacking */
static int mds_setattr_unpack(struct ptlrpc_request *req, int offset,
struct mds_update_record *r)
r->ur_uc.luc_suppgid2 = -1;
#endif
r->ur_fid1 = &rec->sa_fid;
- attr->ia_valid = rec->sa_valid;
+ attr->ia_valid = attr_unpack(rec->sa_valid);
attr->ia_mode = rec->sa_mode;
attr->ia_uid = rec->sa_uid;
attr->ia_gid = rec->sa_gid;
LTIME_S(attr->ia_ctime) = rec->sa_ctime;
r->ur_flags = rec->sa_attr_flags;
- LASSERT_REQSWAB (req, offset + 1);
+ lustre_set_req_swabbed(req, offset + 1);
r->ur_eadatalen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
if (r->ur_eadatalen) {
r->ur_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 1, 0);
r->ur_time = rec->cr_time;
r->ur_flags = rec->cr_flags;
- LASSERT_REQSWAB(req, offset + 1);
+ lustre_set_req_swabbed(req, offset + 1);
r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
if (r->ur_name == NULL)
RETURN (-EFAULT);
r->ur_namelen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
- LASSERT_REQSWAB(req, offset + 2);
+ lustre_set_req_swabbed(req, offset + 2);
r->ur_tgtlen = lustre_msg_buflen(req->rq_reqmsg, offset + 2);
if (r->ur_tgtlen) {
/* NB for now, we only seem to pass NULL terminated symlink
r->ur_fid2 = &rec->lk_fid2;
r->ur_time = rec->lk_time;
- LASSERT_REQSWAB(req, offset + 1);
+ lustre_set_req_swabbed(req, offset + 1);
r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
if (r->ur_name == NULL)
RETURN (-EFAULT);
r->ur_fid2 = &rec->ul_fid2;
r->ur_time = rec->ul_time;
- LASSERT_REQSWAB(req, offset + 1);
+ lustre_set_req_swabbed(req, offset + 1);
r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
if (r->ur_name == NULL)
RETURN(-EFAULT);
r->ur_fid2 = &rec->rn_fid2;
r->ur_time = rec->rn_time;
- LASSERT_REQSWAB (req, offset + 1);
+ lustre_set_req_swabbed(req, offset + 1);
r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
if (r->ur_name == NULL)
RETURN(-EFAULT);
r->ur_namelen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
- LASSERT_REQSWAB (req, offset + 2);
+ lustre_set_req_swabbed(req, offset + 2);
r->ur_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0);
if (r->ur_tgt == NULL)
RETURN(-EFAULT);
r->ur_time = rec->cr_time;
r->ur_flags = rec->cr_flags;
- LASSERT_REQSWAB(req, offset + 1);
+ lustre_set_req_swabbed(req, offset + 1);
r->ur_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0);
if (r->ur_name == NULL)
RETURN(-EFAULT);
r->ur_namelen = lustre_msg_buflen(req->rq_reqmsg, offset + 1);
- LASSERT_REQSWAB(req, offset + 2);
+ lustre_set_req_swabbed(req, offset + 2);
r->ur_eadatalen = lustre_msg_buflen(req->rq_reqmsg, offset + 2);
if (r->ur_eadatalen) {
r->ur_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0);