]> granicus.if.org Git - zfs/commitdiff
Simplify BDI integration
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 8 Nov 2011 00:39:03 +0000 (16:39 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 8 Nov 2011 18:19:03 +0000 (10:19 -0800)
Update the code to use the bdi_setup_and_register() helper to
simplify the bdi integration code.  The updated code now just
registers the bdi during mount and destroys it during unmount.

The only complication is that for 2.6.32 - 2.6.33 kernels the
helper wasn't available so in these cases the zfs code must
provide it.  Luckily the bdi_setup_and_register() function
is trivial.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #367

60 files changed:
Makefile.in
cmd/Makefile.in
cmd/mount_zfs/Makefile.in
cmd/sas_switch_id/Makefile.in
cmd/zdb/Makefile.in
cmd/zfs/Makefile.in
cmd/zinject/Makefile.in
cmd/zpios/Makefile.in
cmd/zpool/Makefile.in
cmd/zpool_id/Makefile.in
cmd/zpool_layout/Makefile.in
cmd/ztest/Makefile.in
cmd/zvol_id/Makefile.in
config/kernel-bdi-setup-and-register.m4 [new file with mode: 0644]
config/kernel.m4
configure
dracut/90zfs/Makefile.in
dracut/Makefile.in
etc/Makefile.in
etc/init.d/Makefile.in
etc/zfs/Makefile.in
include/Makefile.in
include/linux/Makefile.in
include/linux/vfs_compat.h
include/sys/Makefile.in
include/sys/fm/Makefile.in
include/sys/fm/fs/Makefile.in
include/sys/fs/Makefile.in
lib/Makefile.in
lib/libavl/Makefile.in
lib/libefi/Makefile.in
lib/libnvpair/Makefile.in
lib/libshare/Makefile.in
lib/libspl/Makefile.in
lib/libspl/asm-generic/Makefile.in
lib/libspl/asm-i386/Makefile.in
lib/libspl/asm-x86_64/Makefile.in
lib/libspl/include/Makefile.in
lib/libspl/include/ia32/Makefile.in
lib/libspl/include/ia32/sys/Makefile.in
lib/libspl/include/rpc/Makefile.in
lib/libspl/include/sys/Makefile.in
lib/libspl/include/sys/dktp/Makefile.in
lib/libspl/include/sys/sysevent/Makefile.in
lib/libspl/include/util/Makefile.in
lib/libunicode/Makefile.in
lib/libuutil/Makefile.in
lib/libzfs/Makefile.in
lib/libzpool/Makefile.in
man/Makefile.in
man/man8/Makefile.in
module/zfs/zfs_vfsops.c
scripts/Makefile.in
scripts/zpios-profile/Makefile.in
scripts/zpios-test/Makefile.in
scripts/zpool-config/Makefile.in
scripts/zpool-layout/Makefile.in
udev/Makefile.in
udev/rules.d/Makefile.in
zfs_config.h.in

index 3dbb5178d48cfe22a26da7f3168623b03ece1ddf..17bf078392095b7ae75683ff7afb28be1127cfce 100644 (file)
@@ -56,6 +56,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index f4038c46283e92d6b7b5754931d79114a601ad77..fd5cce5f7fbf65572a77d29782ea4887fb01e954 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index b6dffc3917c696573bc8662015a49c20ee9bac3e..bb77b152ff365ef07d7f3b61e1a154599d23642d 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 27a448bb912c1e8f11b4479ea26d193a2bc74bd1..3664f6f380ab5eb6ecdf45ce54f628f51af5a7dd 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 3acec3a715fbf3efbc260f5be36dcf8d02e01a2f..984b6908291aa575ae5cc6804654b47d617bf660 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 78b8cd5a72c24b0fd8c0c5aa996b11412823341e..bba0748de504453e6db78aa42efb80e5a2640689 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 01c3bafebd8b7aafd6b98e13d1837707647e5909..8de6f75160aaec731be29a3e80711fcbfb2cd1e8 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 7fe48cca56e1807a67cf13176fd7bbb8138ffd0c..49f0ce45fce12a4140e33973b969582b7fd324fc 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 80df0981307c0ab9c9203b119c0a55b71a7702f3..4d1b60ebce9918b2c192781fb5a1993f0717a26f 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 6ff1261146635b425b93e98b86db52d4a15a15d2..21d9e91eed6233fee352c3c96a6272f16851002e 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 0c1069b4e9a4abd73fa0dded746da4442aa81dc6..76dbf37466600891e23cdfe16f0cbc15c7370187 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index f11fac605d1f9fed1370996526a3b9f5f05e151f..30461106a7436496892c9a402b57da44fb891277 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index e0b70ff4f70cc1ea9028f6f855d40c1da340ce0f..9c401fd75c632b02b0a65be0d98d1ea8a5b218f4 100644 (file)
@@ -44,6 +44,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
diff --git a/config/kernel-bdi-setup-and-register.m4 b/config/kernel-bdi-setup-and-register.m4
new file mode 100644 (file)
index 0000000..56fab87
--- /dev/null
@@ -0,0 +1,15 @@
+dnl #
+dnl # 2.6.34 API change
+dnl # The bdi_setup_and_register() helper function is avilable and
+dnl # exported by the kernel.  This is a trivial helper function but
+dnl # using it significantly simplifies the code surrounding setting
+dnl # up and tearing down the bdi structure.
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_BDI_SETUP_AND_REGISTER], [
+       ZFS_CHECK_SYMBOL_EXPORT(
+               [bdi_setup_and_register],
+               [mm/backing-dev.c],
+               [AC_DEFINE(HAVE_BDI_SETUP_AND_REGISTER, 1,
+               [bdi_setup_and_register() is available])],
+               [])
+])
index 5490c8733648e94a28a7548f6ac7b33cd9d4f480..fec157a0c14bdb0b85226c0137705abf4491da61 100644 (file)
@@ -41,6 +41,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
        ZFS_AC_KERNEL_6ARGS_SECURITY_INODE_INIT_SECURITY
        ZFS_AC_KERNEL_MOUNT_NODEV
        ZFS_AC_KERNEL_BDI
