Whamcloud - gitweb
Hold dentry reference over log close so it is valid for unlink.
authoradilger <adilger>
Tue, 16 Mar 2004 22:37:33 +0000 (22:37 +0000)
committeradilger <adilger>
Tue, 16 Mar 2004 22:37:33 +0000 (22:37 +0000)
b=2325
r=robert

lustre/ChangeLog
lustre/obdclass/llog_lvfs.c

index f6eed85..b945468 100644 (file)
@@ -12,6 +12,7 @@ tbd  Cluster File Systems, Inc. <info@clusterfs.com>
        - bump LLOG_CHUNKSIZE to 8k to allow for larger clusters (2306)
        - fix race in target_handle_connect (2898)
        - mds_reint_create() should take same inode create lock (2926)
+       - reserve space for all logs during transactions (2059)
 
 2004-03-04  Cluster File Systems, Inc. <info@clusterfs.com>
        * version 1.2.0
index 168a004..efaf2d3 100644 (file)
@@ -555,9 +555,14 @@ static int llog_lvfs_destroy(struct llog_handle *handle)
         int rc;
         ENTRY;
 
-        fdentry = handle->lgh_file->f_dentry; 
+        fdentry = handle->lgh_file->f_dentry;
         if (!strcmp(fdentry->d_parent->d_name.name, "LOGS")) {
+                struct obd_device *obd = handle->lgh_ctxt->loc_exp->exp_obd;
                 struct inode *inode = fdentry->d_parent->d_inode;
+                struct obd_run_ctxt saved;
+
+                push_ctxt(&saved, &obd->obd_ctxt, NULL);
+                dget(fdentry);
                 rc = llog_lvfs_close(handle);
                 if (rc)
                         RETURN(rc);
@@ -565,7 +570,9 @@ static int llog_lvfs_destroy(struct llog_handle *handle)
                 down(&inode->i_sem);
                 rc = vfs_unlink(inode, fdentry);
                 up(&inode->i_sem);
-                RETURN(rc); 
+                dput(fdentry);
+                pop_ctxt(&saved, &obd->obd_ctxt, NULL);
+                RETURN(rc);
         }
 
         oa = obdo_alloc();