Ye Bin
cbaebbba72
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-26 15:26:43 +02:00
..
2022-06-22 14:13:12 +02:00
2020-10-24 12:26:05 -07:00
2023-02-01 08:23:11 +01:00
2023-06-21 15:45:40 +02:00
2020-10-16 11:11:22 -07:00
2021-01-06 14:56:52 +01:00
2023-08-16 18:21:02 +02:00
2021-03-30 14:32:07 +02:00
2023-08-11 11:57:52 +02:00
2023-05-17 11:48:14 +02:00
2023-03-11 16:39:51 +01:00
2023-01-14 10:15:37 +01:00
2022-11-10 18:14:25 +01:00
2023-01-14 10:15:19 +01:00
2022-02-01 17:25:39 +01:00
2023-08-11 11:57:32 +02:00
2021-05-26 12:06:55 +02:00
2020-11-25 16:55:02 +01:00
2023-07-27 08:44:26 +02:00
2023-08-11 11:57:55 +02:00
2023-08-11 11:57:54 +02:00
2023-08-11 11:57:33 +02:00
2023-07-27 08:44:25 +02:00
2022-06-09 10:20:58 +02:00
2021-09-18 13:40:15 +02:00
2023-07-27 08:44:34 +02:00
2023-06-09 10:30:08 +02:00
2023-03-11 16:39:55 +01:00
2023-05-30 12:57:47 +01:00
2021-04-14 08:42:06 +02:00
2023-01-14 10:16:20 +01:00
2022-07-07 17:52:19 +02:00
2021-11-12 14:58:33 +01:00
2023-05-17 11:47:52 +02:00
2023-07-27 08:44:13 +02:00
2023-07-27 08:44:27 +02:00
2023-07-27 08:44:05 +02:00
2021-09-18 13:40:30 +02:00
2022-04-13 21:01:01 +02:00
2023-07-27 08:44:00 +02:00
2020-12-30 11:53:45 +01:00
2023-08-11 11:57:42 +02:00
2023-08-16 18:21:00 +02:00
2023-07-27 08:44:15 +02:00
2022-11-25 17:45:57 +01:00
2023-06-21 15:45:37 +02:00
2023-01-14 10:16:20 +01:00
2023-07-27 08:43:55 +02:00
2023-06-28 10:28:09 +02:00
2023-07-27 08:43:36 +02:00
2021-09-30 10:11:08 +02:00
2023-08-26 15:26:43 +02:00
2023-07-27 08:44:13 +02:00
2023-05-17 11:47:34 +02:00
2020-10-24 12:26:05 -07:00
2023-02-22 12:55:56 +01:00
2023-08-11 11:57:53 +02:00
2022-09-20 12:38:31 +02:00
2023-05-17 11:47:35 +02:00
2023-03-17 08:45:07 +01:00
2020-10-24 12:26:05 -07:00
2021-10-17 10:43:33 +02:00
2023-04-05 11:23:44 +02:00
2023-06-14 11:09:59 +02:00
2023-04-05 11:23:51 +02:00
2023-02-22 12:55:54 +01:00
2023-03-22 13:30:08 +01:00
2023-01-14 10:16:26 +01:00
2022-11-03 23:57:49 +09:00
2022-06-09 10:20:47 +02:00
2023-01-14 10:16:13 +01:00
2021-06-03 09:00:45 +02:00
2022-11-25 17:45:56 +01:00
2023-01-14 10:15:59 +01:00
2023-01-04 11:39:22 +01:00
2020-10-14 14:54:45 -07:00
2022-06-09 10:21:16 +02:00
2021-04-14 08:41:58 +02:00
2023-01-04 11:39:24 +01:00
2023-06-21 15:45:37 +02:00
2022-11-03 23:57:49 +09:00
2022-10-30 09:41:18 +01:00
2022-05-18 10:23:48 +02:00
2023-08-11 11:57:53 +02:00
2023-07-27 08:44:13 +02:00
2020-10-13 18:38:27 -07:00
2023-05-17 11:48:10 +02:00
2023-07-27 08:44:13 +02:00
2023-07-27 08:44:13 +02:00
2022-05-25 09:17:54 +02:00
2021-02-17 11:02:21 +01:00
2021-10-27 09:56:51 +02:00
2023-01-14 10:15:19 +01:00
2023-01-14 10:16:47 +01:00
2023-01-04 11:39:23 +01:00
2023-01-14 10:16:50 +01:00
2023-07-27 08:44:14 +02:00
2021-08-26 08:35:57 -04:00
2023-08-11 11:57:53 +02:00
2022-06-06 08:42:41 +02:00
2023-01-14 10:16:27 +01:00
2021-03-17 17:06:13 +01:00
2020-12-30 11:54:02 +01:00
2022-12-19 12:27:30 +01:00
2021-04-21 13:00:54 +02:00
2022-07-21 21:20:01 +02:00
2022-01-29 10:26:11 +01:00
2021-07-20 16:05:59 +02:00
2022-09-05 10:28:58 +02:00
2022-10-17 17:26:07 +02:00
2022-04-27 13:53:54 +02:00
2023-05-30 12:57:55 +01:00
2023-08-11 11:57:54 +02:00
2022-08-31 17:15:14 +02:00
2022-10-26 13:25:17 +02:00
2023-01-14 10:15:16 +01:00