+       ZFS_AC_KERNEL_BDI_SETUP_AND_REGISTER
 
        AS_IF([test "$LINUX_OBJ" != "$LINUX"], [
                KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
index 684a03c6b15a89465bfe410246831f73a89ec600..e70651f885954ab15a05a83c0631d526c79161cf 100755 (executable)
--- a/configure
+++ b/configure
 
 
 
+       { $as_echo "$as_me:$LINENO: checking whether symbol bdi_setup_and_register is exported" >&5
+$as_echo_n "checking whether symbol bdi_setup_and_register is exported... " >&6; }
+       grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \
+               $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null
+       rc=$?
+       if test $rc -ne 0; then
+
+               export=0
+               for file in mm/backing-dev.c; do
+                       grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" "$LINUX/$file" 2>/dev/null
+                       rc=$?
+                       if test $rc -eq 0; then
+
+                               export=1
+                               break;
+
+fi
+
+               done
+               if test $export -eq 0; then
+
+                       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+
+else
+
+                       { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BDI_SETUP_AND_REGISTER 1
+_ACEOF
+
+
+fi
+
+
+else
+
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BDI_SETUP_AND_REGISTER 1
+_ACEOF
+
+
+fi
+
+
+
+
        if test "$LINUX_OBJ" != "$LINUX"; then
 
                KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
 
 
 
+       { $as_echo "$as_me:$LINENO: checking whether symbol bdi_setup_and_register is exported" >&5
+$as_echo_n "checking whether symbol bdi_setup_and_register is exported... " >&6; }
+       grep -q -E '[[:space:]]bdi_setup_and_register[[:space:]]' \
+               $LINUX_OBJ/$LINUX_SYMBOLS 2>/dev/null
+       rc=$?
+       if test $rc -ne 0; then
+
+               export=0
+               for file in mm/backing-dev.c; do
+                       grep -q -E "EXPORT_SYMBOL.*(bdi_setup_and_register)" "$LINUX/$file" 2>/dev/null
+                       rc=$?
+                       if test $rc -eq 0; then
+
+                               export=1
+                               break;
+
+fi
+
+               done
+               if test $export -eq 0; then
+
+                       { $as_echo "$as_me:$LINENO: result: no" >&5
+$as_echo "no" >&6; }
+
+
+else
+
+                       { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BDI_SETUP_AND_REGISTER 1
+_ACEOF
+
+
+fi
+
+
+else
+
+               { $as_echo "$as_me:$LINENO: result: yes" >&5
+$as_echo "yes" >&6; }
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BDI_SETUP_AND_REGISTER 1
+_ACEOF
+
+
+fi
+
+
+
+
        if test "$LINUX_OBJ" != "$LINUX"; then
 
                KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS O=$LINUX_OBJ"
index 905ab50516c103ce45f3fc927982b6c98f04c8d0..89e9950954021f7f1b6a73e3862cd6544ad48f80 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 22d3eb3f74c06822b09fa552274c881814f75664..7a1f45f6e548f2de6327f9556e03c03a2a30de0d 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 6989c2377c0a749e762c83fcd9ed8b0ecfab629f..999f67af3b86f7e3c85649d996fc771560a6917b 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index a639233a14e58666a90d35b2d01aeab62b41618d..697284ff8c387bbbd08f95b80e7588474abe7612 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 3f8672dbc6f10609c9f512da31096ecbc124d225..8975187f8b4c4fa8a1316f934615502c9da616dc 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index de3af33ec20843e7b575ef96a466ee5e94c0e1c9..5614daa0eec870e8282c2f65eeea714eadfd59da 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 7e65511a66a8e07fbbad77a8b99e3ff976c21649..2666d4f916c7edfc93a034be87e761138ff237f4 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index cbbf21e618b6ea5aa2c2230626a44d4f30ea2cc1..825a7fd3bb6f137c90c1a4ca76ae304aac118d5e 100644 (file)
@@ -62,23 +62,36 @@ truncate_setsize(struct inode *ip, loff_t new)
 }
 #endif /* HAVE_TRUNCATE_SETSIZE */
 
+#if defined(HAVE_BDI) && !defined(HAVE_BDI_SETUP_AND_REGISTER)
 /*
- * 2.6.32 API change,
- * Added backing_device_info (bdi) per super block interfaces.  When
- * available a bdi must be configured when using a non-device backed
- * filesystem for proper writeback.  It's safe to leave this code
- * dormant for kernels which only support pdflush and not bdi.
+ * 2.6.34 API change,
+ * Add bdi_setup_and_register() function if not yet provided by kernel.
+ * It is used to quickly initialize and register a BDI for the filesystem.
  */
-#ifdef HAVE_BDI
-#define        bdi_get_sb(sb)                          (sb->s_bdi)
-#define        bdi_put_sb(sb, bdi)                     (sb->s_bdi = bdi)
-#else
-#define        bdi_init(bdi)                           (0)
-#define        bdi_destroy(bdi)                        (0)
-#define        bdi_register(bdi, parent, fmt, args)    (0)
-#define        bdi_unregister(bdi)                     (0)
-#define        bdi_get_sb(sb)                          (0)
-#define        bdi_put_sb(sb, bdi)                     (0)
-#endif /* HAVE_BDI */
+extern atomic_long_t zfs_bdi_seq;
+
+static inline int
+bdi_setup_and_register(struct backing_dev_info *bdi,char *name,unsigned int cap)
+{
+       char tmp[32];
+       int error;
+
+       bdi->name = name;
+       bdi->capabilities = cap;
+       error = bdi_init(bdi);
+       if (error)
+               return (error);
+
+       sprintf(tmp, "%.28s%s", name, "-%d");
+       error = bdi_register(bdi, NULL, tmp,
+           atomic_long_inc_return(&zfs_bdi_seq));
+       if (error) {
+               bdi_destroy(bdi);
+               return (error);
+       }
+
+       return (error);
+}
+#endif /* HAVE_BDI && !HAVE_BDI_SETUP_AND_REGISTER */
 
 #endif /* _ZFS_VFS_H */
index 6adc1ee5acafe9c6da471b783a5972e51a23ae9c..0a5ecc39f366af35a547ad19acc75c79e80c501f 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 036fd47a32cb5114101a63de1b73e437da2af935..7791750fa76c7d45197b174adb8fa0c3a5d9075e 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 2cff6d665fc0cc5f031120f13ab6b549c10d2e27..ee4a8fda577b9af0ad45c86245dcbe7eef1ce3e3 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index fd9c146625be3f9c3599b0ccfb31fb94e30a9b1d..9d3f79a1d04d751345785975a866d5bfebb589fe 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 86b0aef754e17bb2d0087b37da20ef4b2720cf1f..0c919dd99d73365624991d56554b809fc7f5615a 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 5135c8790e1723e68bd8084a0aaffa8b249ff508..43e7ac5ad934510933377303dc04b21d38d39657 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 25d61b27f0257832959977bcba705974461033e0..50d497122b3d91dae9175287e7a9a508e1a3ca9b 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 691c0814203bce91ce32abe11d1235f79c814b3d..9ce848511597f850451d4e13b0c2d3088bcc7fa3 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 0025019dd9073aa19a115a73f935e087711b1908..3705c7d28fec429d436999a8874d1639603bc1be 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 92be7c177c7ce139b0d80c5b04991fcf0dfa6e27..d2f6231a96fbf2e9bc74bdd05f10ebaa2a86c2ee 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 8fed7b6ea2d21d9d12843d7cb4c23599a996007b..003b5eceb6dd7327da930e2892c606b233fe623f 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 703cbf5067de838040de87167753e178f2b59ca3..cd415e1920b1efe3d31f73ad067d5d3896149e9c 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index ff5ba0f2c4a2c1e814ad7a3e0663aedabc004f10..df8e8f96e00452ee7e0d5adab30b677b2738e534 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 6891306c2684540c8625671377910545991efc86..87293bfa5dd7bf7475dbc85518b4ccb7cf9b49e8 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index a758a73e7314fde837bc2f88570ec09e870813bb..2f14b4af882228d6a3e652fcd380ba4f2d617660 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 7d9c283d9954ea0d44f50d4b591b67fbcdeeec1b..d01d7da9e7df261adef359677c3450fe92262261 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index d15599a73d72466992cb9469b9698b0f5e5d18a9..baaa5a002cd37cd0eee8f4ec4a70bcb2c7724368 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 30073069015f4c0f26ed4b840f135dd388872376..ac69160796f5ee23d20c238c7df611b337396e38 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 4f858653e3dca683e88c1962891a1f408f574fde..91e1059769e62cc4b6a702fc48082e3f85773b90 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index d254e86cf7831136603a0a6b0aa25131d28b5835..db38bb06c53908f65c89dcd8790b05983b10661b 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index d9d313f027fbc2221e875817b11ba3fcb9c5858d..dca1d4a88c274df2e6beb262fd7ec6d1f9cb8eb0 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 757f76b4fe2d0f71d4c33f9cb93b829027de5dd6..af101e31d6179a86228c472464a02caa77310595 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 391ad4b5387ea75339871ab6e8e67e36f93fa78b..27b02d1542c5fcb5710e0a151a61b1eb0f7b633f 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 3c3c39994d2267998762a408fd062d12d2019ecb..cdaab9431e051f66b262c57c3a8b881076e28174 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index ec612eea33cc01bc8b628011d42a5867700b46af..bb20477a901c0f6cba0a65083994e9f634e60ad9 100644 (file)
@@ -43,6 +43,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index c1c9ca324740242e86fc5029f1612449b8456acd..52952b1180fda7fbfe217dfc0c6c9f4167bc79a5 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 48dba3f4d186e218ea07b32007e61ccf0847db20..9a9967725d0223344471d387323e913c2165f112 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index ed847f1304e51f2a6427ffad1bd75c8fb31058e7..920d87e4f4ad3876023d5bd7091b7c7ac670bbcf 100644 (file)
@@ -600,12 +600,6 @@ zfs_sb_create(const char *osname, zfs_sb_t **zsbp)
        zsb->z_show_ctldir = ZFS_SNAPDIR_VISIBLE;
        zsb->z_os = os;
 
-       error = -bdi_init(&zsb->z_bdi);
-       if (error) {
-               kmem_free(zsb, sizeof (zfs_sb_t));
-               return (error);
-       }
-
        error = zfs_get_zplprop(os, ZFS_PROP_VERSION, &zsb->z_version);
        if (error) {
                goto out;
@@ -807,7 +801,6 @@ zfs_sb_free(zfs_sb_t *zsb)
 
        zfs_fuid_destroy(zsb);
 
-       bdi_destroy(&zsb->z_bdi);
        mutex_destroy(&zsb->z_znodes_lock);
        mutex_destroy(&zsb->z_lock);
        list_destroy(&zsb->z_all_znodes);
@@ -1089,9 +1082,9 @@ zfs_sb_teardown(zfs_sb_t *zsb, boolean_t unmounting)
 }
 EXPORT_SYMBOL(zfs_sb_teardown);
 
-#ifdef HAVE_BDI
-static atomic_long_t bdi_seq = ATOMIC_LONG_INIT(0);
-#endif /* HAVE_BDI */
+#if defined(HAVE_BDI) && !defined(HAVE_BDI_SETUP_AND_REGISTER)
+atomic_long_t zfs_bdi_seq = ATOMIC_LONG_INIT(0);
+#endif /* HAVE_BDI && !HAVE_BDI_SETUP_AND_REGISTER */
 
 int
 zfs_domount(struct super_block *sb, void *data, int silent)
@@ -1118,7 +1111,23 @@ zfs_domount(struct super_block *sb, void *data, int silent)
        sb->s_time_gran = 1;
        sb->s_blocksize = recordsize;
        sb->s_blocksize_bits = ilog2(recordsize);
-       bdi_put_sb(sb, NULL);
+
+#ifdef HAVE_BDI
+       /*
+        * 2.6.32 API change,
+        * Added backing_device_info (BDI) per super block interfaces.  A BDI
+        * must be configured when using a non-device backed filesystem for
+        * proper writeback.  This is not required for older pdflush kernels.
+        *
+        * NOTE: Linux read-ahead is disabled in favor of zfs read-ahead.
+        */
+       zsb->z_bdi.ra_pages = 0;
+       sb->s_bdi = &zsb->z_bdi;
+
+       error = -bdi_setup_and_register(&zsb->z_bdi, "zfs", BDI_CAP_MAP_COPY);
+       if (error)
+               goto out;
+#endif /* HAVE_BDI */
 
        /* Set callback operations for the file system. */
        sb->s_op = &zpl_super_operations;
@@ -1143,16 +1152,6 @@ zfs_domount(struct super_block *sb, void *data, int silent)
                dmu_objset_set_user(zsb->z_os, zsb);
                mutex_exit(&zsb->z_os->os_user_ptr_lock);
        } else {
-               /* Disable Linux read-ahead handled by lower layers */
-               zsb->z_bdi.ra_pages = 0;
-
-               error = -bdi_register(&zsb->z_bdi, NULL, "zfs-%d",
-                   atomic_long_inc_return(&bdi_seq));
-               if (error)
-                       goto out;
-
-               bdi_put_sb(sb, &zsb->z_bdi);
-
                error = zfs_sb_setup(zsb, B_TRUE);
 #ifdef HAVE_SNAPSHOT
                (void) zfs_snap_create(zsb);
@@ -1193,10 +1192,9 @@ zfs_umount(struct super_block *sb)
        VERIFY(zfs_sb_teardown(zsb, B_TRUE) == 0);
        os = zsb->z_os;
 
-       if (bdi_get_sb(sb)) {
-               bdi_unregister(bdi_get_sb(sb));
-               bdi_put_sb(sb, NULL);
-       }
+#ifdef HAVE_BDI
+       bdi_destroy(sb->s_bdi);
+#endif /* HAVE_BDI */
 
        /*
         * z_os will be NULL if there was an error in
index 6994a48bbccf255b967c1ac2fc80bbda20651bf7..8b9a832cb99711e5a7282b0f541983ea7e7c2388 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index f172314c9b76d26a1b68f1e76cfe64d946b4d824..b154c9c1af186bb60fa9ad2b8be70879684a3169 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index f48d9cc0337762a02591012400b651e14f1ede65..9408ad2910e25a72896d57ccceba930d94b84864 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index 4930111d431ecee9465ea76d5e9efe142751e9ec..8e9d3fd925d42bff368d386a25e2770dcec592a6 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index ea73f3388719a99d518931569a87f769ea4c1031..f083be715ba1e2def7f32f78f73f06c9719fc620 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index ff7fb618d68f623f47c808e246b4020aeeb180ff..e34da7240a35d2508d2332eff22497ebe0e8395e 100644 (file)
@@ -41,6 +41,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index a91f67edc83e59b18ec5e9427f8135e20b377f75..47b84a1906899006a3f84bd909447123c682cee8 100644 (file)
@@ -42,6 +42,7 @@ am__aclocal_m4_deps =  \
        $(top_srcdir)/config/always-no-unused-but-set-variable.m4 \
        $(top_srcdir)/config/kernel-bdev-block-device-operations.m4 \
        $(top_srcdir)/config/kernel-bdev-logical-size.m4 \
+       $(top_srcdir)/config/kernel-bdi-setup-and-register.m4 \
        $(top_srcdir)/config/kernel-bdi.m4 \
        $(top_srcdir)/config/kernel-bio-empty-barrier.m4 \
        $(top_srcdir)/config/kernel-bio-end-io-t-args.m4 \
index cf3c25c46b68a334209b57e36e33040cce969a32..6f18dca542883fba30f545e3b55e8e4f4ea26383 100644 (file)
@@ -21,6 +21,9 @@
 /* struct super_block has s_bdi */
 #undef HAVE_BDI
 
+/* bdi_setup_and_register() is available */
+#undef HAVE_BDI_SETUP_AND_REGISTER
+
 /* bio_empy_barrier() is defined */
 #undef HAVE_BIO_EMPTY_BARRIER