linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* REGRESSION/TEST FAILURE caused by DEBUG_RWSEMS
@ 2018-04-04 13:23 Theodore Y. Ts'o
  2018-04-04 13:55 ` Waiman Long
  0 siblings, 1 reply; 3+ messages in thread
From: Theodore Y. Ts'o @ 2018-04-04 13:23 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel; +Cc: Waiman Long, Oleg Nesterov

The commit 5149cbac4235: "locking/rwsem: Add DEBUG_RWSEMS to look for
lock/unlock emismatches" (newly added in this merge window) will cause
xfstests tests failures in generic/068 for all file systems.

This is because the freeze and thaw ioctls, by design, are run in
different processes.  It looks like the concern for why
CONFIG_DEBUG_RWSEMS was added is because read/write semaphores can
spin --- which if the case, we need to make sure that (a) the spinlock
code path is not used for the freeze/thaw ioctls, and (b) we don't
trigger the debug WARN_ON.

Cheers,

						- Ted

generic/068		[08:52:46][   24.807316] run fstests generic/068 at 2018-04-04 08:52:46
[   25.444734] ------------[ cut here ]------------
[   25.446991] DEBUG_LOCKS_WARN_ON(sem->owner != get_current())
[   25.447017] WARNING: CPU: 0 PID: 1302 at /usr/projects/linux/ext4/kernel/locking/rwsem.c:133 up_write+0x113/0x150
[   25.453885] CPU: 0 PID: 1302 Comm: xfs_io Not tainted 4.16.0-rc7-xfstests-00114-g5149cbac4235 #130
[   25.457294] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1 04/01/2014
[   25.460534] RIP: 0010:up_write+0x113/0x150
[   25.462096] RSP: 0018:ffff88006504fd30 EFLAGS: 00010282
[   25.464061] RAX: dffffc0000000008 RBX: ffff880068ab2af8 RCX: ffffffff89a28dde
[   25.466724] RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000293
[   25.469543] RBP: ffff880068ab2b60 R08: fffffbfff179d951 R09: fffffbfff179d951
[   25.472608] R10: ffff88007ffca010 R11: fffffbfff179d950 R12: ffff880068ab27a0
[   25.475331] R13: ffff880068ab24f0 R14: ffff880068ab2ca0 R15: ffffffff89cf4d47
[   25.478000] FS:  0000000001665880(0000) GS:ffff88006d400000(0000) knlGS:0000000000000000
[   25.481025] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   25.483216] CR2: 000000000166a018 CR3: 00000000696e8000 CR4: 00000000000006f0
[   25.485900] Call Trace:
[   25.487035]  percpu_up_write+0x4c/0x60
[   25.488532]  thaw_super+0x1c4/0x250
[   25.489904]  do_vfs_ioctl+0xe14/0xfb0
[   25.491296]  ? ioctl_preallocate+0x1a0/0x1a0
[   25.492860]  ? _copy_to_user+0x9d/0xc0
[   25.494179]  ? SyS_sysinfo+0x82/0xc0
[   25.495500]  ? SyS_getcpu+0x120/0x120
[   25.496815]  SyS_ioctl+0x43/0x80
[   25.497944]  ? do_vfs_ioctl+0xfb0/0xfb0
[   25.499268]  do_syscall_64+0x1a0/0x640
[   25.500566]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
[   25.502038] RIP: 0033:0x45d4c7
[   25.502901] RSP: 002b:00007ffe95712ff8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
[   25.505362] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 000000000045d4c7
[   25.507286] RDX: 00007ffe9571300c RSI: ffffffffc0045878 RDI: 0000000000000003
[   25.509408] RBP: 0000000001669290 R08: 0000000000000000 R09: 0000000000000000
[   25.511525] R10: 0000000000434cc0 R11: 0000000000000246 R12: 0000000000000001
[   25.513404] R13: 0000000001669270 R14: 000000000166a2d0 R15: 0000000001669270
[   25.515260] Code: 83 e0 07 83 c0 03 38 d0 7c 04 84 d2 75 48 8b 05 64 84 c2 03 85 c0 75 86 48 c7 c6 20 2a 66 8b 48 c7 c7 e0 29 66 8b e8 ed 07 f2 ff <0f> 0b e9 6c ff ff ff e8 41 74 2d 00 e9 2a ff ff ff 48 89 ef e8 
[   25.520602] ---[ end trace 28e00b42ae928cb1 ]---

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: REGRESSION/TEST FAILURE caused by DEBUG_RWSEMS
  2018-04-04 13:23 REGRESSION/TEST FAILURE caused by DEBUG_RWSEMS Theodore Y. Ts'o
@ 2018-04-04 13:55 ` Waiman Long
  2018-04-04 21:40   ` Dave Chinner
  0 siblings, 1 reply; 3+ messages in thread
From: Waiman Long @ 2018-04-04 13:55 UTC (permalink / raw)
  To: Theodore Y. Ts'o, linux-kernel, linux-fsdevel, Oleg Nesterov
  Cc: Ingo Molnar

On 04/04/2018 09:23 AM, Theodore Y. Ts'o wrote:
> The commit 5149cbac4235: "locking/rwsem: Add DEBUG_RWSEMS to look for
> lock/unlock emismatches" (newly added in this merge window) will cause
> xfstests tests failures in generic/068 for all file systems.
>
> This is because the freeze and thaw ioctls, by design, are run in
> different processes.  It looks like the concern for why
> CONFIG_DEBUG_RWSEMS was added is because read/write semaphores can
> spin --- which if the case, we need to make sure that (a) the spinlock
> code path is not used for the freeze/thaw ioctls, and (b) we don't
> trigger the debug WARN_ON.
>
> Cheers,
>
The rwsem code has an up_read_non_owner() function for this kind of
cross task lock/unlock. I think we should add the corresponding
up_write_non_owner() for that. It is better to annotate those calls that
have this issue rather than working around it. I will post a patch to
address that later today.

Cheers,
Longman

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: REGRESSION/TEST FAILURE caused by DEBUG_RWSEMS
  2018-04-04 13:55 ` Waiman Long
