On Aug 23, 2023, at 8:27 PM, Baokun Li <libaokun1@xxxxxxxxxx> wrote: > On 2023/8/24 1:05, Jan Kara wrote: >> On Thu 17-08-23 16:18:28, 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. >>> >>> Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx> >> This certainly looks better but I wonder if there still isn't a problem if >> the bitmap checksums are wrong but EXT2_ERROR_FS is not set. Shouldn't we >> rather move the initialization of the quota files after the call to >> e2fsck_read_bitmaps()? > > When the bitmap checksums are wrong but EXT2_ERROR_FS is not set, we must > have lost some data (error flag or group descriptor or bitmap), so there is > something wrong with the kernel at this time, so I don't think we should > fix the image directly, but rather let the user realize that something is > wrong with the filesystem logic. > > Moreover, if we don't care how this happened, but just want to fix the image, > we only need to run "e2fsck -a" twice. After merging in the current patch, we > always empty the orphan list before loading the quotas, and EXT2_ERROR_FS > is set when loading the quotas fails, so this will be fixed the second time > you run e2fsck. It will not happen that every e2fsck will fail like it did > before. I recall that Ted prefers e2fsck to fix everything in a single pass, or at worst if a fatal problem hit during the run it should restart itself so that it will fix all of the problems before exiting. Cheers, Andreas
Attachment:
signature.asc
Description: Message signed with OpenPGP