#include <linux/string.h>
#include <linux/stat.h>
#include <linux/errno.h>
-#include <linux/locks.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/unistd.h>
#include <asm/system.h>
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);
}
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);
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);
}
/* 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)
{
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);
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);
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);
}
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);
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);
}
[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);
}