udf: Convert udf_unlink() to new directory iteration code
authorJan Kara <jack@suse.cz>
Wed, 5 Oct 2022 17:36:49 +0000 (19:36 +0200)
committerJan Kara <jack@suse.cz>
Mon, 9 Jan 2023 09:39:52 +0000 (10:39 +0100)
Convert udf_unlink() to new directory iteration code.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/udf/namei.c

index 7033035..d0ffd20 100644 (file)
@@ -933,24 +933,17 @@ out:
 
 static int udf_unlink(struct inode *dir, struct dentry *dentry)
 {
-       int retval;
+       int ret;
        struct inode *inode = d_inode(dentry);
-       struct udf_fileident_bh fibh;
-       struct fileIdentDesc *fi;
-       struct fileIdentDesc cfi;
+       struct udf_fileident_iter iter;
        struct kernel_lb_addr tloc;
 
-       retval = -ENOENT;
-       fi = udf_find_entry(dir, &dentry->d_name, &fibh, &cfi);
-
-       if (IS_ERR_OR_NULL(fi)) {
-               if (fi)
-                       retval = PTR_ERR(fi);
+       ret = udf_fiiter_find_entry(dir, &dentry->d_name, &iter);
+       if (ret)
                goto out;
-       }
 
-       retval = -EIO;
-       tloc = lelb_to_cpu(cfi.icb.extLocation);
+       ret = -EFSCORRUPTED;
+       tloc = lelb_to_cpu(iter.fi.icb.extLocation);
        if (udf_get_lb_pblock(dir->i_sb, &tloc, 0) != inode->i_ino)
                goto end_unlink;
 
@@ -959,22 +952,16 @@ static int udf_unlink(struct inode *dir, struct dentry *dentry)
                          inode->i_ino, inode->i_nlink);
                set_nlink(inode, 1);
        }
-       retval = udf_delete_entry(dir, fi, &fibh, &cfi);
-       if (retval)
-               goto end_unlink;
+       udf_fiiter_delete_entry(&iter);
        dir->i_ctime = dir->i_mtime = current_time(dir);
        mark_inode_dirty(dir);
        inode_dec_link_count(inode);
        inode->i_ctime = dir->i_ctime;
-       retval = 0;
-
+       ret = 0;
 end_unlink:
-       if (fibh.sbh != fibh.ebh)
-               brelse(fibh.ebh);
-       brelse(fibh.sbh);
-
+       udf_fiiter_release(&iter);
 out:
-       return retval;
+       return ret;
 }
 
 static int udf_symlink(struct user_namespace *mnt_userns, struct inode *dir,