X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flib%2Fmds_updates.c;h=b436d052dcd0ef306ff373a6e6b2c55a822915c3;hb=400b0681017091fab9cef9bd00e0f536e1793dcc;hp=00620a1e967ceaa7acf49eda66fffaadc09e82f5;hpb=b00e39dd57f226e3f9f07bd69c299744badc0bc0;p=fs%2Flustre-release.git diff --git a/lustre/lib/mds_updates.c b/lustre/lib/mds_updates.c index 00620a1..b436d05 100644 --- a/lustre/lib/mds_updates.c +++ b/lustre/lib/mds_updates.c @@ -18,7 +18,11 @@ #include #include #include -#include +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +#include // for wait_on_buffer +#else +#include // for wait_on_buffer +#endif #include #include @@ -59,8 +63,7 @@ void mds_pack_inode2body(struct mds_body *b, struct inode *inode) b->uid = HTON__u32(inode->i_uid); b->gid = HTON__u32(inode->i_gid); b->flags = HTON__u32(inode->i_flags); - //b->major = HTON__u32(inode->i_major); - //b->minor = HTON__u32(inode->i_minor); + b->rdev = HTON__u32(b->rdev); b->nlink = HTON__u32(inode->i_nlink); b->generation = HTON__u32(inode->i_generation); } @@ -83,8 +86,8 @@ static void mds_pack_body(struct mds_body *b) mds_pack_fid(&b->fid1); mds_pack_fid(&b->fid2); - b->extra = HTON__u64(b->extra); b->size = HTON__u64(b->size); + b->ino = HTON__u32(b->ino); b->valid = HTON__u32(b->valid); b->mode = HTON__u32(b->mode); b->uid = HTON__u32(b->uid); @@ -93,9 +96,7 @@ static void mds_pack_body(struct mds_body *b) b->ctime = HTON__u32(b->ctime); b->atime = HTON__u32(b->atime); b->flags = HTON__u32(b->flags); - b->major = HTON__u32(b->major); - b->minor = HTON__u32(b->minor); - b->ino = HTON__u32(b->ino); + b->rdev = HTON__u32(b->rdev); b->nlink = HTON__u32(b->nlink); b->generation = HTON__u32(b->generation); } @@ -131,7 +132,7 @@ void mds_pack_rep_body(struct ptlrpc_request *req) /* packing of MDS records */ void mds_create_pack(struct ptlrpc_request *req, int offset, - struct inode *inode, __u32 mode, __u64 rdev, __u32 uid, + struct inode *dir, __u32 mode, __u64 rdev, __u32 uid, __u32 gid, __u64 time, const char *name, int namelen, const char *tgt, int tgtlen) { @@ -143,7 +144,7 @@ void mds_create_pack(struct ptlrpc_request *req, int offset, rec->cr_opcode = HTON__u32(REINT_CREATE); rec->cr_fsuid = HTON__u32(current->fsuid); rec->cr_fsgid = HTON__u32(current->fsgid); - ll_inode2fid(&rec->cr_fid, inode); + ll_inode2fid(&rec->cr_fid, dir); rec->cr_mode = HTON__u32(mode); rec->cr_rdev = HTON__u64(rdev); rec->cr_uid = HTON__u32(uid); @@ -265,13 +266,13 @@ void mds_unpack_body(struct mds_body *b) if (b == NULL) LBUG(); - b->fsuid = NTOH__u32(b->fsuid); - b->fsgid = NTOH__u32(b->fsgid); mds_unpack_fid(&b->fid1); mds_unpack_fid(&b->fid2); - b->extra = NTOH__u64(b->extra); b->size = NTOH__u64(b->size); b->valid = NTOH__u32(b->valid); + b->fsuid = NTOH__u32(b->fsuid); + b->fsgid = NTOH__u32(b->fsgid); + b->ino = NTOH__u32(b->ino); b->mode = NTOH__u32(b->mode); b->uid = NTOH__u32(b->uid); b->gid = NTOH__u32(b->gid); @@ -279,9 +280,7 @@ void mds_unpack_body(struct mds_body *b) b->ctime = NTOH__u32(b->ctime); b->atime = NTOH__u32(b->atime); b->flags = NTOH__u32(b->flags); - b->major = NTOH__u32(b->major); - b->minor = NTOH__u32(b->minor); - b->ino = NTOH__u32(b->ino); + b->rdev = NTOH__u32(b->rdev); b->nlink = NTOH__u32(b->nlink); b->generation = NTOH__u32(b->generation); } @@ -325,7 +324,7 @@ static int mds_create_unpack(struct ptlrpc_request *req, int offset, struct mds_rec_create *rec = lustre_msg_buf(req->rq_reqmsg, offset); ENTRY; - if (req->rq_reqmsg->bufcount != offset + 3 || + if (req->rq_reqmsg->bufcount < offset + 2 || req->rq_reqmsg->buflens[offset] != sizeof(*rec)) RETURN(-EFAULT); @@ -341,8 +340,13 @@ static int mds_create_unpack(struct ptlrpc_request *req, int offset, r->ur_name = lustre_msg_buf(req->rq_reqmsg, offset + 1); r->ur_namelen = req->rq_reqmsg->buflens[offset + 1]; - r->ur_tgt = lustre_msg_buf(req->rq_reqmsg, offset + 2); - r->ur_tgtlen = req->rq_reqmsg->buflens[offset + 2]; + if (req->rq_reqmsg->bufcount == offset + 3) { + r->ur_tgt = lustre_msg_buf(req->rq_reqmsg, offset + 2); + r->ur_tgtlen = req->rq_reqmsg->buflens[offset + 2]; + } else { + r->ur_tgt = NULL; + r->ur_tgtlen = 0; + } RETURN(0); } @@ -419,24 +423,24 @@ static update_unpacker mds_unpackers[REINT_MAX + 1] = { [REINT_LINK] mds_link_unpack, [REINT_UNLINK] mds_unlink_unpack, [REINT_RENAME] mds_rename_unpack, - [REINT_RECREATE] mds_create_unpack, }; int mds_update_unpack(struct ptlrpc_request *req, int offset, struct mds_update_record *rec) { __u32 *opcode = lustre_msg_buf(req->rq_reqmsg, offset); - int rc; + int rc, realop; ENTRY; if (!opcode || req->rq_reqmsg->buflens[offset] < sizeof(*opcode)) RETURN(-EFAULT); - rec->ur_opcode = NTOH__u32(*opcode); + realop = rec->ur_opcode = NTOH__u32(*opcode); + realop &= REINT_OPCODE_MASK; - if (rec->ur_opcode < 0 || rec->ur_opcode > REINT_MAX) + if (realop < 0 || realop > REINT_MAX) RETURN(-EFAULT); - rc = mds_unpackers[rec->ur_opcode](req, offset, rec); + rc = mds_unpackers[realop](req, offset, rec); RETURN(rc); }