| From: Dan Williams <dan.j.williams@intel.com> |
| Subject: devdax: fix sparse lock imbalance warning |
| Date: Fri, 14 Oct 2022 16:58:20 -0700 |
| |
| Annotate dax_read_{lock,unlock} with their locking expectations to fix |
| this sparse report: |
| |
| drivers/dax/super.c:45:5: sparse: warning: context imbalance in 'dax_read_lock' - wrong count at exit |
| drivers/dax/super.c: note: in included file (through include/linux/notifier.h, include/linux/memory_hotplug.h, include/linux/mmzone.h, include/linux/gfp.h, include/linux/mm.h, include/linux/pagemap.h): |
| ./include/linux/srcu.h:189:9: sparse: warning: context imbalance in 'dax_read_unlock' - unexpected unlock |
| |
| Link: https://lkml.kernel.org/r/166579190012.2236710.846739337067413538.stgit@dwillia2-xfh.jf.intel.com |
| Signed-off-by: Dan Williams <dan.j.williams@intel.com> |
| Reported-by: kernel test robot <lkp@intel.com> |
| Link: http://lore.kernel.org/r/202210091141.cHaQEuCs-lkp@intel.com |
| Cc: Alex Deucher <alexander.deucher@amd.com> |
| Cc: Alistair Popple <apopple@nvidia.com> |
| Cc: Ben Skeggs <bskeggs@redhat.com> |
| Cc: "Christian König" <christian.koenig@amd.com> |
| Cc: Christoph Hellwig <hch@lst.de> |
| Cc: Daniel Vetter <daniel@ffwll.ch> |
| Cc: "Darrick J. Wong" <djwong@kernel.org> |
| Cc: Dave Chinner <david@fromorbit.com> |
| Cc: David Airlie <airlied@linux.ie> |
| Cc: Felix Kuehling <Felix.Kuehling@amd.com> |
| Cc: Jan Kara <jack@suse.cz> |
| Cc: Jason Gunthorpe <jgg@nvidia.com> |
| Cc: Jerome Glisse <jglisse@redhat.com> |
| Cc: John Hubbard <jhubbard@nvidia.com> |
| Cc: Karol Herbst <kherbst@redhat.com> |
| Cc: Lyude Paul <lyude@redhat.com> |
| Cc: Matthew Wilcox <willy@infradead.org> |
| Cc: "Pan, Xinhui" <Xinhui.Pan@amd.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| drivers/dax/super.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/dax/super.c~devdax-fix-sparse-lock-imbalance-warning |
| +++ a/drivers/dax/super.c |
| @@ -42,13 +42,13 @@ static DEFINE_IDA(dax_minor_ida); |
| static struct kmem_cache *dax_cache __read_mostly; |
| static struct super_block *dax_superblock __read_mostly; |
| |
| -int dax_read_lock(void) |
| +int dax_read_lock(void) __acquires(&dax_srcu) |
| { |
| return srcu_read_lock(&dax_srcu); |
| } |
| EXPORT_SYMBOL_GPL(dax_read_lock); |
| |
| -void dax_read_unlock(int id) |
| +void dax_read_unlock(int id) __releases(&dax_srcu) |
| { |
| srcu_read_unlock(&dax_srcu, id); |
| } |
| _ |