]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 17 Mar 2019 15:44:42 +0000 (16:44 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 17 Mar 2019 15:44:42 +0000 (16:44 +0100)
added patches:
f2fs-wait-on-atomic-writes-to-count-f2fs_cp_wb_data.patch

queue-4.19/f2fs-wait-on-atomic-writes-to-count-f2fs_cp_wb_data.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/f2fs-wait-on-atomic-writes-to-count-f2fs_cp_wb_data.patch b/queue-4.19/f2fs-wait-on-atomic-writes-to-count-f2fs_cp_wb_data.patch
new file mode 100644 (file)
index 0000000..a8d0ae2
--- /dev/null
@@ -0,0 +1,63 @@
+From 31867b23d7d1ee3535136c6a410a6cf56f666bfc Mon Sep 17 00:00:00 2001
+From: Jaegeuk Kim <jaegeuk@kernel.org>
+Date: Fri, 28 Dec 2018 11:00:38 -0800
+Subject: f2fs: wait on atomic writes to count F2FS_CP_WB_DATA
+
+From: Jaegeuk Kim <jaegeuk@kernel.org>
+
+commit 31867b23d7d1ee3535136c6a410a6cf56f666bfc upstream.
+
+Otherwise, we can get wrong counts incurring checkpoint hang.
+
+IO_W (CP:  -24, Data:   24, Flush: (   0    0    1), Discard: (   0    0))
+
+Thread A                        Thread B
+- f2fs_write_data_pages
+ -  __write_data_page
+  - f2fs_submit_page_write
+   - inc_page_count(F2FS_WB_DATA)
+     type is F2FS_WB_DATA due to file is non-atomic one
+- f2fs_ioc_start_atomic_write
+ - set_inode_flag(FI_ATOMIC_FILE)
+                                - f2fs_write_end_io
+                                 - dec_page_count(F2FS_WB_CP_DATA)
+                                   type is F2FS_WB_DATA due to file becomes
+                                   atomic one
+
+Cc: <stable@vger.kernel.org>
+Reviewed-by: Chao Yu <yuchao0@huawei.com>
+Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/f2fs/file.c |   12 +++++++-----
+ 1 file changed, 7 insertions(+), 5 deletions(-)
+
+--- a/fs/f2fs/file.c
++++ b/fs/f2fs/file.c
+@@ -1736,10 +1736,12 @@ static int f2fs_ioc_start_atomic_write(s
+       down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+-      if (!get_dirty_pages(inode))
+-              goto skip_flush;
+-
+-      f2fs_msg(F2FS_I_SB(inode)->sb, KERN_WARNING,
++      /*
++       * Should wait end_io to count F2FS_WB_CP_DATA correctly by
++       * f2fs_is_atomic_file.
++       */
++      if (get_dirty_pages(inode))
++              f2fs_msg(F2FS_I_SB(inode)->sb, KERN_WARNING,
+               "Unexpected flush for atomic writes: ino=%lu, npages=%u",
+                                       inode->i_ino, get_dirty_pages(inode));
+       ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+@@ -1747,7 +1749,7 @@ static int f2fs_ioc_start_atomic_write(s
+               up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+               goto out;
+       }
+-skip_flush:
++
+       set_inode_flag(inode, FI_ATOMIC_FILE);
+       clear_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST);
+       up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
index b21b59b5636fda894d4fe9f633d04f2452a095ad..f1ae16862c2b41aec69b85296b843ef2a5fa90e5 100644 (file)
@@ -34,3 +34,4 @@ bonding-fix-packet_origdev-regression.patch
 net-smc-fix-smc_poll-in-smc_init-state.patch
 missing-barriers-in-some-of-unix_sock-addr-and-path-accesses.patch
 net-sched-flower-insert-new-filter-to-idr-after-setting-its-mask.patch
+f2fs-wait-on-atomic-writes-to-count-f2fs_cp_wb_data.patch