]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
udf: Convert udf_rmdir() to new directory iteration code
authorJan Kara <jack@suse.cz>
Thu, 17 Oct 2024 20:19:53 +0000 (17:19 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Oct 2024 13:40:38 +0000 (15:40 +0200)
[ Upstream commit d11ffa8d3ec11fdb665f12f95d58d74673051a93 ]

Convert udf_rmdir() to use new directory iteration code.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/udf/namei.c

index d73870371766a8cadd4147c9a340bc37c0805bf1..432e325f955afd9160522173311c13ad4c2261c0 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)