affs: unobfuscate affs_fix_dcache()
Al Viro [Sat, 9 Jun 2012 17:06:09 +0000 (13:06 -0400)]
and add a comment on what it's doing

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

fs/affs/amigaffs.c

index 1c7fd79..843cdc9 100644 (file)
@@ -122,15 +122,13 @@ affs_remove_hash(struct inode *dir, struct buffer_head *rem_bh)
 }
 
 static void
-affs_fix_dcache(struct dentry *dentry, u32 entry_ino)
+affs_fix_dcache(struct inode *inode, u32 entry_ino)
 {
-       struct inode *inode = dentry->d_inode;
-       void *data = dentry->d_fsdata;
-
+       struct dentry *dentry;
        spin_lock(&inode->i_lock);
        list_for_each_entry(dentry, &inode->i_dentry, d_alias) {
                if (entry_ino == (u32)(long)dentry->d_fsdata) {
-                       dentry->d_fsdata = data;
+                       dentry->d_fsdata = (void *)inode->i_ino;
                        break;
                }
        }
@@ -172,7 +170,11 @@ affs_remove_link(struct dentry *dentry)
                }
 
                affs_lock_dir(dir);
-               affs_fix_dcache(dentry, link_ino);
+               /*
+                * if there's a dentry for that block, make it
+                * refer to inode itself.
+                */
+               affs_fix_dcache(inode, link_ino);
                retval = affs_remove_hash(dir, link_bh);
                if (retval) {
                        affs_unlock_dir(dir);