Whamcloud - gitweb
Branch HEAD
authorbobijam <bobijam>
Wed, 10 Sep 2008 01:44:10 +0000 (01:44 +0000)
committerbobijam <bobijam>
Wed, 10 Sep 2008 01:44:10 +0000 (01:44 +0000)
b=16561
o=oleg.drokin (green)
i=johann
i=zhenyu.xu (bobijam)

Description: Hitting mdc_commit_close() ASSERTION
Details    : Properly handle request reference release in
             ll_release_openhandle().

lustre/ChangeLog
lustre/llite/file.c

index f23e01d..499c535 100644 (file)
@@ -12,18 +12,24 @@ tbd  Sun Microsystems, Inc.
        * RHEL 4 and RHEL 5/SLES 10 clients behaves differently on 'cd' to a
         removed cwd "./" (refer to Bugzilla 14399).
 
        * RHEL 4 and RHEL 5/SLES 10 clients behaves differently on 'cd' to a
         removed cwd "./" (refer to Bugzilla 14399).
 
+Severity   : major
+Bugzilla   : 16561
+Description: Hitting mdc_commit_close() ASSERTION
+Details    : Properly handle request reference release in
+             ll_release_openhandle().
+
 Severity   : normal
 Bugzilla   : 15975
 Frequency  : only patchless client
 Description: add workaround for race between add/remove dentry from hash
 
 Severity   : normal
 Bugzilla   : 15975
 Frequency  : only patchless client
 Description: add workaround for race between add/remove dentry from hash
 
-Severity   : enhancement 
-Bugzilla   : 16845 
+Severity   : enhancement
+Bugzilla   : 16845
 Description: Allow OST glimpses to return PW locks
 
 Description: Allow OST glimpses to return PW locks
 
-Severity   : minor 
-Bugzilla   : 16717 
-Description: LBUG when llog conf file is full 
+Severity   : minor
+Bugzilla   : 16717
+Description: LBUG when llog conf file is full
 Details    : When llog bitmap is full, ENOSPC should be returned for plain
             log.
 
 Details    : When llog bitmap is full, ENOSPC should be returned for plain
             log.
 
index 04e3c41..438593b 100644 (file)
@@ -388,7 +388,7 @@ static int ll_intent_file_open(struct file *file, void *lmm,
                      it_open_error(DISP_OPEN_OPEN, itp))
                         GOTO(out, rc);
                 ll_release_openhandle(file->f_dentry, itp);
                      it_open_error(DISP_OPEN_OPEN, itp))
                         GOTO(out, rc);
                 ll_release_openhandle(file->f_dentry, itp);
-                GOTO(out_stale, rc);
+                GOTO(out, rc);
         }
 
         if (rc != 0 || it_open_error(DISP_OPEN_OPEN, itp)) {
         }
 
         if (rc != 0 || it_open_error(DISP_OPEN_OPEN, itp)) {
@@ -405,8 +405,6 @@ static int ll_intent_file_open(struct file *file, void *lmm,
         rc = ll_prep_inode(&file->f_dentry->d_inode, req, NULL);
 out:
         ptlrpc_req_finished(itp->d.lustre.it_data);
         rc = ll_prep_inode(&file->f_dentry->d_inode, req, NULL);
 out:
         ptlrpc_req_finished(itp->d.lustre.it_data);
-
-out_stale:
         it_clear_disposition(itp, DISP_ENQ_COMPLETE);
         ll_intent_drop_lock(itp);
 
         it_clear_disposition(itp, DISP_ENQ_COMPLETE);
         ll_intent_drop_lock(itp);
 
@@ -2357,6 +2355,8 @@ static int join_file(struct inode *head_inode, struct file *head_filp,
                 ldlm_lock_decref(&lockh, oit.d.lustre.it_lock_mode);
                 oit.d.lustre.it_lock_mode = 0;
         }
                 ldlm_lock_decref(&lockh, oit.d.lustre.it_lock_mode);
                 oit.d.lustre.it_lock_mode = 0;
         }
+        ptlrpc_req_finished((struct ptlrpc_request *) oit.d.lustre.it_data);
+        it_clear_disposition(&oit, DISP_ENQ_COMPLETE);
         ll_release_openhandle(head_filp->f_dentry, &oit);
 out:
         ll_intent_release(&oit);
         ll_release_openhandle(head_filp->f_dentry, &oit);
 out:
         ll_intent_release(&oit);
@@ -2495,7 +2495,8 @@ int ll_release_openhandle(struct dentry *dentry, struct lookup_intent *it)
                                        inode, och);
  out:
         /* this one is in place of ll_file_open */
                                        inode, och);
  out:
         /* this one is in place of ll_file_open */
-        ptlrpc_req_finished(it->d.lustre.it_data);
+        if (it_disposition(it, DISP_ENQ_OPEN_REF))
+                ptlrpc_req_finished(it->d.lustre.it_data);
         it_clear_disposition(it, DISP_ENQ_OPEN_REF);
         RETURN(rc);
 }
         it_clear_disposition(it, DISP_ENQ_OPEN_REF);
         RETURN(rc);
 }