Zhihao Cheng
65e6f63ebf
ubifs: Fix deadlock in concurrent bulk-read and writepage
...
commit f5de5b8330 upstream.
In ubifs, concurrent execution of writepage and bulk read on the same file
may cause ABBA deadlock, for example (Reproduce method see Link):
Process A(Bulk-read starts from page4) Process B(write page4 back)
vfs_read wb_workfn or fsync
... ...
generic_file_buffered_read write_cache_pages
ubifs_readpage LOCK(page4)
ubifs_bulk_read ubifs_writepage
LOCK(ui->ui_mutex) ubifs_write_inode
ubifs_do_bulk_read LOCK(ui->ui_mutex)
find_or_create_page(alloc page4) ↑
LOCK(page4) <-- ABBA deadlock occurs!
In order to ensure the serialization execution of bulk read, we can't
remove the big lock 'ui->ui_mutex' in ubifs_bulk_read(). Instead, we
allow ubifs_do_bulk_read() to lock page failed by replacing
find_or_create_page(FGP_LOCK) with
pagecache_get_page(FGP_LOCK | FGP_NOWAIT).
Signed-off-by: Zhihao Cheng <chengzhihao1@huawei.com >
Suggested-by: zhangyi (F) <yi.zhang@huawei.com >
Cc: <Stable@vger.kernel.org >
Fixes: 4793e7c5e1 ("UBIFS: add bulk-read facility")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=206153
Signed-off-by: Richard Weinberger <richard@nod.at >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-02-11 04:35:21 -08:00
..
2019-09-27 15:10:34 -07:00
2019-07-19 11:33:22 -07:00
2020-01-17 19:48:50 +01:00
2020-01-29 16:45:24 +01:00
2019-10-25 00:03:11 -04:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2020-02-05 21:22:52 +00:00
2019-05-24 17:27:11 +02:00
2020-01-29 16:45:24 +01:00
2020-02-05 21:22:39 +00:00
2019-09-19 09:42:37 -07:00
2020-02-11 04:35:12 -08:00
2019-11-23 21:44:49 -05:00
2020-02-11 04:35:20 -08:00
2020-02-01 09:34:35 +00:00
2019-09-03 09:30:56 -04:00
2019-07-12 17:37:53 -07:00
2019-11-10 11:57:45 -05:00
2019-07-19 10:42:02 -07:00
2019-08-30 07:27:17 -07:00
2019-12-17 19:56:23 +01:00
2019-11-10 11:56:05 -05:00
2019-12-17 19:56:43 +01:00
2020-01-04 19:17:13 +01:00
2020-02-11 04:35:12 -08:00
2019-09-25 17:51:40 -07:00
2019-08-30 07:27:17 -07:00
2019-07-10 18:43:43 -07:00
2020-01-23 08:22:32 +01:00
2020-02-05 21:22:40 +00:00
2019-05-21 10:50:46 +02:00
2019-07-16 19:23:23 -07:00
2019-05-12 17:52:13 -04:00
2019-08-30 08:11:25 -07:00
2020-01-04 19:19:19 +01:00
2020-01-04 19:17:31 +01:00
2019-09-19 09:42:37 -07:00
2020-01-04 19:17:14 +01:00
2019-12-04 22:31:06 +01:00
2019-09-19 09:42:37 -07:00
2019-12-13 08:42:53 +01:00
2019-07-03 17:52:09 -04:00
2019-08-30 07:27:17 -07:00
2020-01-17 19:48:48 +01:00
2019-05-21 10:50:46 +02:00
2020-01-26 10:01:01 +01:00
2019-07-01 08:25:34 -07:00
2019-05-21 10:50:46 +02:00
2020-01-12 12:21:38 +01:00
2020-02-11 04:35:12 -08:00
2020-01-17 19:49:08 +01:00
2019-08-30 08:11:25 -07:00
2019-07-19 10:42:02 -07:00
2019-09-19 10:21:35 -07:00
2019-12-17 19:56:11 +01:00
2019-10-19 06:32:32 -04:00
2020-01-14 20:08:28 +01:00
2019-08-30 07:27:17 -07:00
2019-08-30 07:27:17 -07:00
2020-01-12 12:21:37 +01:00
2019-09-12 21:05:34 -04:00
2020-02-05 21:22:40 +00:00
2019-09-19 10:06:57 -07:00
2019-09-19 10:06:57 -07:00
2019-07-19 10:42:02 -07:00
2019-08-30 07:27:18 -07:00
2019-10-12 20:49:07 -04:00
2020-02-11 04:35:21 -08:00
2019-09-04 18:19:43 +02:00
2019-09-19 09:42:37 -07:00
2019-09-17 11:48:24 -04:00
2019-08-12 19:33:50 -07:00
2020-01-26 10:00:59 +01:00
2019-10-21 19:12:19 -04:00
2019-07-19 10:42:02 -07:00
2020-02-11 04:35:12 -08:00
2019-05-21 10:50:45 +02:00
2019-05-30 11:26:32 -07:00
2019-10-06 13:53:27 -07:00
2019-05-21 10:50:45 +02:00
2019-07-16 19:23:22 -07:00
2019-07-19 10:42:02 -07:00
2019-05-21 10:50:45 +02:00
2019-12-13 08:43:19 +01:00
2020-01-17 19:48:21 +01:00
2020-01-14 20:08:18 +01:00
2019-05-30 11:29:21 -07:00
2020-01-09 10:20:05 +01:00
2019-06-19 17:09:55 +02:00
2019-08-03 07:02:01 -07:00
2019-08-30 19:31:09 -04:00
2019-10-22 22:53:02 -07:00
2019-07-20 09:15:51 -07:00
2019-05-21 10:50:45 +02:00
2019-10-14 15:04:01 -07:00
2020-01-12 12:21:37 +01:00
2019-05-21 10:50:45 +02:00
2019-08-21 00:20:40 +02:00
2019-11-29 10:10:10 +01:00
2019-04-08 18:21:02 -05:00
2019-08-07 21:51:47 -04:00
2019-08-19 11:00:39 -04:00
2019-03-08 14:48:40 -08:00
2019-02-28 03:29:26 -05:00
2019-09-06 21:28:49 +02:00
2019-09-12 21:06:14 -04:00
2019-07-16 22:52:37 -04:00
2019-05-21 10:50:45 +02:00
2019-01-21 17:48:13 +01:00
2020-02-11 04:35:11 -08:00
2019-07-19 10:42:02 -07:00
2020-01-12 12:21:37 +01:00
2020-01-17 19:48:21 +01:00
2020-01-29 16:45:24 +01:00
2019-12-17 19:55:30 +01:00
2019-09-18 16:59:14 -07:00
2019-06-24 09:16:47 +10:00
2019-10-14 15:04:01 -07:00
2020-01-09 10:19:57 +01:00
2019-09-18 16:59:14 -07:00
2019-05-21 10:50:45 +02:00
2019-07-16 22:52:37 -04:00
2020-01-17 19:48:21 +01:00
2020-02-05 21:22:39 +00:00
2019-10-16 23:15:09 -04:00
2019-05-30 11:26:32 -07:00
2019-05-25 18:00:06 -04:00
2019-09-26 10:10:30 -07:00
2019-05-25 18:00:07 -04:00
2019-06-17 17:36:09 -04:00
2019-05-30 11:29:53 -07:00
2019-05-21 10:50:45 +02:00
2019-09-06 21:28:49 +02:00
2019-08-16 18:43:24 -07:00
2020-01-29 16:45:31 +01:00
2019-07-16 19:23:25 -07:00
2019-08-13 16:06:52 -07:00
2019-04-08 18:21:02 -05:00
2019-12-17 19:56:52 +01:00
2019-05-21 10:50:45 +02:00
2019-02-01 01:55:45 -05:00
2019-10-03 14:21:35 -07:00
2020-01-12 12:21:38 +01:00
2019-05-14 09:47:50 -07:00
2019-08-01 20:51:23 +02:00
2020-01-04 19:18:32 +01:00
2020-02-11 04:35:12 -08:00
2019-05-21 10:50:45 +02:00