Skip to contentSkip to conversation

ext4: Fix symlink file size not match to file content

PATCH Applied Ye Bin 2 participants 2 messages Mar 21, 2022 – Mar 31, 2022 ext4 file system

lore
Share & tools
lore

Ye Bin

author
#0 lore raw

PATCH v2 1/1 ext4: Fix symlink file size not match to file content

We got issue as follows:
[home]# fsck.ext4 -fn ram0yb
e2fsck 1.45.6 (20-Mar-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Symlink /p3/d14/d1a/l3d (inode #3494) is invalid.
Clear? no
Entry 'l3d' in /p3/d14/d1a (3383) has an incorrect filetype (was 7, should be 0). Fix? no

As the symlink file size does not match the file content. If the writeback of the symlink data block failed, ext4_finish_bio() handles the end of IO. However this function fails to mark the buffer with BH_write_io_error and so when unmount does journal checkpoint it cannot detect the writeback error and will cleanup the journal. Thus we've lost the correct data in the journal area. To solve this issue, mark the buffer as BH_write_io_error in ext4_finish_bio().

---
 fs/ext4/page-io.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
fs/ext4/page-io.c +3 -1
index 495ce59fb4ad..14695e2b5042 100644
@@ -134,8 +134,10 @@ static void ext4_finish_bio(struct bio *bio)
 				continue;
 			}
 			clear_buffer_async_write(bh);
-			if (bio->bi_status)
+			if (bio->bi_status) {
+				set_buffer_write_io_error(bh);
 				buffer_io_error(bh);
+			}
 		} while ((bh = bh->b_this_page) != head);
 		spin_unlock_irqrestore(&head->b_uptodate_lock, flags);
 		if (!under_io) {
Signature · 1 line
2.31.1
maintainer Applied
#1 lore raw
Quoted 11 lines · Ye Bin

We got issue as follows:
[home]# fsck.ext4 -fn ram0yb
e2fsck 1.45.6 (20-Mar-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Symlink /p3/d14/d1a/l3d (inode #3494) is invalid.
Clear? no
Entry 'l3d' in /p3/d14/d1a (3383) has an incorrect filetype (was 7, should be 0). Fix? no

[...]

Applied, thanks!

[1/1] ext4: Fix symlink file size not match to file content

      commit: 0f0b8dbeb99a74259062597fd669208e3500792c

Best regards,

Signature · 1 line
Theodore Ts'o <[email protected]>