From cb8210d125676c5e84203d8fdb6ce4e588567f31 Mon Sep 17 00:00:00 2001 From: LOLi Date: Thu, 25 May 2017 18:55:55 +0200 Subject: [PATCH] Linux 4.12 compat: fix super_setup_bdi_name() call Provide a format parameter to super_setup_bdi_name() so we don't create duplicate names in '/devices/virtual/bdi' sysfs namespace which would prevent us from mounting more than one ZFS filesystem at a time. Reviewed-by: Chunwei Chen Reviewed-by: Brian Behlendorf Signed-off-by: loli10K Closes #6147 --- include/linux/vfs_compat.h | 9 +++++---- module/zfs/zfs_vfsops.c | 3 +-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/include/linux/vfs_compat.h b/include/linux/vfs_compat.h index 44634c3367..a4432e0f05 100644 --- a/include/linux/vfs_compat.h +++ b/include/linux/vfs_compat.h @@ -73,10 +73,13 @@ truncate_setsize(struct inode *ip, loff_t new) * 4.12 - x.y, super_setup_bdi_name() new interface. */ #if defined(HAVE_SUPER_SETUP_BDI_NAME) +extern atomic_long_t zfs_bdi_seq; + static inline int zpl_bdi_setup(struct super_block *sb, char *name) { - return (super_setup_bdi_name(sb, name)); + return super_setup_bdi_name(sb, "%.28s-%ld", name, + atomic_long_inc_return(&zfs_bdi_seq)); } static inline void zpl_bdi_destroy(struct super_block *sb) @@ -143,7 +146,6 @@ static inline int zpl_bdi_setup(struct super_block *sb, char *name) { struct backing_dev_info *bdi; - char tmp[32]; int error; bdi = kmem_zalloc(sizeof (struct backing_dev_info), KM_SLEEP); @@ -156,8 +158,7 @@ zpl_bdi_setup(struct super_block *sb, char *name) return (error); } - sprintf(tmp, "%.28s%s", name, "-%d"); - error = bdi_register(bdi, NULL, tmp, + error = bdi_register(bdi, NULL, "%.28s-%ld", name, atomic_long_inc_return(&zfs_bdi_seq)); if (error) { bdi_destroy(bdi); diff --git a/module/zfs/zfs_vfsops.c b/module/zfs/zfs_vfsops.c index 063175f34e..9989e5d86f 100644 --- a/module/zfs/zfs_vfsops.c +++ b/module/zfs/zfs_vfsops.c @@ -1374,8 +1374,7 @@ zfs_sb_teardown(zfs_sb_t *zsb, boolean_t unmounting) } EXPORT_SYMBOL(zfs_sb_teardown); -#if !defined(HAVE_SUPER_SETUP_BDI_NAME) && \ - !defined(HAVE_2ARGS_BDI_SETUP_AND_REGISTER) && \ +#if !defined(HAVE_2ARGS_BDI_SETUP_AND_REGISTER) && \ !defined(HAVE_3ARGS_BDI_SETUP_AND_REGISTER) atomic_long_t zfs_bdi_seq = ATOMIC_LONG_INIT(0); #endif