From: Erez_Zadok Date: Fri, 25 May 2007 19:45:30 +0000 (-0400) Subject: Unionfs: Cleanup locking in new_dentry_private_data X-Git-Url: https://git.fsl.cs.sunysb.edu/?a=commitdiff_plain;h=f94c2d02ff627672bc15f6bda9a1dc5126f3089d;p=unionfs-3.6.y.git Unionfs: Cleanup locking in new_dentry_private_data Signed-off-by: Josef 'Jeff' Sipek Conflicts: fs/unionfs/lookup.c --- diff --git a/fs/unionfs/lookup.c b/fs/unionfs/lookup.c index 4dec675d662..0593f569186 100644 --- a/fs/unionfs/lookup.c +++ b/fs/unionfs/lookup.c @@ -464,23 +464,18 @@ int new_dentry_private_data(struct dentry *dentry) int size; struct unionfs_dentry_info *info = UNIONFS_D(dentry); void *p; - int unlock_on_err = 0; - spin_lock(&dentry->d_lock); if (!info) { - dentry->d_fsdata = kmem_cache_alloc(unionfs_dentry_cachep, - GFP_ATOMIC); - info = UNIONFS_D(dentry); + info = kmem_cache_alloc(unionfs_dentry_cachep, GFP_ATOMIC); if (!info) goto out; mutex_init(&info->lock); - unionfs_lock_dentry(dentry); - unlock_on_err = 1; - info->lower_paths = NULL; } + mutex_lock(&info->lock); + info->bstart = -1; info->bend = -1; info->bopaque = -1; @@ -497,18 +492,17 @@ int new_dentry_private_data(struct dentry *dentry) info->lower_paths = p; memset(info->lower_paths, 0, size); - spin_unlock(&dentry->d_lock); + /* ok, set the dentry private data pointer */ + dentry->d_fsdata = info; return 0; out_free: kfree(info->lower_paths); - if (unlock_on_err) - unionfs_unlock_dentry(dentry); + mutex_unlock(&info->lock); out: free_dentry_private_data(info); dentry->d_fsdata = NULL; - spin_unlock(&dentry->d_lock); return -ENOMEM; }