From d97e9ecbdfd79e2f2cc88363cd5bf06cac6d0358 Mon Sep 17 00:00:00 2001 From: tappro Date: Sun, 7 May 2006 14:00:21 +0000 Subject: [PATCH] absence of name is not error due to 'object_create' operation, add mdt_md_mkobj method to create only object --- lustre/mdt/mdt_lib.c | 3 +-- lustre/mdt/mdt_reint.c | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lustre/mdt/mdt_lib.c b/lustre/mdt/mdt_lib.c index 0f3415c..af34290 100644 --- a/lustre/mdt/mdt_lib.c +++ b/lustre/mdt/mdt_lib.c @@ -69,8 +69,7 @@ static int mdt_create_unpack(struct mdt_thread_info *info, attr->la_mode = rec->cr_mode; rr->rr_name = lustre_msg_string(req->rq_reqmsg, offset + 1, 0); - if (rr->rr_name == NULL) - RETURN(-EFAULT); + RETURN(0); } diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index beb2a22..47f4ae0 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -73,6 +73,29 @@ static int mdt_md_mkdir(struct mdt_thread_info *info) return result; } +/* partial request to create object only */ +static int mdt_md_mkobj(struct mdt_thread_info *info) +{ + struct mdt_device *mdt = info->mti_mdt; + struct mdt_object *o; + struct mdt_lock_handle *lh; + int result; + + ENTRY; + + o = mdt_object_find(info->mti_ctxt, mdt, info->mti_rr.rr_fid1); + if (!IS_ERR(o)) { + struct md_object *next = mdt_object_child(o); + + result = next->mo_ops->moo_object_create(info->mti_ctxt, next); + //&info->mti_attr, + mdt_object_put(info->mti_ctxt, o); + } else + result = PTR_ERR(o); + + RETURN(result); +} + static int mdt_reint_setattr(struct mdt_thread_info *info) { @@ -92,7 +115,10 @@ static int mdt_reint_create(struct mdt_thread_info *info) break; } case S_IFDIR:{ - rc = mdt_md_mkdir(info); + if (info->mti_rr.rr_name) + rc = mdt_md_mkdir(info); + else + rc = mdt_md_mkobj(info); break; } case S_IFLNK:{ -- 1.8.3.1