linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: <linux-fsdevel@vger.kernel.org>
Cc: Jan Kara <jack@suse.cz>
Subject: [PATCH 09/20] udf: Convert empty_dir() to new directory iteration code
Date: Fri, 16 Dec 2022 16:24:13 +0100	[thread overview]
Message-ID: <20221216152656.6236-9-jack@suse.cz> (raw)
In-Reply-To: <20221216121344.14025-1-jack@suse.cz>

Convert empty_dir() to new directory iteration code.

Signed-off-by: Jan Kara <jack@suse.cz>
---
 fs/udf/namei.c | 68 +++++++-------------------------------------------
 1 file changed, 9 insertions(+), 59 deletions(-)

diff --git a/fs/udf/namei.c b/fs/udf/namei.c
index 812786050617..964ac7d4e274 100644
--- a/fs/udf/namei.c
+++ b/fs/udf/namei.c
@@ -869,69 +869,19 @@ static int udf_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
 
 static int empty_dir(struct inode *dir)
 {
-	struct fileIdentDesc *fi, cfi;
-	struct udf_fileident_bh fibh;
-	loff_t f_pos;
-	loff_t size = udf_ext0_offset(dir) + dir->i_size;
-	udf_pblk_t block;
-	struct kernel_lb_addr eloc;
-	uint32_t elen;
-	sector_t offset;
-	struct extent_position epos = {};
-	struct udf_inode_info *dinfo = UDF_I(dir);
-
-	f_pos = udf_ext0_offset(dir);
-	fibh.soffset = fibh.eoffset = f_pos & (dir->i_sb->s_blocksize - 1);
-
-	if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB)
-		fibh.sbh = fibh.ebh = NULL;
-	else if (inode_bmap(dir, f_pos >> dir->i_sb->s_blocksize_bits,
-			      &epos, &eloc, &elen, &offset) ==
-					(EXT_RECORDED_ALLOCATED >> 30)) {
-		block = udf_get_lb_pblock(dir->i_sb, &eloc, offset);
-		if ((++offset << dir->i_sb->s_blocksize_bits) < elen) {
-			if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_SHORT)
-				epos.offset -= sizeof(struct short_ad);
-			else if (dinfo->i_alloc_type == ICBTAG_FLAG_AD_LONG)
-				epos.offset -= sizeof(struct long_ad);
-		} else
-			offset = 0;
-
-		fibh.sbh = fibh.ebh = udf_tread(dir->i_sb, block);
-		if (!fibh.sbh) {
-			brelse(epos.bh);
-			return 0;
-		}
-	} else {
-		brelse(epos.bh);
-		return 0;
-	}
-
-	while (f_pos < size) {
-		fi = udf_fileident_read(dir, &f_pos, &fibh, &cfi, &epos, &eloc,
-					&elen, &offset);
-		if (!fi) {
-			if (fibh.sbh != fibh.ebh)
-				brelse(fibh.ebh);
-			brelse(fibh.sbh);
-			brelse(epos.bh);
-			return 0;
-		}
+	struct udf_fileident_iter iter;
+	int ret;
 
-		if (cfi.lengthFileIdent &&
-		    (cfi.fileCharacteristics & FID_FILE_CHAR_DELETED) == 0) {
-			if (fibh.sbh != fibh.ebh)
-				brelse(fibh.ebh);
-			brelse(fibh.sbh);
-			brelse(epos.bh);
+	for (ret = udf_fiiter_init(&iter, dir, 0);
+	     !ret && iter.pos < dir->i_size;
+	     ret = udf_fiiter_advance(&iter)) {
+		if (iter.fi.lengthFileIdent &&
+		    !(iter.fi.fileCharacteristics & FID_FILE_CHAR_DELETED)) {
+			udf_fiiter_release(&iter);
 			return 0;
 		}
 	}
-
-	if (fibh.sbh != fibh.ebh)
-		brelse(fibh.ebh);
-	brelse(fibh.sbh);
-	brelse(epos.bh);
+	udf_fiiter_release(&iter);
 
 	return 1;
 }
-- 
2.35.3


  parent reply	other threads:[~2022-12-16 15:27 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-16 15:24 [PATCH 0/20] udf: Fix various syzbot reports Jan Kara
2022-12-16 15:24 ` [PATCH 01/20] udf: Define EFSCORRUPTED error code Jan Kara
2022-12-16 15:24 ` [PATCH 02/20] udf: New directory iteration code Jan Kara
2022-12-18  5:34   ` kernel test robot
2022-12-16 15:24 ` [PATCH 03/20] udf: Convert udf_readdir() to new directory iteration Jan Kara
2022-12-16 15:24 ` [PATCH 04/20] udf: Convert udf_expand_dir_adinicb() " Jan Kara
2022-12-16 15:24 ` [PATCH 05/20] udf: Move udf_expand_dir_adinicb() to its callsite Jan Kara
2022-12-16 15:24 ` [PATCH 06/20] udf: Implement searching for directory entry using new iteration code Jan Kara
2022-12-16 15:24 ` [PATCH 07/20] udf: Convert udf_lookup() to use new directory " Jan Kara
2022-12-16 15:24 ` [PATCH 08/20] udf: Convert udf_get_parent() to " Jan Kara
2022-12-16 15:24 ` Jan Kara [this message]
2022-12-16 15:24 ` [PATCH 10/20] udf: Provide function to mark entry as deleted using " Jan Kara
2022-12-16 15:24 ` [PATCH 11/20] udf: Convert udf_rmdir() to " Jan Kara
2022-12-16 15:24 ` [PATCH 12/20] udf: Convert udf_unlink() " Jan Kara
2022-12-16 15:24 ` [PATCH 13/20] udf: Implement adding of dir entries using new " Jan Kara
2022-12-16 15:24 ` [PATCH 14/20] udf: Convert udf_add_nondir() to new directory iteration Jan Kara
2022-12-16 15:24 ` [PATCH 15/20] udf: Convert udf_mkdir() to new directory iteration code Jan Kara
2022-12-16 15:24 ` [PATCH 16/20] udf: Convert udf_link() " Jan Kara
2022-12-16 15:24 ` [PATCH 17/20] udf: Convert udf_rename() " Jan Kara
2022-12-16 17:22   ` kernel test robot
2022-12-16 15:24 ` [PATCH 18/20] udf: Remove old " Jan Kara
2022-12-16 15:24 ` [PATCH 19/20] udf: Truncate added extents on failed expansion Jan Kara
2022-12-16 15:24 ` [PATCH 20/20] udf: Do not bother merging very long extents Jan Kara

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221216152656.6236-9-jack@suse.cz \
    --to=jack@suse.cz \
    --cc=linux-fsdevel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).