From 75a4bcee1d2d5d0362ad108fb9a7b14d85aaef87 Mon Sep 17 00:00:00 2001 From: adilger Date: Tue, 16 Mar 2004 22:37:33 +0000 Subject: [PATCH] Hold dentry reference over log close so it is valid for unlink. b=2325 r=robert --- lustre/ChangeLog | 1 + lustre/obdclass/llog_lvfs.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index f6eed85..b945468 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -12,6 +12,7 @@ tbd Cluster File Systems, Inc. - 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. * version 1.2.0 diff --git a/lustre/obdclass/llog_lvfs.c b/lustre/obdclass/llog_lvfs.c index 168a004..efaf2d3 100644 --- a/lustre/obdclass/llog_lvfs.c +++ b/lustre/obdclass/llog_lvfs.c @@ -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(); -- 1.8.3.1