FAILED: patch "[PATCH] ext4: fix deadlock when converting an inline directory in" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-4.14.y
git checkout FETCH_HEAD
git cherry-pick -x f4ce24f54d9cca4f09a395f3eecce20d6bec4663
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023051541-whacking-until-c2b2@gregkh' --subject-prefix 'PATCH 4.14.y' HEAD^..
Possible dependencies:
f4ce24f54d9c ("ext4: fix deadlock when converting an inline directory in nojournal mode") f036adb39976 ("ext4: rename "dirent_csum" functions to use "dirblock"")b886ee3e778e ("ext4: Support case-insensitive file name lookups")ee73f9a52a34 ("ext4: convert to new i_version API")ae5e165d855d ("fs: new API for handling inode->i_version")5cea7647e646 ("Merge branch 'for-4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f4ce24f54d9cca4f09a395f3eecce20d6bec4663 Mon Sep 17 00:00:00 2001
From: Theodore Ts'o <[email protected]>
Date: Sat, 6 May 2023 21:04:01 -0400
Subject: [PATCH] ext4: fix deadlock when converting an inline directory in
nojournal mode
In no journal mode, ext4_finish_convert_inline_dir() can self-deadlock by calling ext4_handle_dirty_dirblock() when it already has taken the directory lock. There is a similar self-deadlock in ext4_incvert_inline_data_nolock() for data files which we'll fix at the same time.
A simple reproducer demonstrating the problem:
mke2fs -Fq -t ext2 -O inline_data -b 4k /dev/vdc 64 mount -t ext4 -o dirsync /dev/vdc /vdc
cd /vdc
mkdir file0
cd file0
touch file0
touch file1
attr -s BurnSpaceInEA -V abcde .
touch supercalifragilisticexpialidocious
fs/ext4/inline.c +2 -1
@@ -1175,6 +1175,7 @@ static int ext4_finish_convert_inline_dir(handle_t *handle,ext4_initialize_dirent_tail (dir_block, inode->i_sb->s_blocksize);set_buffer_uptodate (dir_block); +unlock_buffer (dir_block); err =ext4_handle_dirty_dirblock (handle, inode, dir_block);if (err)return err;
@@ -1249,6 +1250,7 @@ static int ext4_convert_inline_data_nolock(handle_t *handle,if (!S_ISDIR (inode->i_mode)) {memcpy (data_bh->b_data, buf, inline_size);set_buffer_uptodate (data_bh); +unlock_buffer (data_bh); error =ext4_handle_dirty_metadata (handle, inode, data_bh); }else {
@@ -1256,7 +1258,6 @@ static int ext4_convert_inline_data_nolock(handle_t *handle, buf, inline_size); } -unlock_buffer (data_bh); out_restore:if (error)ext4_restore_inline_data (handle, inode, iloc, buf, inline_size);