From: Rachita Kothiyal Date: Thu, 22 Nov 2007 05:34:28 +0000 (-0500) Subject: Unionfs: Fix deadlock on unionfs superblock read/write semaphore. X-Git-Url: https://git.fsl.cs.stonybrook.edu/?a=commitdiff_plain;h=acdf42d2799721be2357588748ac273bfd3df42a;p=unionfs-odf.git Unionfs: Fix deadlock on unionfs superblock read/write semaphore. Added missing unionfs_read_lock() on the superblock object. Signed-off-by: Rachita Kothiyal(rachita@fsl.cs.sunysb.edu) --- diff --git a/fs/unionfs/dirhelper.c b/fs/unionfs/dirhelper.c index c3cc9a3e0a..3e726388bd 100644 --- a/fs/unionfs/dirhelper.c +++ b/fs/unionfs/dirhelper.c @@ -218,6 +218,7 @@ int check_empty(struct dentry *dentry, struct unionfs_dir_state **namelist) int bindex, bstart, bend, bopaque; sb = dentry->d_sb; + unionfs_read_lock(sb); BUG_ON(!S_ISDIR(dentry->d_inode->i_mode)); diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c index e4ca03a784..82c2398e3a 100644 --- a/fs/unionfs/inode.c +++ b/fs/unionfs/inode.c @@ -345,6 +345,7 @@ static int unionfs_symlink(struct inode *dir, struct dentry *dentry, umode_t mode; int bstart; + unionfs_read_lock(dentry->d_sb); unionfs_lock_dentry(dentry); if (unlikely(dentry->d_inode && @@ -550,6 +551,7 @@ static int unionfs_mknod(struct inode *dir, struct dentry *dentry, int mode, struct dentry *lower_parent_dentry = NULL; int bstart; + unionfs_read_lock(dentry->d_sb); unionfs_lock_dentry(dentry); if (unlikely(dentry->d_inode && @@ -721,7 +723,6 @@ static void unionfs_put_link(struct dentry *dentry, struct nameidata *nd, { unionfs_read_lock(dentry->d_sb); - unionfs_read_lock(dentry->d_sb); unionfs_lock_dentry(dentry); if (unlikely(!__unionfs_d_revalidate_chain(dentry, nd, false))) printk(KERN_ERR