On 5/26/21 11:19 AM, Darrick J. Wong wrote:
On Tue, May 25, 2021 at 12:54:50PM -0700, Allison Henderson wrote:
Hi all,
This set is a subset of a larger series for Dealyed Attributes. Which is a
subset of a yet larger series for parent pointers. Delayed attributes allow
attribute operations (set and remove) to be logged and committed in the same
way that other delayed operations do. This allows more complex operations (like
parent pointers) to be broken up into multiple smaller transactions. To do
this, the existing attr operations must be modified to operate as a delayed
operation. This means that they cannot roll, commit, or finish transactions.
Instead, they return -EAGAIN to allow the calling function to handle the
transaction. In this series, we focus on only the delayed attribute portion.
We will introduce parent pointers in a later set.
Somewhere in here, this introduced a regression that I can reproduce
pretty easily when running:
# FSTYP=xfs ./check -overlay generic/020
Ok, I am able to reproduce with the same command. Should be reguarly
testing with these parameters? Usually I just run ./check -g attr
[ 1093.136172] XFS: Assertion failed: args->rmtblkno == 0, file: fs/xfs/libxfs/xfs_attr.c, line: 1434
[ 1093.139776] ------------[ cut here ]------------
[ 1093.141590] WARNING: CPU: 3 PID: 12697 at fs/xfs/xfs_message.c:112 assfail+0x3c/0x40 [xfs]
[ 1093.144841] Modules linked in: xfs libcrc32c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip_set nfnetlink bfq ip6table_filter ip6_tables iptable_filter pvpanic_mmio pvpanic sch_fq_codel ip_tables x_tables overlay nfsv4 af_packet [last unloaded: xfs]
[ 1093.153636] CPU: 3 PID: 12697 Comm: attr Tainted: G W 5.13.0-rc2-djwx #rc2
[ 1093.156094] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1093.158530] RIP: 0010:assfail+0x3c/0x40 [xfs]
[ 1093.159987] Code: 48 a2 3f a0 e8 81 f9 ff ff 8a 1d 7b e9 0b 00 80 fb 01 76 0f 0f b6 f3 48 c7 c7 a0 57 49 a0 e8 db c9 00 e1 80 e3 01 74 02 0f 0b <0f> 0b 5b c3 48 8d 45 10 48 89 e2 4c 89 e6 48 89 1c 24 48 89 44 24
[ 1093.164680] RSP: 0018:ffffc90001a0fa90 EFLAGS: 00010246
[ 1093.166021] RAX: 0000000000000000 RBX: ffffc90001a0fa00 RCX: 0000000000000000
[ 1093.167761] RDX: 00000000ffffffc0 RSI: 0000000000000000 RDI: ffffffffa03ea6d5
[ 1093.169461] RBP: ffff88804b6c4d20 R08: 0000000000000000 R09: 000000000000000a
[ 1093.171095] R10: 000000000000000a R11: f000000000000000 R12: 0000000000000000
[ 1093.172687] R13: ffffc90001a0fb70 R14: ffff88800abe4c00 R15: 0000000000000000
[ 1093.174267] FS: 00007f8c3494f740(0000) GS:ffff88807e100000(0000) knlGS:0000000000000000
[ 1093.176031] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1093.177250] CR2: 00007f8c34a57710 CR3: 000000004b455005 CR4: 00000000001706a0
[ 1093.178759] Call Trace:
[ 1093.179328] xfs_attr_remove_iter+0x25d/0x270 [xfs]
[ 1093.180387] xfs_attr_set+0x2ff/0x430 [xfs]
[ 1093.181340] xfs_xattr_set+0x89/0xd0 [xfs]
[ 1093.182269] __vfs_removexattr+0x52/0x70
[ 1093.183062] __vfs_removexattr_locked+0xb8/0x140
[ 1093.183957] vfs_removexattr+0x56/0x100
[ 1093.184729] ovl_xattr_set+0x131/0x1d0 [overlay]
[ 1093.185654] __vfs_removexattr+0x52/0x70
[ 1093.186419] __vfs_removexattr_locked+0xb8/0x140
[ 1093.187300] vfs_removexattr+0x56/0x100
[ 1093.188028] removexattr+0x58/0x90
[ 1093.188672] ? __check_object_size+0xc8/0x280
[ 1093.189513] ? strncpy_from_user+0x47/0x180
[ 1093.190302] ? preempt_count_add+0x50/0xa0
[ 1093.191119] ? __mnt_want_write+0x65/0x90
[ 1093.191867] path_removexattr+0x9e/0xc0
[ 1093.192584] __x64_sys_lremovexattr+0x14/0x20
[ 1093.193395] do_syscall_64+0x3a/0x70
[ 1093.194067] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1093.195017] RIP: 0033:0x7f8c34a7207b
[ 1093.195713] Code: 73 01 c3 48 8b 0d 15 ae 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 c6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 ad 0c 00 f7 d8 64 89 01 48
[ 1093.199072] RSP: 002b:00007ffc9f3248f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000c6
[ 1093.200454] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f8c34a7207b
[ 1093.201776] RDX: 0000000000000072 RSI: 00007ffc9f324910 RDI: 00007ffc9f3261a0
[ 1093.203121] RBP: 00007ffc9f326196 R08: 0000000000000000 R09: 00007ffc9f324910
[ 1093.204441] R10: 00007f8c34b3dbe0 R11: 0000000000000202 R12: 00007ffc9f3261a0
[ 1093.205754] R13: 00007ffc9f324910 R14: 0000000000000000 R15: 0000000000000001
[ 1093.207095] ---[ end trace d5f6b816d902441c ]---
[ 1093.208039] XFS: Assertion failed: bp->b_transp == tp, file: fs/xfs/xfs_trans_buf.c, line: 450
[ 1093.209609] ------------[ cut here ]------------
[ 1093.210483] WARNING: CPU: 3 PID: 12697 at fs/xfs/xfs_message.c:112 assfail+0x3c/0x40 [xfs]
[ 1093.212095] Modules linked in: xfs libcrc32c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip_set nfnetlink bfq ip6table_filter ip6_tables iptable_filter pvpanic_mmio pvpanic sch_fq_codel ip_tables x_tables overlay nfsv4 af_packet [last unloaded: xfs]
[ 1093.217174] CPU: 3 PID: 12697 Comm: attr Tainted: G W 5.13.0-rc2-djwx #rc2
[ 1093.218658] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1093.220280] RIP: 0010:assfail+0x3c/0x40 [xfs]
[ 1093.221204] Code: 48 a2 3f a0 e8 81 f9 ff ff 8a 1d 7b e9 0b 00 80 fb 01 76 0f 0f b6 f3 48 c7 c7 a0 57 49 a0 e8 db c9 00 e1 80 e3 01 74 02 0f 0b <0f> 0b 5b c3 48 8d 45 10 48 89 e2 4c 89 e6 48 89 1c 24 48 89 44 24
[ 1093.224534] RSP: 0018:ffffc90001a0f988 EFLAGS: 00010246
[ 1093.225502] RAX: 0000000000000000 RBX: ffff88804e004700 RCX: 0000000000000000
[ 1093.226823] RDX: 00000000ffffffc0 RSI: 0000000000000000 RDI: ffffffffa03ea6d5
[ 1093.228106] RBP: ffff88804e9fee00 R08: 0000000000000000 R09: 000000000000000a
[ 1093.228952] R10: 000000000000000a R11: f000000000000000 R12: ffff888042f11740
[ 1093.229726] R13: 0000000000000fdc R14: ffff888042f11740 R15: ffff88804e004738
[ 1093.230500] FS: 00007f8c3494f740(0000) GS:ffff88807e100000(0000) knlGS:0000000000000000
[ 1093.231391] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1093.232033] CR2: 00007f8c34a57710 CR3: 000000004b455005 CR4: 00000000001706a0
[ 1093.232811] Call Trace:
[ 1093.233115] xfs_trans_dirty_buf+0xbe/0x120 [xfs]
[ 1093.233742] xfs_trans_log_buf+0x4c/0x100 [xfs]
[ 1093.234349] xfs_attr3_leaf_remove+0x2b5/0xc30 [xfs]
[ 1093.235001] ? xfs_trans_add_item+0x6b/0x180 [xfs]
[ 1093.235628] xfs_attr_node_removename+0x3d/0x90 [xfs]
[ 1093.236273] xfs_attr_remove_iter+0x50/0x270 [xfs]
[ 1093.236891] xfs_attr_set+0x2ff/0x430 [xfs]
[ 1093.237445] xfs_xattr_set+0x89/0xd0 [xfs]
[ 1093.238010] __vfs_removexattr+0x52/0x70
[ 1093.238460] __vfs_removexattr_locked+0xb8/0x140
[ 1093.239009] vfs_removexattr+0x56/0x100
[ 1093.239452] ovl_xattr_set+0x131/0x1d0 [overlay]
[ 1093.239979] __vfs_removexattr+0x52/0x70
[ 1093.240430] __vfs_removexattr_locked+0xb8/0x140
[ 1093.240949] vfs_removexattr+0x56/0x100
[ 1093.241389] removexattr+0x58/0x90
[ 1093.241786] ? __check_object_size+0xc8/0x280
[ 1093.242286] ? strncpy_from_user+0x47/0x180
[ 1093.242780] ? preempt_count_add+0x50/0xa0
[ 1093.243252] ? __mnt_want_write+0x65/0x90
[ 1093.243708] path_removexattr+0x9e/0xc0
[ 1093.244153] __x64_sys_lremovexattr+0x14/0x20
[ 1093.244647] do_syscall_64+0x3a/0x70
[ 1093.245064] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1093.245630] RIP: 0033:0x7f8c34a7207b
[ 1093.246047] Code: 73 01 c3 48 8b 0d 15 ae 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 c6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 ad 0c 00 f7 d8 64 89 01 48
[ 1093.248025] RSP: 002b:00007ffc9f3248f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000c6
[ 1093.248843] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f8c34a7207b
[ 1093.249621] RDX: 0000000000000072 RSI: 00007ffc9f324910 RDI: 00007ffc9f3261a0
[ 1093.250395] RBP: 00007ffc9f326196 R08: 0000000000000000 R09: 00007ffc9f324910
[ 1093.251191] R10: 00007f8c34b3dbe0 R11: 0000000000000202 R12: 00007ffc9f3261a0
[ 1093.251976] R13: 00007ffc9f324910 R14: 0000000000000000 R15: 0000000000000001
[ 1093.252753] ---[ end trace d5f6b816d902441d ]---
[ 1093.253282] XFS: Assertion failed: bp->b_transp == tp, file: fs/xfs/xfs_trans_buf.c, line: 450
[ 1093.254223] ------------[ cut here ]------------
[ 1093.254758] WARNING: CPU: 3 PID: 12697 at fs/xfs/xfs_message.c:112 assfail+0x3c/0x40 [xfs]
[ 1093.255762] Modules linked in: xfs libcrc32c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip_set nfnetlink bfq ip6table_filter ip6_tables iptable_filter pvpanic_mmio pvpanic sch_fq_codel ip_tables x_tables overlay nfsv4 af_packet [last unloaded: xfs]
[ 1093.258748] CPU: 3 PID: 12697 Comm: attr Tainted: G W 5.13.0-rc2-djwx #rc2
[ 1093.259642] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1093.260604] RIP: 0010:assfail+0x3c/0x40 [xfs]
[ 1093.261200] Code: 48 a2 3f a0 e8 81 f9 ff ff 8a 1d 7b e9 0b 00 80 fb 01 76 0f 0f b6 f3 48 c7 c7 a0 57 49 a0 e8 db c9 00 e1 80 e3 01 74 02 0f 0b <0f> 0b 5b c3 48 8d 45 10 48 89 e2 4c 89 e6 48 89 1c 24 48 89 44 24
[ 1093.263184] RSP: 0018:ffffc90001a0f988 EFLAGS: 00010246
[ 1093.263763] RAX: 0000000000000000 RBX: ffff88804e004700 RCX: 0000000000000000
[ 1093.264536] RDX: 00000000ffffffc0 RSI: 0000000000000000 RDI: ffffffffa03ea6d5
[ 1093.265315] RBP: ffff88804e9fee00 R08: 0000000000000000 R09: 000000000000000a
[ 1093.266116] R10: 000000000000000a R11: f000000000000000 R12: ffff888042f11740
[ 1093.266907] R13: 0000000000000058 R14: ffff888042f11740 R15: ffff88804e004738
[ 1093.267675] FS: 00007f8c3494f740(0000) GS:ffff88807e100000(0000) knlGS:0000000000000000
[ 1093.268544] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1093.269178] CR2: 00007f8c34a57710 CR3: 000000004b455005 CR4: 00000000001706a0
[ 1093.269949] Call Trace:
[ 1093.270244] xfs_trans_dirty_buf+0xbe/0x120 [xfs]
[ 1093.270888] xfs_trans_log_buf+0x4c/0x100 [xfs]
[ 1093.271490] xfs_attr3_leaf_remove+0x2ef/0xc30 [xfs]
[ 1093.272129] ? xfs_trans_add_item+0x6b/0x180 [xfs]
[ 1093.272759] xfs_attr_node_removename+0x3d/0x90 [xfs]
[ 1093.273400] xfs_attr_remove_iter+0x50/0x270 [xfs]
[ 1093.274015] xfs_attr_set+0x2ff/0x430 [xfs]
[ 1093.274562] xfs_xattr_set+0x89/0xd0 [xfs]
[ 1093.275139] __vfs_removexattr+0x52/0x70
[ 1093.275592] __vfs_removexattr_locked+0xb8/0x140
[ 1093.276117] vfs_removexattr+0x56/0x100
[ 1093.276558] ovl_xattr_set+0x131/0x1d0 [overlay]
[ 1093.277085] __vfs_removexattr+0x52/0x70
[ 1093.277534] __vfs_removexattr_locked+0xb8/0x140
[ 1093.278063] vfs_removexattr+0x56/0x100
[ 1093.278506] removexattr+0x58/0x90
[ 1093.278934] ? __check_object_size+0xc8/0x280
[ 1093.279435] ? strncpy_from_user+0x47/0x180
[ 1093.279919] ? preempt_count_add+0x50/0xa0
[ 1093.280384] ? __mnt_want_write+0x65/0x90
[ 1093.280843] path_removexattr+0x9e/0xc0
[ 1093.281290] __x64_sys_lremovexattr+0x14/0x20
[ 1093.281788] do_syscall_64+0x3a/0x70
[ 1093.282208] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1093.282792] RIP: 0033:0x7f8c34a7207b
[ 1093.283216] Code: 73 01 c3 48 8b 0d 15 ae 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 c6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 ad 0c 00 f7 d8 64 89 01 48
[ 1093.285191] RSP: 002b:00007ffc9f3248f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000c6
[ 1093.286027] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f8c34a7207b
[ 1093.286822] RDX: 0000000000000072 RSI: 00007ffc9f324910 RDI: 00007ffc9f3261a0
[ 1093.287614] RBP: 00007ffc9f326196 R08: 0000000000000000 R09: 00007ffc9f324910
[ 1093.288396] R10: 00007f8c34b3dbe0 R11: 0000000000000202 R12: 00007ffc9f3261a0
[ 1093.289174] R13: 00007ffc9f324910 R14: 0000000000000000 R15: 0000000000000001
[ 1093.289956] ---[ end trace d5f6b816d902441e ]---
[ 1093.290487] XFS: Assertion failed: bp->b_transp == tp, file: fs/xfs/xfs_trans_buf.c, line: 450
[ 1093.291444] ------------[ cut here ]------------
[ 1093.291980] WARNING: CPU: 3 PID: 12697 at fs/xfs/xfs_message.c:112 assfail+0x3c/0x40 [xfs]
[ 1093.292978] Modules linked in: xfs libcrc32c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip_set nfnetlink bfq ip6table_filter ip6_tables iptable_filter pvpanic_mmio pvpanic sch_fq_codel ip_tables x_tables overlay nfsv4 af_packet [last unloaded: xfs]
[ 1093.295967] CPU: 3 PID: 12697 Comm: attr Tainted: G W 5.13.0-rc2-djwx #rc2
[ 1093.296855] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1093.297814] RIP: 0010:assfail+0x3c/0x40 [xfs]
[ 1093.298412] Code: 48 a2 3f a0 e8 81 f9 ff ff 8a 1d 7b e9 0b 00 80 fb 01 76 0f 0f b6 f3 48 c7 c7 a0 57 49 a0 e8 db c9 00 e1 80 e3 01 74 02 0f 0b <0f> 0b 5b c3 48 8d 45 10 48 89 e2 4c 89 e6 48 89 1c 24 48 89 44 24
[ 1093.300398] RSP: 0018:ffffc90001a0f988 EFLAGS: 00010246
[ 1093.300987] RAX: 0000000000000000 RBX: ffff88804e004700 RCX: 0000000000000000
[ 1093.301761] RDX: 00000000ffffffc0 RSI: 0000000000000000 RDI: ffffffffa03ea6d5
[ 1093.302541] RBP: ffff88804e9fee00 R08: 0000000000000000 R09: 000000000000000a
[ 1093.303328] R10: 000000000000000a R11: f000000000000000 R12: ffff888042f11740
[ 1093.304107] R13: 0000000000000000 R14: ffff888042f11740 R15: ffff88804e004738
[ 1093.304878] FS: 00007f8c3494f740(0000) GS:ffff88807e100000(0000) knlGS:0000000000000000
[ 1093.305743] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1093.306377] CR2: 00007f8c34a57710 CR3: 000000004b455005 CR4: 00000000001706a0
[ 1093.307172] Call Trace:
[ 1093.307470] xfs_trans_dirty_buf+0xbe/0x120 [xfs]
[ 1093.308100] xfs_trans_log_buf+0x4c/0x100 [xfs]
[ 1093.308700] xfs_attr3_leaf_remove+0x3b6/0xc30 [xfs]
[ 1093.309333] ? xfs_trans_add_item+0x6b/0x180 [xfs]
[ 1093.309971] xfs_attr_node_removename+0x3d/0x90 [xfs]
[ 1093.310614] xfs_attr_remove_iter+0x50/0x270 [xfs]
[ 1093.311254] xfs_attr_set+0x2ff/0x430 [xfs]
[ 1093.311809] xfs_xattr_set+0x89/0xd0 [xfs]
[ 1093.312381] __vfs_removexattr+0x52/0x70
[ 1093.312836] __vfs_removexattr_locked+0xb8/0x140
[ 1093.313367] vfs_removexattr+0x56/0x100
[ 1093.313813] ovl_xattr_set+0x131/0x1d0 [overlay]
[ 1093.314350] __vfs_removexattr+0x52/0x70
[ 1093.314820] __vfs_removexattr_locked+0xb8/0x140
[ 1093.315352] vfs_removexattr+0x56/0x100
[ 1093.315799] removexattr+0x58/0x90
[ 1093.316204] ? __check_object_size+0xc8/0x280
[ 1093.316701] ? strncpy_from_user+0x47/0x180
[ 1093.317187] ? preempt_count_add+0x50/0xa0
[ 1093.317656] ? __mnt_want_write+0x65/0x90
[ 1093.318124] path_removexattr+0x9e/0xc0
[ 1093.318569] __x64_sys_lremovexattr+0x14/0x20
[ 1093.319083] do_syscall_64+0x3a/0x70
[ 1093.319502] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1093.320075] RIP: 0033:0x7f8c34a7207b
[ 1093.320491] Code: 73 01 c3 48 8b 0d 15 ae 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 c6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 ad 0c 00 f7 d8 64 89 01 48
[ 1093.322466] RSP: 002b:00007ffc9f3248f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000c6
[ 1093.323307] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f8c34a7207b
[ 1093.324092] RDX: 0000000000000072 RSI: 00007ffc9f324910 RDI: 00007ffc9f3261a0
[ 1093.324864] RBP: 00007ffc9f326196 R08: 0000000000000000 R09: 00007ffc9f324910
[ 1093.325647] R10: 00007f8c34b3dbe0 R11: 0000000000000202 R12: 00007ffc9f3261a0
[ 1093.326426] R13: 00007ffc9f324910 R14: 0000000000000000 R15: 0000000000000001
[ 1093.327224] ---[ end trace d5f6b816d902441f ]---
[ 1093.327751] XFS: Assertion failed: !(bip->bli_flags & XFS_BLI_LOGGED), file: fs/xfs/xfs_trans_buf.c, line: 79
[ 1093.328827] ------------[ cut here ]------------
[ 1093.329352] WARNING: CPU: 3 PID: 12697 at fs/xfs/xfs_message.c:112 assfail+0x3c/0x40 [xfs]
[ 1093.330350] Modules linked in: xfs libcrc32c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip_set nfnetlink bfq ip6table_filter ip6_tables iptable_filter pvpanic_mmio pvpanic sch_fq_codel ip_tables x_tables overlay nfsv4 af_packet [last unloaded: xfs]
[ 1093.333309] CPU: 3 PID: 12697 Comm: attr Tainted: G W 5.13.0-rc2-djwx #rc2
[ 1093.334209] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1093.335181] RIP: 0010:assfail+0x3c/0x40 [xfs]
[ 1093.335774] Code: 48 a2 3f a0 e8 81 f9 ff ff 8a 1d 7b e9 0b 00 80 fb 01 76 0f 0f b6 f3 48 c7 c7 a0 57 49 a0 e8 db c9 00 e1 80 e3 01 74 02 0f 0b <0f> 0b 5b c3 48 8d 45 10 48 89 e2 4c 89 e6 48 89 1c 24 48 89 44 24
[ 1093.337749] RSP: 0018:ffffc90001a0f930 EFLAGS: 00010246
[ 1093.338337] RAX: 0000000000000000 RBX: ffff88804e9fee00 RCX: 0000000000000000
[ 1093.339134] RDX: 00000000ffffffc0 RSI: 0000000000000000 RDI: ffffffffa03ea6d5
[ 1093.339920] RBP: ffff88804e004738 R08: 0000000000000000 R09: 000000000000000a
[ 1093.340697] R10: 000000000000000a R11: f000000000000000 R12: ffff888042f11740
[ 1093.341477] R13: 0000000000000001 R14: ffffc90001a0f9e0 R15: ffffffffa03daaa0
[ 1093.342258] FS: 00007f8c3494f740(0000) GS:ffff88807e100000(0000) knlGS:0000000000000000
[ 1093.343144] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1093.343779] CR2: 00007f8c34a57710 CR3: 000000004b455005 CR4: 00000000001706a0
[ 1093.344561] Call Trace:
[ 1093.344857] _xfs_trans_bjoin+0x100/0x110 [xfs]
[ 1093.345469] xfs_trans_read_buf_map+0x22b/0x4a0 [xfs]
[ 1093.346130] xfs_da_read_buf+0xce/0x120 [xfs]
[ 1093.346714] xfs_attr3_leaf_read+0x26/0x60 [xfs]
[ 1093.347313] ? xfs_attr_is_leaf+0x76/0x90 [xfs]
[ 1093.347901] xfs_attr_node_shrink+0x54/0x100 [xfs]
[ 1093.348514] xfs_attr_remove_iter+0xa9/0x270 [xfs]
[ 1093.349129] xfs_attr_set+0x2ff/0x430 [xfs]
[ 1093.349675] xfs_xattr_set+0x89/0xd0 [xfs]
[ 1093.350237] __vfs_removexattr+0x52/0x70
[ 1093.350684] __vfs_removexattr_locked+0xb8/0x140
[ 1093.351228] vfs_removexattr+0x56/0x100
[ 1093.351667] ovl_xattr_set+0x131/0x1d0 [overlay]
[ 1093.352194] __vfs_removexattr+0x52/0x70
[ 1093.352642] __vfs_removexattr_locked+0xb8/0x140
[ 1093.353165] vfs_removexattr+0x56/0x100
[ 1093.353603] removexattr+0x58/0x90
[ 1093.354003] ? __check_object_size+0xc8/0x280
[ 1093.354493] ? strncpy_from_user+0x47/0x180
[ 1093.354983] ? preempt_count_add+0x50/0xa0
[ 1093.355452] ? __mnt_want_write+0x65/0x90
[ 1093.355914] path_removexattr+0x9e/0xc0
[ 1093.356353] __x64_sys_lremovexattr+0x14/0x20
[ 1093.356840] do_syscall_64+0x3a/0x70
[ 1093.357258] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1093.357819] RIP: 0033:0x7f8c34a7207b
[ 1093.358236] Code: 73 01 c3 48 8b 0d 15 ae 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 c6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 ad 0c 00 f7 d8 64 89 01 48
[ 1093.360210] RSP: 002b:00007ffc9f3248f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000c6
[ 1093.361031] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f8c34a7207b
[ 1093.361800] RDX: 0000000000000072 RSI: 00007ffc9f324910 RDI: 00007ffc9f3261a0
[ 1093.362574] RBP: 00007ffc9f326196 R08: 0000000000000000 R09: 00007ffc9f324910
[ 1093.363361] R10: 00007f8c34b3dbe0 R11: 0000000000000202 R12: 00007ffc9f3261a0
[ 1093.364137] R13: 00007ffc9f324910 R14: 0000000000000000 R15: 0000000000000001
[ 1093.364912] ---[ end trace d5f6b816d9024420 ]---
[ 1093.365425] XFS: Assertion failed: !test_bit(XFS_LI_DIRTY, &lip->li_flags), file: fs/xfs/xfs_trans.c, line: 657
[ 1093.366508] ------------[ cut here ]------------
[ 1093.367045] WARNING: CPU: 3 PID: 12697 at fs/xfs/xfs_message.c:112 assfail+0x3c/0x40 [xfs]
[ 1093.368050] Modules linked in: xfs libcrc32c ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip_set nfnetlink bfq ip6table_filter ip6_tables iptable_filter pvpanic_mmio pvpanic sch_fq_codel ip_tables x_tables overlay nfsv4 af_packet [last unloaded: xfs]
[ 1093.371056] CPU: 3 PID: 12697 Comm: attr Tainted: G W 5.13.0-rc2-djwx #rc2
[ 1093.371941] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.13.0-1ubuntu1.1 04/01/2014
[ 1093.372891] RIP: 0010:assfail+0x3c/0x40 [xfs]
[ 1093.373477] Code: 48 a2 3f a0 e8 81 f9 ff ff 8a 1d 7b e9 0b 00 80 fb 01 76 0f 0f b6 f3 48 c7 c7 a0 57 49 a0 e8 db c9 00 e1 80 e3 01 74 02 0f 0b <0f> 0b 5b c3 48 8d 45 10 48 89 e2 4c 89 e6 48 89 1c 24 48 89 44 24
[ 1093.375457] RSP: 0018:ffffc90001a0f900 EFLAGS: 00010246
[ 1093.376042] RAX: 0000000000000000 RBX: ffff88804e004700 RCX: 0000000000000000
[ 1093.376811] RDX: 00000000ffffffc0 RSI: 0000000000000000 RDI: ffffffffa03ea6d5
[ 1093.377584] RBP: ffff888042f11740 R08: 0000000000000000 R09: 000000000000000a
[ 1093.378361] R10: 000000000000000a R11: f000000000000000 R12: ffff88804e004748
[ 1093.379147] R13: 0000000000000001 R14: ffffc90001a0f9e0 R15: ffffffffa03daaa0
[ 1093.379926] FS: 00007f8c3494f740(0000) GS:ffff88807e100000(0000) knlGS:0000000000000000
[ 1093.380796] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 1093.381427] CR2: 00007f8c34a57710 CR3: 000000004b455005 CR4: 00000000001706a0
[ 1093.382201] Call Trace:
[ 1093.382497] xfs_trans_add_item+0x171/0x180 [xfs]
[ 1093.383137] _xfs_trans_bjoin+0x72/0x110 [xfs]
[ 1093.383732] xfs_trans_read_buf_map+0x22b/0x4a0 [xfs]
[ 1093.384395] xfs_da_read_buf+0xce/0x120 [xfs]
[ 1093.384973] xfs_attr3_leaf_read+0x26/0x60 [xfs]
[ 1093.385567] ? xfs_attr_is_leaf+0x76/0x90 [xfs]
[ 1093.386162] xfs_attr_node_shrink+0x54/0x100 [xfs]
[ 1093.386789] xfs_attr_remove_iter+0xa9/0x270 [xfs]
[ 1093.387402] xfs_attr_set+0x2ff/0x430 [xfs]
[ 1093.387953] xfs_xattr_set+0x89/0xd0 [xfs]
[ 1093.388507] __vfs_removexattr+0x52/0x70
[ 1093.388959] __vfs_removexattr_locked+0xb8/0x140
[ 1093.389476] vfs_removexattr+0x56/0x100
[ 1093.389919] ovl_xattr_set+0x131/0x1d0 [overlay]
[ 1093.390437] __vfs_removexattr+0x52/0x70
[ 1093.390902] __vfs_removexattr_locked+0xb8/0x140
[ 1093.391420] vfs_removexattr+0x56/0x100
[ 1093.391856] removexattr+0x58/0x90
[ 1093.392257] ? __check_object_size+0xc8/0x280
[ 1093.392747] ? strncpy_from_user+0x47/0x180
[ 1093.393223] ? preempt_count_add+0x50/0xa0
[ 1093.393684] ? __mnt_want_write+0x65/0x90
[ 1093.394145] path_removexattr+0x9e/0xc0
[ 1093.394582] __x64_sys_lremovexattr+0x14/0x20
[ 1093.395095] do_syscall_64+0x3a/0x70
[ 1093.395508] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 1093.396072] RIP: 0033:0x7f8c34a7207b
[ 1093.396478] Code: 73 01 c3 48 8b 0d 15 ae 0c 00 f7 d8 64 89 01 48 83 c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 c6 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d e5 ad 0c 00 f7 d8 64 89 01 48
[ 1093.398426] RSP: 002b:00007ffc9f3248f8 EFLAGS: 00000202 ORIG_RAX: 00000000000000c6
[ 1093.399254] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007f8c34a7207b
[ 1093.400032] RDX: 0000000000000072 RSI: 00007ffc9f324910 RDI: 00007ffc9f3261a0
[ 1093.400800] RBP: 00007ffc9f326196 R08: 0000000000000000 R09: 00007ffc9f324910
[ 1093.401571] R10: 00007f8c34b3dbe0 R11: 0000000000000202 R12: 00007ffc9f3261a0
[ 1093.402343] R13: 00007ffc9f324910 R14: 0000000000000000 R15: 0000000000000001
[ 1093.403130] ---[ end trace d5f6b816d9024421 ]---
[ 1093.565232] XFS (sdc): Unmounting Filesystem
[ 1093.604852] [U] TEST FINISHED: -overlay generic/020 @ Wed May 26 10:34:41 PDT 2021
The first assertion, I think, is an accounting problem -- the ASSERT
checks that args->rmtblkno should be zero after calling the function
__xfs_attr_rmtval_remove to unmap the blocks backing the remote value
from the attr fork. I don't see anywhere in that function that actually
updates the args fields, however.
AFAICT all this needs is a little bookkeeping update in
__xfs_attr_rmtval_remove.
The second and subsequent assertions come from trying to log a buffer
that isn't attached to the current transaction. I think what's
happening is:
1. we're in state XFS_DAS_RMTBLK
2. call __xfs_attr_rmtval_remove to remove a remote block, which returns 0
3. call xfs_attr_refillstate to re-attach buffers to the da state
4. set state to XFS_DAS_RM_NAME
5. set XFS_DAC_DEFER_FINISH and return EAGAIN to finish deferred updates
6. <transaction roll releases buffers>
7. now we're in state XFS_DAS_RM_NAME
8. call xfs_attr_node_removename to remove the name
9. trip assert because the buffers in state->path.blk[] aren't joined to the
current transaction
I think the solution here is to call xfs_attr_refillstate to reattach
all the buffers to the transaction, but only if we've freshly rolled the
transaction. If we fell through the UNINIT and RMTBLK cases into
RM_NAME without rolling anything, then we're still on the same
transaction that we used for the first lookup and don't need to refill
the state.
Can you take a look at this patch? It fixes the problems for that one
test, but I haven't run it through QA yet.
Ok, it seems to be doing ok so far in other tests. (at least for me!)
Should I just add this to another patch at the end? Thank you for the
catch!
Allison
--D
diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c
index 20b1e3c6bdd0..7b3d0c3d2e65 100644
--- a/fs/xfs/libxfs/xfs_attr.c
+++ b/fs/xfs/libxfs/xfs_attr.c
@@ -1442,6 +1442,17 @@ xfs_attr_remove_iter(
/* fallthrough */
case XFS_DAS_RM_NAME:
+
+ /*
+ * If we came here fresh from a transaction roll, reattach all
+ * the buffers to the current transaction.
+ */
+ if (dac->dela_state == XFS_DAS_RM_NAME) {
+ error = xfs_attr_refillstate(state);
+ if (error)
+ goto out;
+ }
+
retval = xfs_attr_node_removename(args, state);
/*
diff --git a/fs/xfs/libxfs/xfs_attr_remote.c b/fs/xfs/libxfs/xfs_attr_remote.c
index b5bc50cad9bf..d560b55abedb 100644
--- a/fs/xfs/libxfs/xfs_attr_remote.c
+++ b/fs/xfs/libxfs/xfs_attr_remote.c
@@ -699,5 +699,8 @@ __xfs_attr_rmtval_remove(
return -EAGAIN;
}
- return error;
+ /* We've unmapped the remote value blocks, so zero these out */
+ args->rmtblkno = 0;
+ args->rmtblkcnt = 0;
+ return 0;
}