Re: [PATCH v2] e2fsck: delay quotas loading in release_orphan_inodes()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2023/8/28 17:54, Jan Kara wrote:
On Fri 25-08-23 21:22:37, Baokun Li wrote:
After 7d79b40b ("e2fsck: adjust quota counters when clearing orphaned
inodes"), we load all the quotas before we process the orphaned inodes,
and when we load the quotas, we check the checsum of the bbitmap for each
group. If one of the bbitmap checksums is wrong, the following error will
be reported:

“Error initializing quota context in support library:
  Block bitmap checksum does not match bitmap”

But loading quotas comes before checking the current superblock for the
EXT2_ERROR_FS flag, which makes it impossible to use e2fsck to repair any
image that contains orphan inodes and has the wrong bbitmap checksum. So
delaying quota loading until after the EXT2_ERROR_FS judgment avoids the
above problem. Moreover, since we don't care if the bitmap checksum is
wrong before Pass5, e2fsck_read_bitmaps() is called before loading the
quota to avoid bitmap checksum errors that would cause e2fsck to exit.

Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx>
---
V1->V2:
	Add e2fsck_read_bitmaps() to avoid bitmap checksum errors causing
	e2fsck to exit.
Looks good, just one nit below:

@@ -525,10 +516,18 @@ static int release_orphan_inodes(e2fsck_t ctx)
  	 * be running a full e2fsck run anyway... We clear orphan file contents
  	 * after filesystem is checked to avoid clearing someone else's data.
  	 */
-	if (fs->super->s_state & EXT2_ERROR_FS) {
-		if (ctx->qctx)
-			quota_release_context(&ctx->qctx);
+	if (fs->super->s_state & EXT2_ERROR_FS)
  		return 0;
+
+	e2fsck_read_bitmaps(ctx);
+
+	clear_problem_context(&pctx);
+	ino = fs->super->s_last_orphan;
+	pctx.ino = ino;
+	pctx.errcode = e2fsck_read_all_quotas(ctx);
+	if (pctx.errcode) {
+		fix_problem(ctx, PR_0_QUOTA_INIT_CTX, &pctx);
+		return 1;
  	}
if (ino && ((ino < EXT2_FIRST_INODE(fs->super)) ||
Just a few lines below this place is another call to e2fsck_read_bitmaps()
so you can just delete it when you are adding one here. Otherwise feel free
to add:

Reviewed-by: Jan Kara <jack@xxxxxxx>

								Honza
Thank you very much for your review!
I'll remove the redundant e2fsck_read_bitmaps() in the next version.

--
With Best Regards,
Baokun Li
.



[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux