Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
[linux-2.6.git] / fs / ext4 / namei.c
index 8c9babac43dc941fa62ece2773f234044b8a5b7b..565a154e22d4bee058d8853cb02539e02509bc2f 100644 (file)
@@ -289,7 +289,7 @@ static struct stats dx_show_leaf(struct dx_hash_info *hinfo, struct ext4_dir_ent
                                while (len--) printk("%c", *name++);
                                ext4fs_dirhash(de->name, de->name_len, &h);
                                printk(":%x.%u ", h.hash,
                                while (len--) printk("%c", *name++);
                                ext4fs_dirhash(de->name, de->name_len, &h);
                                printk(":%x.%u ", h.hash,
-                                      ((char *) de - base));
+                                      (unsigned) ((char *) de - base));
                        }
                        space += EXT4_DIR_REC_LEN(de->name_len);
                        names++;
                        }
                        space += EXT4_DIR_REC_LEN(de->name_len);
                        names++;
@@ -1013,7 +1013,7 @@ static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct q
 
        *err = -ENOENT;
 errout:
 
        *err = -ENOENT;
 errout:
-       dxtrace(printk(KERN_DEBUG "%s not found\n", name));
+       dxtrace(printk(KERN_DEBUG "%s not found\n", d_name->name));
        dx_release (frames);
        return NULL;
 }
        dx_release (frames);
        return NULL;
 }
@@ -1985,18 +1985,11 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode)
        if (!list_empty(&EXT4_I(inode)->i_orphan))
                goto out_unlock;
 
        if (!list_empty(&EXT4_I(inode)->i_orphan))
                goto out_unlock;
 
-       /* Orphan handling is only valid for files with data blocks
-        * being truncated, or files being unlinked. */
-
-       /* @@@ FIXME: Observation from aviro:
-        * I think I can trigger J_ASSERT in ext4_orphan_add().  We block
-        * here (on s_orphan_lock), so race with ext4_link() which might bump
-        * ->i_nlink. For, say it, character device. Not a regular file,
-        * not a directory, not a symlink and ->i_nlink > 0.
-        *
-        * tytso, 4/25/2009: I'm not sure how that could happen;
-        * shouldn't the fs core protect us from these sort of
-        * unlink()/link() races?
+       /*
+        * Orphan handling is only valid for files with data blocks
+        * being truncated, or files being unlinked. Note that we either
+        * hold i_mutex, or the inode can not be referenced from outside,
+        * so i_nlink should not be bumped due to race
         */
        J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
                  S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
         */
        J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
                  S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);