Merge branch 'i2c-embedded/for-next' of git://git.pengutronix.de/git/wsa/linux
[profile/ivi/kernel-x86-ivi.git] / fs / affs / amigaffs.c
index 52a6407..eb82ee5 100644 (file)
@@ -122,22 +122,16 @@ 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 list_head *head, *next;
-
+       struct dentry *dentry;
+       struct hlist_node *p;
        spin_lock(&inode->i_lock);
-       head = &inode->i_dentry;
-       next = head->next;
-       while (next != head) {
-               dentry = list_entry(next, struct dentry, d_alias);
+       hlist_for_each_entry(dentry, p, &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;
                }
-               next = next->next;
        }
        spin_unlock(&inode->i_lock);
 }
@@ -177,7 +171,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);