From a40dcece9fb6b70c6bb7d28ecadcf99660517ba9 Mon Sep 17 00:00:00 2001 From: Joe Gorse Date: Tue, 16 May 2017 07:29:30 +0000 Subject: [PATCH] LINUX: Switch to new bdi api for 4.12. super_setup_bdi() dynamically allocates backing_dev_info structures for filesystems and cleans them up on superblock destruction. Appears with Linux commit fca39346a55bb7196888ffc77d9e3557340d1d0b Author: Jan Kara Date: Wed Apr 12 12:24:28 2017 +0200 Reviewed-on: https://gerrit.openafs.org/12614 Tested-by: BuildBot Reviewed-by: Benjamin Kaduk (cherry picked from commit 63e530e7df0b8013bcc4421b0bba558d4f1d2d57) Change-Id: I48a49ee8852bf842c24e7df0609fe2184bf45d90 Reviewed-on: https://gerrit.openafs.org/12626 Tested-by: Stephan Wiesand Reviewed-by: Benjamin Kaduk Reviewed-by: Stephan Wiesand --- acinclude.m4 | 4 ++++ src/afs/LINUX/osi_vfsops.c | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/acinclude.m4 b/acinclude.m4 index 464f356cb..ee40b4109 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -944,6 +944,10 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*) AC_CHECK_LINUX_FUNC([bdi_init], [#include ], [bdi_init(NULL);]) + AC_CHECK_LINUX_FUNC([super_setup_bdi], + [#include ], + [struct super_block *sb; + super_setup_bdi(sb);]) AC_CHECK_LINUX_FUNC([PageChecked], [#include #include ], diff --git a/src/afs/LINUX/osi_vfsops.c b/src/afs/LINUX/osi_vfsops.c index c2226684b..e14934139 100644 --- a/src/afs/LINUX/osi_vfsops.c +++ b/src/afs/LINUX/osi_vfsops.c @@ -113,7 +113,13 @@ afs_fill_super(struct super_block *sb, void *data, int silent) #if defined(STRUCT_SUPER_BLOCK_HAS_S_D_OP) sb->s_d_op = &afs_dentry_operations; #endif - +#if defined(HAVE_LINUX_SUPER_SETUP_BDI) + code = super_setup_bdi(sb); + if (code) + goto out; + sb->s_bdi->name = "openafs"; + sb->s_bdi->ra_pages = 32; +#else /* used for inodes backing_dev_info field, also */ afs_backing_dev_info = kmalloc(sizeof(struct backing_dev_info), GFP_NOFS); memset(afs_backing_dev_info, 0, sizeof(struct backing_dev_info)); @@ -132,6 +138,7 @@ afs_fill_super(struct super_block *sb, void *data, int silent) /* The name specified here will appear in the flushing thread name - flush-afs */ bdi_register(afs_backing_dev_info, NULL, "afs"); #endif +#endif /* HAVE_LINUX_SUPER_SETUP_BDI */ #if !defined(AFS_NONFSTRANS) sb->s_export_op = &afs_export_ops; #endif @@ -158,7 +165,9 @@ out: if (bdi_init_done) bdi_destroy(afs_backing_dev_info); #endif +#if !defined(HAVE_LINUX_SUPER_SETUP_BDI) kfree(afs_backing_dev_info); +#endif module_put(THIS_MODULE); } -- 2.39.5