From c39bf19783fa0c61816ce6654729a6d650a6a4dd Mon Sep 17 00:00:00 2001 From: fanyong Date: Tue, 5 May 2009 02:23:03 +0000 Subject: [PATCH] Branch HEAD b=19153 i=jinshan.xiong i=vitaly update inode before request buffer freed. --- lustre/liblustre/super.c | 39 +++++++-------------------------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/lustre/liblustre/super.c b/lustre/liblustre/super.c index 0234909..a04d2a8 100644 --- a/lustre/liblustre/super.c +++ b/lustre/liblustre/super.c @@ -1713,12 +1713,9 @@ static int llu_lov_setstripe_ea_info(struct inode *ino, int flags, { struct llu_sb_info *sbi = llu_i2sbi(ino); struct llu_inode_info *lli = llu_i2info(ino); - struct llu_inode_info *lli2 = NULL; - struct lov_stripe_md *lsm; struct lookup_intent oit = {.it_op = IT_OPEN, .it_flags = flags}; struct ldlm_enqueue_info einfo = { LDLM_IBITS, LCK_CR, llu_md_blocking_ast, ldlm_completion_ast, NULL, NULL, NULL }; - struct ptlrpc_request *req = NULL; struct lustre_md md; struct md_op_data data = {{ 0 }}; @@ -1726,28 +1723,14 @@ static int llu_lov_setstripe_ea_info(struct inode *ino, int flags, int rc = 0; ENTRY; - lsm = lli->lli_smd; - if (lsm) { + if (lli->lli_smd) { CDEBUG(D_IOCTL, "stripe already exists for ino "DFID"\n", PFID(&lli->lli_fid)); return -EEXIST; } - OBD_ALLOC(lli2, sizeof(struct llu_inode_info)); - if (!lli2) - return -ENOMEM; - - memcpy(lli2, lli, sizeof(struct llu_inode_info)); - lli2->lli_open_count = 0; - lli2->lli_it = NULL; - lli2->lli_file_data = NULL; - lli2->lli_smd = NULL; - lli2->lli_symlink_name = NULL; - ino->i_private = lli2; - llu_prep_md_op_data(&data, NULL, ino, NULL, 0, O_RDWR, LUSTRE_OPC_ANY); - rc = md_enqueue(sbi->ll_md_exp, &einfo, &oit, &data, &lockh, lum, lum_size, NULL, LDLM_FL_INTENT_ONLY); if (rc) @@ -1771,28 +1754,20 @@ static int llu_lov_setstripe_ea_info(struct inode *ino, int flags, if (rc) GOTO(out, rc); - lli->lli_smd = lli2->lli_smd; - lli2->lli_smd = NULL; - - llu_local_open(lli2, &oit); - + llu_update_inode(ino, &md); + llu_local_open(lli, &oit); /* release intent */ if (lustre_handle_is_used(&lockh)) ldlm_lock_decref(&lockh, LCK_CR); - ptlrpc_req_finished(req); req = NULL; - rc = llu_file_release(ino); - out: - ino->i_private = lli; - if (!rc) - llu_update_inode(ino, &md); - if (lli2) - OBD_FREE(lli2, sizeof(struct llu_inode_info)); + EXIT; + +out: if (req != NULL) ptlrpc_req_finished(req); - RETURN(rc); + return rc; } static int llu_lov_file_setstripe(struct inode *ino, unsigned long arg) -- 1.8.3.1