@ 2018-04-04 21:40   ` Dave Chinner
  0 siblings, 0 replies; 3+ messages in thread
From: Dave Chinner @ 2018-04-04 21:40 UTC (permalink / raw)
  To: Waiman Long
  Cc: Theodore Y. Ts'o, linux-kernel, linux-fsdevel, Oleg Nesterov,
	Ingo Molnar

On Wed, Apr 04, 2018 at 09:55:18AM -0400, Waiman Long wrote:
> On 04/04/2018 09:23 AM, Theodore Y. Ts'o wrote:
> > The commit 5149cbac4235: "locking/rwsem: Add DEBUG_RWSEMS to look for
> > lock/unlock emismatches" (newly added in this merge window) will cause
> > xfstests tests failures in generic/068 for all file systems.
> >
> > This is because the freeze and thaw ioctls, by design, are run in
> > different processes.  It looks like the concern for why
> > CONFIG_DEBUG_RWSEMS was added is because read/write semaphores can
> > spin --- which if the case, we need to make sure that (a) the spinlock
> > code path is not used for the freeze/thaw ioctls, and (b) we don't
> > trigger the debug WARN_ON.
> >
> > Cheers,
> >
> The rwsem code has an up_read_non_owner() function for this kind of
> cross task lock/unlock.  I think we should add the corresponding
> up_write_non_owner() for that.

Keep in mind this is a percpu_rwsem, not a rwsem. It's the
sb_freeze_unlock() call in thaw_super() that is triggering it, and
it would appear that percpu_rwsems have no concept on "non_owner"
operation ATM.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-04-04 21:40 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-04 13:23 REGRESSION/TEST FAILURE caused by DEBUG_RWSEMS Theodore Y. Ts'o
2018-04-04 13:55 ` Waiman Long
2018-04-04 21:40   ` Dave Chinner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).