From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx3-rdu2.redhat.com ([66.187.233.73]:51172 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751309AbeEOVuE (ORCPT ); Tue, 15 May 2018 17:50:04 -0400 From: Waiman Long To: Ingo Molnar , Peter Zijlstra , Thomas Gleixner Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, Davidlohr Bueso , "Theodore Y. Ts'o" , Oleg Nesterov , Amir Goldstein , Jan Kara , Matthew Wilcox , Waiman Long Subject: [PATCH v4 0/2] locking/rwsem: Fix DEBUG_RWSEM warning from thaw_super() Date: Tue, 15 May 2018 17:49:49 -0400 Message-Id: <1526420991-21213-1-git-send-email-longman@redhat.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: v4: - Repurpose bit 0 of the owner field as the unknown owner bit. - Incorporate comments from reviewers. v3: - Modify patch 1 to not expose any new rwsem owner related function. - Modify patch 2 to make percpu_rwsem_release() and percpu_rwsem_acquire() set the owner field directly, if applicable. This patchset aims to fix the DEBUG_RWSEM warning in the filesystem freezing/thawing code. A new macro RWSEM_OWNER_UNKNOWN (-1) is exposed in the linux/rwsem.h file to indicate that a rwsem is currently owned by an unknown writer. Other than that, there is no externally visible changes. The new RWSEM_OWNER_UNKNOWN macro has no dependency on internal rwsem header. What is important is that bit 1 of the owner field is set which is the marker used by the internal rwsem code to determine if the owner is unknown or not. The original code of clearing the owner field in percpu_rwsem_release() isn't correct as a NULL owner field should correspond to an unlocked rwsem which is not the case here. In addition, optimistic spinning won't be stopped by a NULL owner value. Testings are welcome. Waiman Long (2): locking/rwsem: Add a new RWSEM_ANONYMOUSLY_OWNED flag locking/percpu-rwsem: Annotate rwsem ownership transfer by setting RWSEM_OWNER_UNKNOWN include/linux/percpu-rwsem.h | 6 +++++- include/linux/rwsem.h | 6 ++++++ kernel/locking/rwsem-xadd.c | 19 +++++++++---------- kernel/locking/rwsem.c | 2 -- kernel/locking/rwsem.h | 30 +++++++++++++++++++++--------- 5 files changed, 41 insertions(+), 22 deletions(-) -- 1.8.3.1