friendly ping... On 2021/4/13 11:19, Haotian Li wrote: > Function write_primary_superblock() has two ways to flush > superblock, byte-by-byte as default. It may use > io_channel_write_byte() many times. If some errors occur > during these funcs, the superblock may become inconsistent > and produce checksum error. > > Try write_primary_superblock() with whole-block way again > when it failed on byte-by-byte way. > --- > lib/ext2fs/closefs.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/lib/ext2fs/closefs.c b/lib/ext2fs/closefs.c > index 69cbdd8c..1fc27fb5 100644 > --- a/lib/ext2fs/closefs.c > +++ b/lib/ext2fs/closefs.c > @@ -223,10 +223,8 @@ static errcode_t write_primary_superblock(ext2_filsys fs, > retval = io_channel_write_byte(fs->io, > SUPERBLOCK_OFFSET + (2 * write_idx), size, > new_super + write_idx); > - if (retval == EXT2_ET_UNIMPLEMENTED) > - goto fallback; > if (retval) > - return retval; > + goto fallback; > } > memcpy(fs->orig_super, super, SUPERBLOCK_SIZE); > return 0;