From ae8ac2d3e08c1f8503d3d01615fc8334350fc132 Mon Sep 17 00:00:00 2001 From: huanghua Date: Tue, 27 Jun 2006 04:04:41 +0000 Subject: [PATCH] small fix in reint create. --- lustre/mdt/mdt_reint.c | 66 ++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 3f7422a..65e9031 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -50,8 +50,9 @@ static int mdt_md_create(struct mdt_thread_info *info) struct mdt_object *parent; struct mdt_object *child; struct mdt_lock_handle *lh; - - int result; + struct mdt_body *repbody = info->mti_reint_rep.mrr_body; + int rc; + ENTRY; lh = &info->mti_lh[MDT_LH_PARENT]; lh->mlh_mode = LCK_PW; @@ -65,14 +66,25 @@ static int mdt_md_create(struct mdt_thread_info *info) if (!IS_ERR(child)) { struct md_object *next = mdt_object_child(parent); - result = mdo_create(info->mti_ctxt, next, info->mti_rr.rr_name, - mdt_object_child(child), &info->mti_attr); + rc = mdo_create(info->mti_ctxt, next, info->mti_rr.rr_name, + mdt_object_child(child), &info->mti_attr); + if (rc == 0) { + /* return fid to client. */ + rc = mo_attr_get(info->mti_ctxt, + mdt_object_child(child), + &info->mti_attr); + if (rc == 0) { + mdt_pack_attr2body(repbody, &info->mti_attr); + repbody->fid1 = *mdt_object_fid(child); + repbody->valid |= OBD_MD_FLID; + } + } mdt_object_put(info->mti_ctxt, child); } else - result = PTR_ERR(child); + rc = PTR_ERR(child); mdt_object_unlock(mdt->mdt_namespace, parent, lh); mdt_object_put(info->mti_ctxt, parent); - return result; + RETURN(rc); } static int mdt_md_mkdir(struct mdt_thread_info *info) @@ -111,7 +123,8 @@ static int mdt_md_mkobj(struct mdt_thread_info *info) { struct mdt_device *mdt = info->mti_mdt; struct mdt_object *o; - int result; + struct mdt_body *repbody = info->mti_reint_rep.mrr_body; + int rc; ENTRY; @@ -119,13 +132,23 @@ static int mdt_md_mkobj(struct mdt_thread_info *info) if (!IS_ERR(o)) { struct md_object *next = mdt_object_child(o); - result = mo_object_create(info->mti_ctxt, next, - &info->mti_attr); + rc = mo_object_create(info->mti_ctxt, next, + &info->mti_attr); + if (rc == 0) { + /* return fid to client. */ + rc = mo_attr_get(info->mti_ctxt, + next, + &info->mti_attr); + if (rc == 0) { + mdt_pack_attr2body(repbody, &info->mti_attr); + repbody->fid1 = *mdt_object_fid(next); + repbody->valid |= OBD_MD_FLID; + } mdt_object_put(info->mti_ctxt, o); } else - result = PTR_ERR(o); + rc = PTR_ERR(o); - RETURN(result); + RETURN(rc); } @@ -226,35 +249,20 @@ static int mdt_reint_create(struct mdt_thread_info *info) ENTRY; switch (info->mti_attr.la_mode & S_IFMT) { - case S_IFREG:{ - rc = -EOPNOTSUPP; - break; - } case S_IFDIR:{ if (strlen(info->mti_rr.rr_name) > 0) rc = mdt_md_create(info); else rc = mdt_md_mkobj(info); - - /* return fid to client. */ - if (rc == 0) { - struct mdt_body *body; - - body = info->mti_reint_rep.mrr_body; - body->fid1 = *info->mti_rr.rr_fid2; - body->valid |= OBD_MD_FLID; - } - break; - } - case S_IFLNK:{ - rc = -EOPNOTSUPP; break; } + case S_IFREG: + case S_IFLNK: case S_IFCHR: case S_IFBLK: case S_IFIFO: case S_IFSOCK:{ - rc = -EOPNOTSUPP; + rc = mdt_md_create(info); break; } default: -- 1.8.3.1