X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fmdc%2Fmdc_lib.c;h=bc6e4bb593b87bbea646c46261add9c031fa9e9e;hb=95d394d59bbccbc92af076c985fd664719f8fe12;hp=5d675e4ad7b8481fa1c6f076e2fc1ce5af521e4e;hpb=090c677210ee2946d99c71412e4ff762bb300f4f;p=fs%2Flustre-release.git diff --git a/lustre/mdc/mdc_lib.c b/lustre/mdc/mdc_lib.c index 5d675e4..bc6e4bb 100644 --- a/lustre/mdc/mdc_lib.c +++ b/lustre/mdc/mdc_lib.c @@ -19,6 +19,9 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifndef EXPORT_SYMTAB +# define EXPORT_SYMTAB +#endif #define DEBUG_SUBSYSTEM S_MDS #ifndef __KERNEL__ # include @@ -36,65 +39,17 @@ #endif #endif -void mdc_readdir_pack(struct ptlrpc_request *req, __u64 offset, __u32 size, - struct ll_fid *mdc_fid) +void mdc_readdir_pack(struct ptlrpc_request *req, int req_offset, + __u64 offset, __u32 size, struct lustre_id *mdc_id) { struct mds_body *b; - b = lustre_msg_buf(req->rq_reqmsg, 0, sizeof (*b)); - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; - b->capability = current->cap_effective; - b->fid1 = *mdc_fid; + b = lustre_msg_buf(req->rq_reqmsg, req_offset, sizeof (*b)); + b->id1 = *mdc_id; b->size = offset; /* !! */ - b->suppgid = -1; b->nlink = size; /* !! */ } -static void mdc_pack_body(struct mds_body *b) -{ - LASSERT (b != NULL); - - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; - b->capability = current->cap_effective; -} - -void mdc_pack_req_body(struct ptlrpc_request *req) -{ - struct mds_body *b = lustre_msg_buf(req->rq_reqmsg, 0, sizeof (*b)); - mdc_pack_body(b); -} - -/* packing of MDS records */ -void mdc_create_pack(struct ptlrpc_request *req, int offset, - struct mdc_op_data *op_data, __u32 mode, __u64 rdev, - const void *data, int datalen) -{ - struct mds_rec_create *rec; - char *tmp; - rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); - - rec->cr_opcode = REINT_CREATE; - rec->cr_fsuid = current->fsuid; - rec->cr_fsgid = current->fsgid; - rec->cr_cap = current->cap_effective; - rec->cr_fid = op_data->fid1; - memset(&rec->cr_replayfid, 0, sizeof(rec->cr_replayfid)); - rec->cr_mode = mode; - rec->cr_rdev = rdev; - rec->cr_time = op_data->mod_time; - rec->cr_suppgid = op_data->ctxt.gid1; - - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, op_data->namelen + 1); - LOGL0(op_data->name, op_data->namelen, tmp); - - if (data) { - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 2, datalen); - memcpy (tmp, data, datalen); - } -} - static __u32 mds_pack_open_flags(__u32 flags) { return @@ -111,185 +66,87 @@ static __u32 mds_pack_open_flags(__u32 flags) } /* packing of MDS records */ -void mdc_open_pack(struct ptlrpc_request *req, int offset, +void mdc_open_pack(struct lustre_msg *msg, int offset, struct mdc_op_data *op_data, __u32 mode, __u64 rdev, __u32 flags, const void *lmm, int lmmlen) { struct mds_rec_create *rec; char *tmp; - rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); + rec = lustre_msg_buf(msg, offset, sizeof (*rec)); /* XXX do something about time, uid, gid */ rec->cr_opcode = REINT_OPEN; - rec->cr_fsuid = current->fsuid; - rec->cr_fsgid = current->fsgid; - rec->cr_cap = current->cap_effective; if (op_data != NULL) - rec->cr_fid = op_data->fid1; - memset(&rec->cr_replayfid, 0, sizeof(rec->cr_replayfid)); + rec->cr_id = op_data->id1; + memset(&rec->cr_replayid, 0, sizeof(rec->cr_replayid)); rec->cr_mode = mode; rec->cr_flags = mds_pack_open_flags(flags); rec->cr_rdev = rdev; rec->cr_time = op_data->mod_time; - rec->cr_suppgid = op_data->ctxt.gid1; if (op_data->name) { - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, + tmp = lustre_msg_buf(msg, offset + 1, op_data->namelen + 1); LOGL0(op_data->name, op_data->namelen, tmp); } if (lmm) { rec->cr_flags |= MDS_OPEN_HAS_EA; - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 2, lmmlen); + tmp = lustre_msg_buf(msg, offset + 2, lmmlen); memcpy (tmp, lmm, lmmlen); } } -void mdc_setattr_pack(struct ptlrpc_request *req, struct mdc_op_data *data, - struct iattr *iattr, void *ea, int ealen, - void *ea2, int ea2len) -{ - struct mds_rec_setattr *rec = lustre_msg_buf(req->rq_reqmsg, 0, - sizeof (*rec)); - rec->sa_opcode = REINT_SETATTR; - rec->sa_fsuid = current->fsuid; - rec->sa_fsgid = current->fsgid; - rec->sa_cap = current->cap_effective; - rec->sa_fid = data->fid1; - - if (iattr) { - rec->sa_valid = iattr->ia_valid; - rec->sa_mode = iattr->ia_mode; - rec->sa_uid = iattr->ia_uid; - rec->sa_gid = iattr->ia_gid; - rec->sa_size = iattr->ia_size; - rec->sa_atime = LTIME_S(iattr->ia_atime); - rec->sa_mtime = LTIME_S(iattr->ia_mtime); - rec->sa_ctime = LTIME_S(iattr->ia_ctime); - rec->sa_attr_flags = iattr->ia_attr_flags; - if ((iattr->ia_valid & ATTR_GID) && in_group_p(iattr->ia_gid)) - rec->sa_suppgid = iattr->ia_gid; - else if ((iattr->ia_valid & ATTR_MODE) && - in_group_p(iattr->ia_gid)) - rec->sa_suppgid = data->ctxt.gid1; - else if ((iattr->ia_valid & (ATTR_MTIME|ATTR_CTIME)) && - data->ctxt.gid1 != -1) - rec->sa_suppgid = data->ctxt.gid1; - } - - if (ealen == 0) - return; - - memcpy(lustre_msg_buf(req->rq_reqmsg, 1, ealen), ea, ealen); - - if (ea2len == 0) - return; - - memcpy(lustre_msg_buf(req->rq_reqmsg, 2, ea2len), ea2, ea2len); -} - -void mdc_unlink_pack(struct ptlrpc_request *req, int offset, - struct mdc_op_data *data) -{ - struct mds_rec_unlink *rec; - char *tmp; - - rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); - LASSERT (rec != NULL); - - rec->ul_opcode = REINT_UNLINK; - rec->ul_fsuid = current->fsuid; - rec->ul_fsgid = current->fsgid; - rec->ul_cap = current->cap_effective; - rec->ul_mode = data->create_mode; - rec->ul_suppgid = data->ctxt.gid1; - rec->ul_fid1 = data->fid1; - rec->ul_fid2 = data->fid2; - rec->ul_time = data->mod_time; - - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, data->namelen + 1); - LASSERT (tmp != NULL); - LOGL0(data->name, data->namelen, tmp); -} - -void mdc_link_pack(struct ptlrpc_request *req, int offset, - struct mdc_op_data *data) -{ - struct mds_rec_link *rec; - char *tmp; - - rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); - - rec->lk_opcode = REINT_LINK; - rec->lk_fsuid = current->fsuid; - rec->lk_fsgid = current->fsgid; - rec->lk_cap = current->cap_effective; - rec->lk_suppgid1 = data->ctxt.gid1; - rec->lk_suppgid2 = data->ctxt.gid2; - rec->lk_fid1 = data->fid1; - rec->lk_fid2 = data->fid2; - rec->lk_time = data->mod_time; - - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, data->namelen + 1); - LOGL0(data->name, data->namelen, tmp); -} - -void mdc_rename_pack(struct ptlrpc_request *req, int offset, - struct mdc_op_data *data, - const char *old, int oldlen, const char *new, int newlen) -{ - struct mds_rec_rename *rec; - char *tmp; - - rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); - - /* XXX do something about time, uid, gid */ - rec->rn_opcode = REINT_RENAME; - rec->rn_fsuid = current->fsuid; - rec->rn_fsgid = current->fsgid; - rec->rn_cap = current->cap_effective; - if (in_group_p(data->ctxt.gid1)) - rec->rn_suppgid1 = data->ctxt.gid1; - else - rec->rn_suppgid1 = -1; - if (in_group_p(data->ctxt.gid2)) - rec->rn_suppgid2 = data->ctxt.gid2; - else - rec->rn_suppgid2 = -1; - rec->rn_fid1 = data->fid1; - rec->rn_fid2 = data->fid2; - rec->rn_time = data->mod_time; - - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, oldlen + 1); - LOGL0(old, oldlen, tmp); - - if (new) { - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 2, newlen + 1); - LOGL0(new, newlen, tmp); - } -} - -void mdc_getattr_pack(struct ptlrpc_request *req, int valid, int offset, - int flags, struct mdc_op_data *data) +void mdc_getattr_pack(struct lustre_msg *msg, int offset, + __u64 valid, int flags, struct mdc_op_data *data) { struct mds_body *b; - b = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*b)); + b = lustre_msg_buf(msg, offset, sizeof (*b)); - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; - b->capability = current->cap_effective; b->valid = valid; b->flags = flags; - b->suppgid = data->ctxt.gid1; - b->fid1 = data->fid1; - b->fid2 = data->fid2; + b->id1 = data->id1; + b->id2 = data->id2; if (data->name) { char *tmp; - tmp = lustre_msg_buf(req->rq_reqmsg, offset + 1, + tmp = lustre_msg_buf(msg, offset + 1, data->namelen + 1); LOGL0(data->name, data->namelen, tmp); } } +void mdc_close_pack(struct ptlrpc_request *req, int offset, struct obdo *oa, + __u64 valid, struct obd_client_handle *och) +{ + struct mds_body *body; + + body = lustre_msg_buf(req->rq_reqmsg, offset, sizeof(*body)); + mdc_pack_id(&body->id1, oa->o_id, 0, oa->o_mode, 0, 0); + + memcpy(&body->handle, &och->och_fh, sizeof(body->handle)); + if (oa->o_valid & OBD_MD_FLATIME) { + body->atime = oa->o_atime; + body->valid |= OBD_MD_FLATIME; + } + if (oa->o_valid & OBD_MD_FLMTIME) { + body->mtime = oa->o_mtime; + body->valid |= OBD_MD_FLMTIME; + } + if (oa->o_valid & OBD_MD_FLCTIME) { + body->ctime = oa->o_ctime; + body->valid |= OBD_MD_FLCTIME; + } + if (oa->o_valid & OBD_MD_FLSIZE) { + body->size = oa->o_size; + body->valid |= OBD_MD_FLSIZE; + } + if (oa->o_valid & OBD_MD_FLBLOCKS) { + body->blocks = oa->o_blocks; + body->valid |= OBD_MD_FLBLOCKS; + } + if (oa->o_valid & OBD_MD_FLFLAGS) { + body->flags = oa->o_flags; + body->valid |= OBD_MD_FLFLAGS; + } +}