commit aca251537e56e318ced3e2ffc58f8523af60c77a
Author: Rachita Kothiyal <[EMAIL PROTECTED]>
Date:   Thu Nov 22 17:08:58 2007 -0500

    Unionfs: Fix deadlock on unionfs superblock read/write semaphore.
    
    Added missing unionfs_read_lock() on the superblock object.
    
    Signed-off-by: Rachita Kothiyal([EMAIL PROTECTED])

diff --git a/fs/unionfs/dirhelper.c b/fs/unionfs/dirhelper.c
index c3cc9a3..3e72638 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 e4ca03a..82c2398 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
_______________________________________________
unionfs-cvs mailing list: http://unionfs.filesystems.org/
[email protected]
http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs-cvs

Reply via email to