f2fs: report error for f2fs_parent_dir
[deliverable/linux.git] / fs / f2fs / namei.c
index 496f4e3018b2810fa38a67ae5f809b81ca7ab512..618829e8049c09de846972a5438e92fca19dbcc9 100644 (file)
@@ -232,6 +232,9 @@ static int __recover_dot_dentries(struct inode *dir, nid_t pino)
        if (de) {
                f2fs_dentry_kunmap(dir, page);
                f2fs_put_page(page, 0);
+       } else if (IS_ERR(page)) {
+               err = PTR_ERR(page);
+               goto out;
        } else {
                err = __f2fs_add_link(dir, &dot, NULL, dir->i_ino, S_IFDIR);
                if (err)
@@ -242,6 +245,8 @@ static int __recover_dot_dentries(struct inode *dir, nid_t pino)
        if (de) {
                f2fs_dentry_kunmap(dir, page);
                f2fs_put_page(page, 0);
+       } else if (IS_ERR(page)) {
+               err = PTR_ERR(page);
        } else {
                err = __f2fs_add_link(dir, &dotdot, NULL, pino, S_IFDIR);
        }
@@ -282,8 +287,11 @@ static struct dentry *f2fs_lookup(struct inode *dir, struct dentry *dentry,
                return ERR_PTR(-ENAMETOOLONG);
 
        de = f2fs_find_entry(dir, &dentry->d_name, &page);
-       if (!de)
+       if (!de) {
+               if (IS_ERR(page))
+                       return (struct dentry *)page;
                return d_splice_alias(inode, dentry);
+       }
 
        ino = le32_to_cpu(de->ino);
        f2fs_dentry_kunmap(dir, page);
@@ -654,10 +662,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
                goto out;
 
        if (S_ISDIR(old_inode->i_mode)) {
-               err = -EIO;
                old_dir_entry = f2fs_parent_dir(old_inode, &old_dir_page);
-               if (!old_dir_entry)
+               if (!old_dir_entry) {
+                       err = PTR_ERR(old_dir_page);
                        goto out_old;
+               }
        }
 
        if (flags & RENAME_WHITEOUT) {
@@ -830,19 +839,21 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
        /* prepare for updating ".." directory entry info later */
        if (old_dir != new_dir) {
                if (S_ISDIR(old_inode->i_mode)) {
-                       err = -EIO;
                        old_dir_entry = f2fs_parent_dir(old_inode,
                                                        &old_dir_page);
-                       if (!old_dir_entry)
+                       if (!old_dir_entry) {
+                               err = PTR_ERR(old_dir_page);
                                goto out_new;
+                       }
                }
 
                if (S_ISDIR(new_inode->i_mode)) {
-                       err = -EIO;
                        new_dir_entry = f2fs_parent_dir(new_inode,
                                                        &new_dir_page);
-                       if (!new_dir_entry)
+                       if (!new_dir_entry) {
+                               err = PTR_ERR(new_dir_page);
                                goto out_old_dir;
+                       }
                }
        }
 
This page took 0.027723 seconds and 5 git commands to generate.