Ye Bin
3f378783c4
quota: fix warning in dqgrab()
...
[ Upstream commit d6a95db3c7ad160bc16b89e36449705309b52bcb ]
There's issue as follows when do fault injection:
WARNING: CPU: 1 PID: 14870 at include/linux/quotaops.h:51 dquot_disable+0x13b7/0x18c0
Modules linked in:
CPU: 1 PID: 14870 Comm: fsconfig Not tainted 6.3.0-next-20230505-00006-g5107a9c821af-dirty #541
RIP: 0010:dquot_disable+0x13b7/0x18c0
RSP: 0018:ffffc9000acc79e0 EFLAGS: 00010246
RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff88825e41b980
RDX: 0000000000000000 RSI: ffff88825e41b980 RDI: 0000000000000002
RBP: ffff888179f68000 R08: ffffffff82087ca7 R09: 0000000000000000
R10: 0000000000000001 R11: ffffed102f3ed026 R12: ffff888179f68130
R13: ffff888179f68110 R14: dffffc0000000000 R15: ffff888179f68118
FS: 00007f450a073740(0000) GS:ffff88882fc00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007ffe96f2efd8 CR3: 000000025c8ad000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
dquot_load_quota_sb+0xd53/0x1060
dquot_resume+0x172/0x230
ext4_reconfigure+0x1dc6/0x27b0
reconfigure_super+0x515/0xa90
__x64_sys_fsconfig+0xb19/0xd20
do_syscall_64+0x39/0xb0
entry_SYSCALL_64_after_hwframe+0x63/0xcd
Above issue may happens as follows:
ProcessA ProcessB ProcessC
sys_fsconfig
vfs_fsconfig_locked
reconfigure_super
ext4_remount
dquot_suspend -> suspend all type quota
sys_fsconfig
vfs_fsconfig_locked
reconfigure_super
ext4_remount
dquot_resume
ret = dquot_load_quota_sb
add_dquot_ref
do_open -> open file O_RDWR
vfs_open
do_dentry_open
get_write_access
atomic_inc_unless_negative(&inode->i_writecount)
ext4_file_open
dquot_file_open
dquot_initialize
__dquot_initialize
dqget
atomic_inc(&dquot->dq_count);
__dquot_initialize
__dquot_initialize
dqget
if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
ext4_acquire_dquot
-> Return error DQ_ACTIVE_B flag isn't set
dquot_disable
invalidate_dquots
if (atomic_read(&dquot->dq_count))
dqgrab
WARN_ON_ONCE(!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
-> Trigger warning
In the above scenario, 'dquot->dq_flags' has no DQ_ACTIVE_B is normal when
dqgrab().
To solve above issue just replace the dqgrab() use in invalidate_dquots() with
atomic_inc(&dquot->dq_count).
Signed-off-by: Ye Bin <yebin10@huawei.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Message-Id: <20230605140731.2427629-3-yebin10@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-08-30 16:27:09 +02:00
..
2022-06-22 14:11:02 +02:00
2023-02-06 07:52:36 +01:00
2023-06-21 15:44:12 +02:00
2021-01-06 14:48:39 +01:00
2023-08-16 18:19:24 +02:00
2020-11-05 11:43:36 +01:00
2023-08-11 11:54:01 +02:00
2023-06-28 10:18:37 +02:00
2023-03-11 16:43:56 +01:00
2023-01-18 11:41:09 +01:00
2021-09-12 08:56:38 +02:00
2023-05-17 11:35:32 +02:00
2022-02-01 17:24:34 +01:00
2023-08-11 11:53:45 +02:00
2021-05-26 12:05:19 +02:00
2020-12-02 08:49:53 +01:00
2023-07-27 08:37:35 +02:00
2023-08-11 11:53:59 +02:00
2023-08-11 11:53:47 +02:00
2023-07-27 08:37:26 +02:00
2023-06-09 10:29:01 +02:00
2021-09-22 12:26:25 +02:00
2023-07-27 08:37:40 +02:00
2023-07-27 08:37:03 +02:00
2023-03-11 16:43:59 +01:00
2023-06-09 10:29:01 +02:00
2021-04-14 08:24:14 +02:00
2023-01-18 11:41:38 +01:00
2022-06-14 18:11:36 +02:00
2023-06-09 10:29:01 +02:00
2023-08-11 11:53:43 +02:00
2023-07-27 08:37:25 +02:00
2023-07-27 08:37:35 +02:00
2022-11-03 23:56:54 +09:00
2021-09-22 12:26:34 +02:00
2022-04-15 14:18:35 +02:00
2023-07-27 08:37:18 +02:00
2020-12-30 11:51:22 +01:00
2023-07-27 08:37:24 +02:00
2023-08-16 18:19:23 +02:00
2023-07-27 08:37:26 +02:00
2022-11-25 17:42:22 +01:00
2023-06-21 15:44:10 +02:00
2023-06-09 10:29:01 +02:00
2023-01-18 11:41:39 +01:00
2023-06-09 10:29:01 +02:00
2023-02-22 12:50:28 +01:00
2023-07-27 08:37:06 +02:00
2021-09-30 10:09:26 +02:00
2023-08-30 16:27:09 +02:00
2020-10-29 09:57:53 +01:00
2023-05-17 11:35:33 +02:00
2020-08-26 10:40:51 +02:00
2023-02-22 12:50:39 +01:00
2021-03-07 12:20:48 +01:00
2023-08-11 11:53:59 +02:00
2022-09-20 12:28:00 +02:00
2023-06-09 10:29:01 +02:00
2023-06-09 10:29:01 +02:00
2020-08-21 13:05:37 +02:00
2023-04-05 11:16:42 +02:00
2023-06-28 10:18:42 +02:00
2023-02-22 12:50:35 +01:00
2022-08-25 11:17:21 +02:00
2023-01-18 11:41:46 +01:00
2023-01-18 11:41:46 +01:00
2021-10-06 15:42:35 +02:00
2023-01-18 11:41:46 +01:00
2023-01-18 11:41:33 +01:00
2021-05-22 11:38:29 +02:00
2022-11-25 17:42:22 +01:00
2023-01-18 11:41:25 +01:00
2022-06-22 14:11:03 +02:00
2020-12-11 13:23:30 +01:00
2020-10-29 09:57:45 +01:00
2022-06-14 18:11:41 +02:00
2020-10-01 13:17:19 +02:00
2021-04-14 08:24:11 +02:00
2020-01-12 12:21:37 +01:00
2020-02-11 04:35:37 -08:00
2023-06-28 10:18:35 +02:00
2022-06-06 08:33:50 +02:00
2021-09-15 09:47:28 +02:00
2022-05-25 09:14:34 +02:00
2023-03-17 08:32:47 +01:00
2020-04-17 10:50:21 +02:00
2023-07-27 08:37:25 +02:00
2023-05-17 11:35:58 +02:00
2023-07-27 08:37:26 +02:00
2023-07-27 08:37:26 +02:00
2023-06-05 08:17:32 +02:00
2023-01-18 11:40:55 +01:00
2020-03-25 08:25:41 +01:00
2023-01-18 11:41:59 +01:00
2020-01-17 19:48:21 +01:00
2023-07-27 08:37:26 +02:00
2021-08-26 08:36:22 -04:00
2020-03-18 07:17:51 +01:00
2021-08-12 13:21:02 +02:00
2023-01-18 11:41:44 +01:00
2021-03-17 17:03:33 +01:00
2020-02-11 04:35:23 -08:00
2021-04-21 12:56:16 +02:00
2022-01-29 10:25:11 +01:00
2021-07-20 16:10:54 +02:00
2022-09-05 10:27:47 +02:00
2022-10-17 17:24:32 +02:00
2022-04-27 13:50:48 +02:00
2023-05-30 12:44:07 +01:00
2023-08-11 11:53:59 +02:00
2022-10-26 13:22:21 +02:00
2020-02-11 04:35:12 -08:00
2023-01-18 11:40:53 +01:00