From a77f07d75a5c18e6feaf47ecdf80413e74f6f0b1 Mon Sep 17 00:00:00 2001 From: huanghua Date: Fri, 28 Apr 2006 07:36:08 +0000 Subject: [PATCH] (1) put REINT requests' argument into lu_attr. (2) add lu_attr* into moo_mkdir parameter list, and pass through server stack. --- lustre/cmm/cmm_internal.h | 3 +- lustre/cmm/cmm_object.c | 5 +- lustre/include/linux/lustre_mdt.h | 45 ---------- lustre/mdd/mdd_handler.c | 2 +- lustre/mdt/mdt_internal.h | 5 -- lustre/mdt/mdt_lib.c | 182 +++++++++++++++++++------------------- lustre/mdt/mdt_reint.c | 16 ++-- 7 files changed, 104 insertions(+), 154 deletions(-) delete mode 100644 lustre/include/linux/lustre_mdt.h diff --git a/lustre/cmm/cmm_internal.h b/lustre/cmm/cmm_internal.h index 791ded4..aab84e1 100644 --- a/lustre/cmm/cmm_internal.h +++ b/lustre/cmm/cmm_internal.h @@ -107,7 +107,8 @@ int cmm_config(struct lu_context *ctx, struct md_device *md, const char *name, int cmm_root_get(struct lu_context *ctx, struct md_device *m, struct lu_fid *f); int cmm_statfs(struct lu_context *ctx, struct md_device *m, struct kstatfs *sfs); -int cmm_mkdir(struct lu_context *ctxt, struct md_object *o, const char *name, +int cmm_mkdir(struct lu_context *ctxt, struct lu_attr*, + struct md_object *o, const char *name, struct md_object *child); int cmm_xattr_get(struct lu_context *ctxt, struct md_object *obj, void *buf, int size, diff --git a/lustre/cmm/cmm_object.c b/lustre/cmm/cmm_object.c index fa73d89..392c4ac 100644 --- a/lustre/cmm/cmm_object.c +++ b/lustre/cmm/cmm_object.c @@ -177,13 +177,14 @@ int cmm_statfs(struct lu_context *ctxt, RETURN (result); } -int cmm_mkdir(struct lu_context *ctxt, struct md_object *md_parent, +int cmm_mkdir(struct lu_context *ctxt, struct lu_attr* attr, + struct md_object *md_parent, const char *name, struct md_object *md_child) { struct cmm_object *cmm_parent = md2cmm_obj(md_parent); struct md_object *next = cmm2child_obj(cmm_parent); - return next->mo_ops->moo_mkdir(ctxt, next, name, md_child); + return next->mo_ops->moo_mkdir(ctxt, attr, next, name, md_child); } int cmm_attr_get(struct lu_context *ctxt, struct md_object *obj, diff --git a/lustre/include/linux/lustre_mdt.h b/lustre/include/linux/lustre_mdt.h deleted file mode 100644 index 23206ab..0000000 --- a/lustre/include/linux/lustre_mdt.h +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * - * This file is part of Lustre, http://www.lustre.org - * - * MDS data structures. - * See also lustre_idl.h for wire formats of requests. - */ - -#ifndef _LUSTRE_MDT_H -#define _LUSTRE_MDT_H - -#ifdef __KERNEL__ -# include -# include -#endif -#include -#include -#include -#include -#include -#include -#include - - -struct mdt_reint_record { - __u32 rr_opcode; - struct lu_fid *rr_fid1; - struct lu_fid *rr_fid2; - int rr_namelen; - char *rr_name; - int rr_tgtlen; - char *rr_tgt; - int rr_eadatalen; - void *rr_eadata; - int rr_cookielen; - struct llog_cookie *rr_logcookies; - struct lvfs_ucred rr_uc; - __u64 rr_rdev; - __u64 rr_time; - __u32 rr_mode; - __u32 rr_flags; -}; - -#endif diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 61702cf..4608129 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -658,7 +658,7 @@ cleanup: } static int -mdd_mkdir(struct lu_context *ctxt, struct md_object *pobj, +mdd_mkdir(struct lu_context *ctxt, struct lu_attr* attr, struct md_object *pobj, const char *name, struct md_object *child) { struct mdd_device *mdd = mdo2mdd(pobj); diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index a2b375a..600e84c 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -47,7 +47,6 @@ #include #include #include -#include struct mdt_device { /* super-class */ @@ -155,10 +154,6 @@ struct mdt_thread_info { */ struct lu_attr mti_attr; /* - * some addtional attributes for reint. - */ - struct mdt_reint_record mti_rr; - /* * Additional fail id that can be set by handler. Passed to * target_send_reply(). */ diff --git a/lustre/mdt/mdt_lib.c b/lustre/mdt/mdt_lib.c index ffd83c7..dd9513b 100644 --- a/lustre/mdt/mdt_lib.c +++ b/lustre/mdt/mdt_lib.c @@ -47,7 +47,6 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info, int offset) { struct lu_attr *attr = &info->mti_attr; - struct mdt_reint_record *r = &info->mti_rr; struct mdt_rec_setattr *rec; ENTRY; @@ -56,12 +55,12 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info, if (rec == NULL) RETURN(-EFAULT); - r->rr_uc.luc_fsuid = rec->sa_fsuid; - r->rr_uc.luc_fsgid = rec->sa_fsgid; - r->rr_uc.luc_cap = rec->sa_cap; - r->rr_uc.luc_suppgid1 = rec->sa_suppgid; - r->rr_uc.luc_suppgid2 = -1; - r->rr_fid1 = &rec->sa_fid; + attr->la_uc.luc_fsuid = rec->sa_fsuid; + attr->la_uc.luc_fsgid = rec->sa_fsgid; + attr->la_uc.luc_cap = rec->sa_cap; + attr->la_uc.luc_suppgid1 = rec->sa_suppgid; + attr->la_uc.luc_suppgid2 = -1; + attr->la_fid1 = &rec->sa_fid; /*FIXME attr->la_valid = rec->sa_valid; */ attr->la_mode = rec->sa_mode; attr->la_uid = rec->sa_uid; @@ -70,23 +69,23 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info, attr->la_atime = rec->sa_atime; attr->la_mtime = rec->sa_mtime; attr->la_ctime = rec->sa_ctime; -/*FIXME attr->la_attr_flags = rec->sa_attr_flags;*/ + attr->la_flags = rec->sa_attr_flags; LASSERT_REQSWAB (req, offset + 1); if (req->rq_reqmsg->bufcount > offset + 1) { - r->rr_eadata = lustre_msg_buf (req->rq_reqmsg, + attr->la_eadata = lustre_msg_buf (req->rq_reqmsg, offset + 1, 0); - if (r->rr_eadata == NULL) + if (attr->la_eadata == NULL) RETURN(-EFAULT); - r->rr_eadatalen = req->rq_reqmsg->buflens[offset + 1]; + attr->la_eadatalen = req->rq_reqmsg->buflens[offset + 1]; } if (req->rq_reqmsg->bufcount > offset + 2) { - r->rr_logcookies = lustre_msg_buf(req->rq_reqmsg, offset + 2,0); - if (r->rr_logcookies == NULL) + attr->la_logcookies = lustre_msg_buf(req->rq_reqmsg, offset + 2,0); + if (attr->la_logcookies == NULL) RETURN(-EFAULT); - r->rr_cookielen = req->rq_reqmsg->buflens[offset + 2]; + attr->la_logcookielen = req->rq_reqmsg->buflens[offset + 2]; } RETURN(0); @@ -97,7 +96,7 @@ static int mdt_create_unpack(struct mdt_thread_info *info, int offset) { struct mdt_rec_create *rec; - struct mdt_reint_record *r = &info->mti_rr; + struct lu_attr *attr = &info->mti_attr; ENTRY; rec = lustre_swab_reqbuf (req, offset, sizeof (*rec), @@ -105,23 +104,23 @@ static int mdt_create_unpack(struct mdt_thread_info *info, if (rec == NULL) RETURN(-EFAULT); - r->rr_uc.luc_fsuid = rec->cr_fsuid; - r->rr_uc.luc_fsgid = rec->cr_fsgid; - r->rr_uc.luc_cap = rec->cr_cap; - r->rr_uc.luc_suppgid1 = rec->cr_suppgid; - r->rr_uc.luc_suppgid2 = -1; - r->rr_fid1 = &rec->cr_fid; - r->rr_fid2 = &rec->cr_replayfid; - r->rr_mode = rec->cr_mode; - r->rr_rdev = rec->cr_rdev; - r->rr_time = rec->cr_time; - r->rr_flags = rec->cr_flags; + attr->la_uc.luc_fsuid = rec->cr_fsuid; + attr->la_uc.luc_fsgid = rec->cr_fsgid; + attr->la_uc.luc_cap = rec->cr_cap; + attr->la_uc.luc_suppgid1 = rec->cr_suppgid; + attr->la_uc.luc_suppgid2 = -1; + attr->la_fid1 = &rec->cr_fid; + attr->la_fid2 = &rec->cr_replayfid; + attr->la_mode = rec->cr_mode; + attr->la_rdev = rec->cr_rdev; + attr->la_mtime = rec->cr_time; + attr->la_flags = rec->cr_flags; LASSERT_REQSWAB (req, offset + 1); - r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0); - if (r->rr_name == NULL) + attr->la_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0); + if (attr->la_name == NULL) RETURN(-EFAULT); - r->rr_namelen = req->rq_reqmsg->buflens[offset + 1]; + /*namelen = req->rq_reqmsg->buflens[offset + 1];*/ LASSERT_REQSWAB (req, offset + 2); if (req->rq_reqmsg->bufcount > offset + 2) { @@ -132,10 +131,10 @@ static int mdt_create_unpack(struct mdt_thread_info *info, * depending on what they expect. We should probably stash * it in r->rr_eadata in that case, so it's obvious... -eeb */ - r->rr_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0); - if (r->rr_tgt == NULL) + attr->la_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0); + if (attr->la_tgt == NULL) RETURN(-EFAULT); - r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2]; + /*tgtlen = req->rq_reqmsg->buflens[offset + 2];*/ } RETURN(0); } @@ -145,7 +144,7 @@ static int mdt_link_unpack(struct mdt_thread_info *info, int offset) { struct mdt_rec_link *rec; - struct mdt_reint_record *r = &info->mti_rr; + struct lu_attr *attr = &info->mti_attr; ENTRY; rec = lustre_swab_reqbuf (req, offset, sizeof (*rec), @@ -153,20 +152,20 @@ static int mdt_link_unpack(struct mdt_thread_info *info, if (rec == NULL) RETURN(-EFAULT); - r->rr_uc.luc_fsuid = rec->lk_fsuid; - r->rr_uc.luc_fsgid = rec->lk_fsgid; - r->rr_uc.luc_cap = rec->lk_cap; - r->rr_uc.luc_suppgid1 = rec->lk_suppgid1; - r->rr_uc.luc_suppgid2 = rec->lk_suppgid2; - r->rr_fid1 = &rec->lk_fid1; - r->rr_fid2 = &rec->lk_fid2; - r->rr_time = rec->lk_time; + attr->la_uc.luc_fsuid = rec->lk_fsuid; + attr->la_uc.luc_fsgid = rec->lk_fsgid; + attr->la_uc.luc_cap = rec->lk_cap; + attr->la_uc.luc_suppgid1 = rec->lk_suppgid1; + attr->la_uc.luc_suppgid2 = rec->lk_suppgid2; + attr->la_fid1 = &rec->lk_fid1; + attr->la_fid2 = &rec->lk_fid2; + attr->la_mtime = rec->lk_time; LASSERT_REQSWAB (req, offset + 1); - r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0); - if (r->rr_name == NULL) + attr->la_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0); + if (attr->la_name == NULL) RETURN(-EFAULT); - r->rr_namelen = req->rq_reqmsg->buflens[offset + 1]; + /*namelen = req->rq_reqmsg->buflens[offset + 1];*/ RETURN(0); } @@ -175,7 +174,7 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info, int offset) { struct mdt_rec_unlink *rec; - struct mdt_reint_record *r = &info->mti_rr; + struct lu_attr *attr = &info->mti_attr; ENTRY; rec = lustre_swab_reqbuf (req, offset, sizeof (*rec), @@ -183,21 +182,21 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info, if (rec == NULL) RETURN(-EFAULT); - r->rr_uc.luc_fsuid = rec->ul_fsuid; - r->rr_uc.luc_fsgid = rec->ul_fsgid; - r->rr_uc.luc_cap = rec->ul_cap; - r->rr_uc.luc_suppgid1 = rec->ul_suppgid; - r->rr_uc.luc_suppgid2 = -1; - r->rr_mode = rec->ul_mode; - r->rr_fid1 = &rec->ul_fid1; - r->rr_fid2 = &rec->ul_fid2; - r->rr_time = rec->ul_time; + attr->la_uc.luc_fsuid = rec->ul_fsuid; + attr->la_uc.luc_fsgid = rec->ul_fsgid; + attr->la_uc.luc_cap = rec->ul_cap; + attr->la_uc.luc_suppgid1 = rec->ul_suppgid; + attr->la_uc.luc_suppgid2 = -1; + attr->la_mode = rec->ul_mode; + attr->la_fid1 = &rec->ul_fid1; + attr->la_fid2 = &rec->ul_fid2; + attr->la_mtime = rec->ul_time; LASSERT_REQSWAB (req, offset + 1); - r->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0); - if (r->rr_name == NULL) + attr->la_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0); + if (attr->la_name == NULL) RETURN(-EFAULT); - r->rr_namelen = req->rq_reqmsg->buflens[offset + 1]; + /*namelen = req->rq_reqmsg->buflens[offset + 1];*/ RETURN(0); } @@ -206,7 +205,7 @@ static int mdt_rename_unpack(struct mdt_thread_info *info, int offset) { struct mdt_rec_rename *rec; - struct mdt_reint_record *r = &info->mti_rr; + struct lu_attr *attr = &info->mti_attr; ENTRY; rec = lustre_swab_reqbuf (req, offset, sizeof (*rec), @@ -214,26 +213,26 @@ static int mdt_rename_unpack(struct mdt_thread_info *info, if (rec == NULL) RETURN(-EFAULT); - r->rr_uc.luc_fsuid = rec->rn_fsuid; - r->rr_uc.luc_fsgid = rec->rn_fsgid; - r->rr_uc.luc_cap = rec->rn_cap; - r->rr_uc.luc_suppgid1 = rec->rn_suppgid1; - r->rr_uc.luc_suppgid2 = rec->rn_suppgid2; - r->rr_fid1 = &rec->rn_fid1; - r->rr_fid2 = &rec->rn_fid2; - r->rr_time = rec->rn_time; + attr->la_uc.luc_fsuid = rec->rn_fsuid; + attr->la_uc.luc_fsgid = rec->rn_fsgid; + attr->la_uc.luc_cap = rec->rn_cap; + attr->la_uc.luc_suppgid1 = rec->rn_suppgid1; + attr->la_uc.luc_suppgid2 = rec->rn_suppgid2; + attr->la_fid1 = &rec->rn_fid1; + attr->la_fid2 = &rec->rn_fid2; + attr->la_mtime = rec->rn_time; LASSERT_REQSWAB (req, offset + 1); - r->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0); - if (r->rr_name == NULL) + attr->la_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0); + if (attr->la_name == NULL) RETURN(-EFAULT); - r->rr_namelen = req->rq_reqmsg->buflens[offset + 1]; + /*r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];*/ LASSERT_REQSWAB (req, offset + 2); - r->rr_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0); - if (r->rr_tgt == NULL) + attr->la_tgt = lustre_msg_string(req->rq_reqmsg, offset + 2, 0); + if (attr->la_tgt == NULL) RETURN(-EFAULT); - r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2]; + /*r->rr_tgtlen = req->rq_reqmsg->buflens[offset + 2];*/ RETURN(0); } @@ -242,7 +241,7 @@ static int mdt_open_unpack(struct mdt_thread_info *info, int offset) { struct mdt_rec_create *rec; - struct mdt_reint_record *r = &info->mti_rr; + struct lu_attr *attr = &info->mti_attr; ENTRY; rec = lustre_swab_reqbuf (req, offset, sizeof (*rec), @@ -250,30 +249,30 @@ static int mdt_open_unpack(struct mdt_thread_info *info, if (rec == NULL) RETURN(-EFAULT); - r->rr_uc.luc_fsuid = rec->cr_fsuid; - r->rr_uc.luc_fsgid = rec->cr_fsgid; - r->rr_uc.luc_cap = rec->cr_cap; - r->rr_uc.luc_suppgid1 = rec->cr_suppgid; - r->rr_uc.luc_suppgid2 = -1; - r->rr_fid1 = &rec->cr_fid; - r->rr_fid2 = &rec->cr_replayfid; - r->rr_mode = rec->cr_mode; - r->rr_rdev = rec->cr_rdev; - r->rr_time = rec->cr_time; - r->rr_flags = rec->cr_flags; + attr->la_uc.luc_fsuid = rec->cr_fsuid; + attr->la_uc.luc_fsgid = rec->cr_fsgid; + attr->la_uc.luc_cap = rec->cr_cap; + attr->la_uc.luc_suppgid1 = rec->cr_suppgid; + attr->la_uc.luc_suppgid2 = -1; + attr->la_fid1 = &rec->cr_fid; + attr->la_fid2 = &rec->cr_replayfid; + attr->la_mode = rec->cr_mode; + attr->la_rdev = rec->cr_rdev; + attr->la_mtime = rec->cr_time; + attr->la_flags = rec->cr_flags; LASSERT_REQSWAB (req, offset + 1); - r->rr_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0); - if (r->rr_name == NULL) + attr->la_name = lustre_msg_string (req->rq_reqmsg, offset + 1, 0); + if (attr->la_name == NULL) RETURN(-EFAULT); - r->rr_namelen = req->rq_reqmsg->buflens[offset + 1]; + /*r->rr_namelen = req->rq_reqmsg->buflens[offset + 1];*/ LASSERT_REQSWAB (req, offset + 2); if (req->rq_reqmsg->bufcount > offset + 2) { - r->rr_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0); - if (r->rr_eadata == NULL) + attr->la_eadata = lustre_msg_buf(req->rq_reqmsg, offset + 2, 0); + if (attr->la_eadata == NULL) RETURN(-EFAULT); - r->rr_eadatalen = req->rq_reqmsg->buflens[offset + 2]; + attr->la_eadatalen = req->rq_reqmsg->buflens[offset + 2]; } RETURN(0); } @@ -315,8 +314,7 @@ int mdt_reint_unpack(struct mdt_thread_info *info, CERROR("Unexpected opcode %d\n", opcode); RETURN(-EFAULT); } - - info->mti_rr.rr_opcode = opcode; + info->mti_attr.la_opcode = opcode; rc = mdt_reint_unpackers[opcode](info, req, offset); RETURN(rc); diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index c82931c..56fe263 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -51,15 +51,17 @@ static int mdt_md_mkdir(struct mdt_thread_info *info, struct lustre_handle *lock lh->mlh_mode = LCK_PW; parent = mdt_object_find_lock(info->mti_ctxt, - mdt, info->mti_rr.rr_fid1, lh, MDS_INODELOCK_UPDATE); + mdt, info->mti_attr.la_fid1, lh, MDS_INODELOCK_UPDATE); if (IS_ERR(parent)) return PTR_ERR(parent); - child = mdt_object_find(info->mti_ctxt, mdt, info->mti_rr.rr_fid2); + child = mdt_object_find(info->mti_ctxt, mdt, info->mti_attr.la_fid2); if (!IS_ERR(child)) { struct md_object *next = mdt_object_child(parent); - result = next->mo_ops->moo_mkdir(info->mti_ctxt, next, info->mti_rr.rr_name, + result = next->mo_ops->moo_mkdir(info->mti_ctxt, + &info->mti_attr, + next, info->mti_attr.la_name, mdt_object_child(child)); mdt_object_put(info->mti_ctxt, child); } else @@ -84,7 +86,7 @@ static int mdt_reint_create(struct mdt_thread_info *info, int rc; ENTRY; - switch (info->mti_rr.rr_mode & S_IFMT) { + switch (info->mti_attr.la_mode & S_IFMT) { case S_IFREG:{ rc = -EOPNOTSUPP; break; @@ -153,15 +155,13 @@ static mdt_reinter reinters[REINT_MAX] = { [REINT_OPEN] = mdt_reint_open }; -int mdt_reint_rec(struct mdt_thread_info *info, +int mdt_reint_rec(struct mdt_thread_info *info, struct lustre_handle *lockh) { int rc; ENTRY; - /* checked by unpacker */ - LASSERT(info->mti_rr.rr_opcode < REINT_MAX && reinters[info->mti_rr.rr_opcode] != NULL); - rc = reinters[info->mti_rr.rr_opcode] (info, lockh); + rc = reinters[info->mti_attr.la_opcode] (info, lockh); RETURN(rc); } -- 1.8.3.1