affs: fix missing unlocks in affs_remove_link
Subsystems (2)
PATCH 1/1 affs: fix missing unlocks in affs_remove_link
In two error cases affs_remove_link doesn't call affs_unlock_dir to release the i_hash_lock semaphore.
fs/affs/amigaffs.c +6 -2
@@ -179,14 +179,18 @@ affs_remove_link(struct dentry *dentry)affs_lock_dir (dir);affs_fix_dcache (dentry, link_ino); retval =affs_remove_hash (dir, link_bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (link_bh, inode);memcpy (AFFS_TAIL (sb, bh)->name,AFFS_TAIL (sb, link_bh)->name,32 ); retval =affs_insert_hash (dir, bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (bh, inode);affs_unlock_dir (dir);
ping?
Quoted 21 lines · Christoph Hellwig
In two error cases
affs_remove_linkdoesn't callaffs_unlock_dirto release thei_hash_locksemaphore.Signed-off-by Christoph Hellwig <[email protected]>Index:
linux-2.6/fs/affs/amigaffs.c
===================================================================fs/affs/amigaffs.c +3
-1@@ -179,14 +179,18 @@ affs_remove_link(struct dentry *dentry)affs_lock_dir (dir);affs_fix_dcache (dentry, link_ino); retval =affs_remove_hash (dir, link_bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (link_bh, inode);
fs/affs/amigaffs.c affs_remove_link(struct dentry *dentry) · line 196
Quoted 10 lines
fs/affs/amigaffs.c +3
-1memcpy (AFFS_TAIL (sb, bh)->name,AFFS_TAIL (sb, link_bh)->name,32 ); retval =affs_insert_hash (dir, bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (bh, inode);affs_unlock_dir (dir);
---end quoted text---
ping?
Quoted 33 lines · Christoph Hellwig
ping?
Quoted 30 lines · Christoph Hellwig
In two error cases
affs_remove_linkdoesn't callaffs_unlock_dirto release thei_hash_locksemaphore.Signed-off-by Christoph Hellwig <[email protected]>Index:
linux-2.6/fs/affs/amigaffs.c
===================================================================fs/affs/amigaffs.c +6
-2@@ -179,14 +179,18 @@ affs_remove_link(struct dentry *dentry)affs_lock_dir (dir);affs_fix_dcache (dentry, link_ino); retval =affs_remove_hash (dir, link_bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (link_bh, inode);memcpy (AFFS_TAIL (sb, bh)->name,AFFS_TAIL (sb, link_bh)->name,32 ); retval =affs_insert_hash (dir, bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (bh, inode);
Quoted 2 lines
fs/affs/amigaffs.c affs_remove_link(struct dentry *dentry) · line 196
Quoted 1 line
fs/affs/amigaffs.c +0
-0affs_unlock_dir (dir);---end quoted text---
---end quoted text---
ping^3?
Quoted 36 lines · Christoph Hellwig
ping?
Quoted 33 lines · Christoph Hellwig
ping?
Quoted 30 lines · Christoph Hellwig
In two error cases
affs_remove_linkdoesn't callaffs_unlock_dirto release thei_hash_locksemaphore.Signed-off-by Christoph Hellwig <[email protected]>Index:
linux-2.6/fs/affs/amigaffs.c
===================================================================fs/affs/amigaffs.c +6
-2@@ -179,14 +179,18 @@ affs_remove_link(struct dentry *dentry)affs_lock_dir (dir);affs_fix_dcache (dentry, link_ino); retval =affs_remove_hash (dir, link_bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (link_bh, inode);memcpy (AFFS_TAIL (sb, bh)->name,AFFS_TAIL (sb, link_bh)->name,32 ); retval =affs_insert_hash (dir, bh); -if (retval) +if (retval) { +affs_unlock_dir (dir); goto done; + }mark_buffer_dirty_inode (bh, inode);
Quoted 3 lines
Quoted 2 lines
fs/affs/amigaffs.c affs_remove_link(struct dentry *dentry) · line 196
Quoted 1 line
fs/affs/amigaffs.c +0
-0affs_unlock_dir (dir);---end quoted text---
---end quoted text---
---end quoted text---