From: wangdi Date: Sat, 10 Jan 2009 08:45:14 +0000 (+0000) Subject: Branch: HEAD X-Git-Tag: v1_9_140~24 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=15ae4d5d74eb21ae9448a5030afbc6feb888f158;p=fs%2Flustre-release.git Branch: HEAD fix journal handle problem. b=13142 i=shadow,oleg --- diff --git a/lustre/ptlrpc/llog_net.c b/lustre/ptlrpc/llog_net.c index 79d2f03..90e071e 100644 --- a/lustre/ptlrpc/llog_net.c +++ b/lustre/ptlrpc/llog_net.c @@ -60,6 +60,7 @@ #include #include #include +#include #ifdef __KERNEL__ int llog_origin_connect(struct llog_ctxt *ctxt, @@ -69,7 +70,10 @@ int llog_origin_connect(struct llog_ctxt *ctxt, struct llog_gen_rec *lgr; struct ptlrpc_request *req; struct llogd_conn_body *req_body; - int rc; + struct inode* inode = ctxt->loc_handle->lgh_file->f_dentry->d_inode; + void *handle; + int rc, rc1; + ENTRY; if (list_empty(&ctxt->loc_handle->u.chd.chd_head)) { @@ -86,11 +90,24 @@ int llog_origin_connect(struct llog_ctxt *ctxt, RETURN(-ENOMEM); lgr->lgr_hdr.lrh_len = lgr->lgr_tail.lrt_len = sizeof(*lgr); lgr->lgr_hdr.lrh_type = LLOG_GEN_REC; + + handle = fsfilt_start_log(ctxt->loc_exp->exp_obd, inode, + FSFILT_OP_CANCEL_UNLINK, NULL, 1); + if (IS_ERR(handle)) { + CERROR("fsfilt_start failed: %ld\n", PTR_ERR(handle)); + OBD_FREE(lgr, sizeof(*lgr)); + rc = PTR_ERR(handle); + RETURN(rc); + } + lgr->lgr_gen = ctxt->loc_gen; rc = llog_add(ctxt, &lgr->lgr_hdr, NULL, NULL, 1); OBD_FREE_PTR(lgr); - if (rc != 1) + rc1 = fsfilt_commit(ctxt->loc_exp->exp_obd, inode, handle, 0); + if (rc != 1 || rc1 != 0) { + rc = (rc != 1) ? rc : rc1; RETURN(rc); + } LASSERT(ctxt->loc_imp); req = ptlrpc_request_alloc_pack(ctxt->loc_imp, &RQF_LLOG_ORIGIN_CONNECT,