2018-05-24 13:26:55

by Waiman Long

[permalink] [raw]
Subject: [PATCH] locking/rwsem: Fix up_read_non_owner() warning with DEBUG_RWSEMS

It was found that the use of up_read_non_owner() in NFS was causing
the following warning when DEBUG_RWSEMS was configured.

DEBUG_LOCKS_WARN_ON(sem->owner != ((struct task_struct *)(1UL << 0)))

Looking into the rwsem.c file, it was discovered that the corresponding
down_read_non_owner() function was not setting the owner field properly.
This is fixed now, and the warning should be gone.

Signed-off-by: Waiman Long <[email protected]>
---
kernel/locking/rwsem.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index bc1e507..776308d 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -181,6 +181,7 @@ void down_read_non_owner(struct rw_semaphore *sem)
might_sleep();

__down_read(sem);
+ rwsem_set_reader_owned(sem);
}

EXPORT_SYMBOL(down_read_non_owner);
--
1.8.3.1



2018-06-19 23:09:58

by Waiman Long

[permalink] [raw]
Subject: Re: [PATCH] locking/rwsem: Fix up_read_non_owner() warning with DEBUG_RWSEMS

On 05/24/2018 09:26 PM, Waiman Long wrote:
> It was found that the use of up_read_non_owner() in NFS was causing
> the following warning when DEBUG_RWSEMS was configured.
>
> DEBUG_LOCKS_WARN_ON(sem->owner != ((struct task_struct *)(1UL << 0)))
>
> Looking into the rwsem.c file, it was discovered that the corresponding
> down_read_non_owner() function was not setting the owner field properly.
> This is fixed now, and the warning should be gone.
>
> Signed-off-by: Waiman Long <[email protected]>
> ---
> kernel/locking/rwsem.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
> index bc1e507..776308d 100644
> --- a/kernel/locking/rwsem.c
> +++ b/kernel/locking/rwsem.c
> @@ -181,6 +181,7 @@ void down_read_non_owner(struct rw_semaphore *sem)
> might_sleep();
> tch
> __down_read(sem);
> + rwsem_set_reader_owned(sem);
> }
>
> EXPORT_SYMBOL(down_read_non_owner);

Since the 4.18 merge window has been closed. Can that patch be merged
upstream?

Cheers,
Longman


2018-06-20 05:55:01

by Schenk, Gavin

[permalink] [raw]
Subject: Re: [Customers.Eckelmann] [PATCH] locking/rwsem: Fix up_read_non_owner() warning with DEBUG_RWSEMS

SGksDQoNCk9uIFdlZCwgMjAxOC0wNi0yMCBhdCAwNzowOSArMDgwMCwgV2FpbWFuIExvbmcgd3Jv
dGU6DQo+IE9uIDA1LzI0LzIwMTggMDk6MjYgUE0sIFdhaW1hbiBMb25nIHdyb3RlOg0KPiA+IEl0
IHdhcyBmb3VuZCB0aGF0IHRoZSB1c2Ugb2YgdXBfcmVhZF9ub25fb3duZXIoKSBpbiBORlMgd2Fz
IGNhdXNpbmcNCj4gPiB0aGUgZm9sbG93aW5nIHdhcm5pbmcgd2hlbiBERUJVR19SV1NFTVMgd2Fz
IGNvbmZpZ3VyZWQuDQo+ID4gDQo+ID4gICBERUJVR19MT0NLU19XQVJOX09OKHNlbS0+b3duZXIg
IT0gKChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikoMVVMIDw8IDApKSkNCj4gPiANCj4gPiBMb29raW5n
IGludG8gdGhlIHJ3c2VtLmMgZmlsZSwgaXQgd2FzIGRpc2NvdmVyZWQgdGhhdCB0aGUgY29ycmVz
cG9uZGluZw0KPiA+IGRvd25fcmVhZF9ub25fb3duZXIoKSBmdW5jdGlvbiB3YXMgbm90IHNldHRp
bmcgdGhlIG93bmVyIGZpZWxkIHByb3Blcmx5Lg0KPiA+IFRoaXMgaXMgZml4ZWQgbm93LCBhbmQg
dGhlIHdhcm5pbmcgc2hvdWxkIGJlIGdvbmUuDQo+ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogV2Fp
bWFuIExvbmcgPGxvbmdtYW5AcmVkaGF0LmNvbT4NClRlc3RlZC1ieTogR2F2aW4gU2NoZW5rIDxn
LnNjaGVua0BlY2tlbG1hbm4uZGU+DQoNClRoaXMgZml4ZXMgbXkgcmVwcm9kdWNpYmxlIGxvY2tp
bmcgc3BsYXQgd2hlbiBib290aW5nIHdpdGggbmZzcm9vdCBhbmQgY2hhbmdpbmcgcGFzc3dvcmQu
IFRoYW5rIHlvdSENCg0KUmVnYXJkcw0KR2F2aW4gU2NoZW5rDQo=

2018-06-20 09:17:59

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [PATCH] locking/rwsem: Fix up_read_non_owner() warning with DEBUG_RWSEMS

On Thu, May 24, 2018 at 09:26:38AM -0400, Waiman Long wrote:
> It was found that the use of up_read_non_owner() in NFS was causing
> the following warning when DEBUG_RWSEMS was configured.
>
> DEBUG_LOCKS_WARN_ON(sem->owner != ((struct task_struct *)(1UL << 0)))
>
> Looking into the rwsem.c file, it was discovered that the corresponding
> down_read_non_owner() function was not setting the owner field properly.
> This is fixed now, and the warning should be gone.
>
> Signed-off-by: Waiman Long <[email protected]>

Acked-by: Peter Zijlstra (Intel) <[email protected]>

> ---
> kernel/locking/rwsem.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
> index bc1e507..776308d 100644
> --- a/kernel/locking/rwsem.c
> +++ b/kernel/locking/rwsem.c
> @@ -181,6 +181,7 @@ void down_read_non_owner(struct rw_semaphore *sem)
> might_sleep();
>
> __down_read(sem);
> + rwsem_set_reader_owned(sem);
> }
>
> EXPORT_SYMBOL(down_read_non_owner);
> --
> 1.8.3.1
>