From c298360a49ea1b0ab8fd766bcf60355816b4d24b Mon Sep 17 00:00:00 2001 From: Auke Kok Date: Mon, 20 May 2024 10:42:21 -0700 Subject: [PATCH] blkdev api changes - pass holder to replace FMODE_EXCL Passing a holder ptr to these functions now replaces the FMODE_EXCL flag. _put no longer needs flags for this reason, but the holder instead. Signed-off-by: Auke Kok --- kmod/src/Makefile.kernelcompat | 9 +++++++++ kmod/src/super.c | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/kmod/src/Makefile.kernelcompat b/kmod/src/Makefile.kernelcompat index ee3de8f9..d1a21b11 100644 --- a/kmod/src/Makefile.kernelcompat +++ b/kmod/src/Makefile.kernelcompat @@ -404,3 +404,12 @@ endif ifneq (,$(shell grep 'typedef unsigned int __bitwise blk_mode_t' include/linux/blkdev.h)) ccflags-y += -DKC_HAVE_BLK_MODE_T endif + +# +# v6.4-rc2-186-g2736e8eeb0cc +# +# Reworks FMODE_EXCL kludge and instead modifies the blkdev_put() call to pass in +# the (exclusive) holder to implement FMODE_EXCL handling. +ifneq (,$(shell grep 'blkdev_put.struct block_device .bdev, void .holder' include/linux/blkdev.h)) +ccflags-y += -DKC_BLKDEV_PUT_HOLDER_ARG +endif diff --git a/kmod/src/super.c b/kmod/src/super.c index 0086d7fb..b9428ca3 100644 --- a/kmod/src/super.c +++ b/kmod/src/super.c @@ -160,7 +160,11 @@ static void scoutfs_metadev_close(struct super_block *sb) * from kill_sb->put_super. */ lockdep_off(); +#ifdef KC_BLKDEV_PUT_HOLDER_ARG + blkdev_put(sbi->meta_bdev, sb); +#else blkdev_put(sbi->meta_bdev, SCOUTFS_META_BDEV_MODE); +#endif lockdep_on(); sbi->meta_bdev = NULL; } @@ -523,7 +527,11 @@ static int scoutfs_fill_super(struct super_block *sb, void *data, int silent) goto out; } +#ifdef KC_BLKDEV_PUT_HOLDER_ARG + meta_bdev = blkdev_get_by_path(opts.metadev_path, SCOUTFS_META_BDEV_MODE, sb, NULL); +#else meta_bdev = blkdev_get_by_path(opts.metadev_path, SCOUTFS_META_BDEV_MODE, sb); +#endif if (IS_ERR(meta_bdev)) { scoutfs_err(sb, "could not open metadev: error %ld", PTR_ERR(meta_bdev));