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

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

index f38ed9c1b54d58609a01fb9fd1c713a3b7d25f6c..7033035627781566d2c092cb491687fe9e1bd04d 100644 (file)
@@ -898,30 +898,23 @@ static int empty_dir(struct inode *dir)
 
 static int udf_rmdir(struct inode *dir, struct dentry *dentry)
 {
-       int retval;
+       int ret;
        struct inode *inode = d_inode(dentry);
-       struct udf_fileident_bh fibh;
-       struct fileIdentDesc *fi, 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_rmdir;
-       retval = -ENOTEMPTY;
+       ret = -ENOTEMPTY;
        if (!empty_dir(inode))
                goto end_rmdir;
-       retval = udf_delete_entry(dir, fi, &fibh, &cfi);
-       if (retval)
-               goto end_rmdir;
+       udf_fiiter_delete_entry(&iter);
        if (inode->i_nlink != 2)
                udf_warn(inode->i_sb, "empty directory has nlink != 2 (%u)\n",
                         inode->i_nlink);
@@ -931,14 +924,11 @@ static int udf_rmdir(struct inode *dir, struct dentry *dentry)
        inode->i_ctime = dir->i_ctime = dir->i_mtime =
                                                current_time(inode);
        mark_inode_dirty(dir);
-
+       ret = 0;
 end_rmdir:
-       if (fibh.sbh != fibh.ebh)
-               brelse(fibh.ebh);
-       brelse(fibh.sbh);
-
+       udf_fiiter_release(&iter);
 out:
-       return retval;
+       return ret;
 }
 
 static int udf_unlink(struct inode *dir, struct dentry *dentry)