diff options
author | Jan Kara <jack@suse.cz> | 2009-01-12 23:20:31 +0100 |
---|---|---|
committer | Mark Fasheh <mfasheh@suse.com> | 2009-02-02 14:20:16 -0800 |
commit | ea455f8ab68338ba69f5d3362b342c115bea8e13 (patch) | |
tree | 17c052011f821ff5897028a27a1f8cba96046b67 /fs/ocfs2/super.c | |
parent | 27421e211a39784694b597dbf35848b88363c248 (diff) | |
download | op-kernel-dev-ea455f8ab68338ba69f5d3362b342c115bea8e13.zip op-kernel-dev-ea455f8ab68338ba69f5d3362b342c115bea8e13.tar.gz |
ocfs2: Push out dropping of dentry lock to ocfs2_wq
Dropping of last reference to dentry lock is a complicated operation involving
dropping of reference to inode. This can get complicated and quota code in
particular needs to obtain some quota locks which leads to potential deadlock.
Thus we defer dropping of inode reference to ocfs2_wq.
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Mark Fasheh <mfasheh@suse.com>
Diffstat (limited to 'fs/ocfs2/super.c')
-rw-r--r-- | fs/ocfs2/super.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c index 43ed113..b1cb38f 100644 --- a/fs/ocfs2/super.c +++ b/fs/ocfs2/super.c @@ -1887,6 +1887,9 @@ static int ocfs2_initialize_super(struct super_block *sb, INIT_WORK(&journal->j_recovery_work, ocfs2_complete_recovery); journal->j_state = OCFS2_JOURNAL_FREE; + INIT_WORK(&osb->dentry_lock_work, ocfs2_drop_dl_inodes); + osb->dentry_lock_list = NULL; + /* get some pseudo constants for clustersize bits */ osb->s_clustersize_bits = le32_to_cpu(di->id2.i_super.s_clustersize_bits); |