Re: [PATCH v19 00/14] Delay Ready Attributes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[ 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.

--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;
 }



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux