]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-linux-disable-readahad-20081108
authorMarc Dionne <marc.c.dionne@gmail.com>
Wed, 18 Mar 2009 12:57:09 +0000 (12:57 +0000)
committerDerrick Brashear <shadow@dementia.org>
Wed, 18 Mar 2009 12:57:09 +0000 (12:57 +0000)
LICENSE IPL10
FIXES 123604

The code has long contained a backing_dev_info structure, but it
was never attached to anything.  Initialize its use properly with
bdi_init, and attach it to i_mapping for every newly filled inode.
bdi_init and bdi_destroy are needed for proper initialization of
some percpu counters, otherwise we get some oopses.

(cherry picked from commit 18e78d91e78e541fce6c9295919946af0744aa7e)

acinclude.m4
src/afs/LINUX/osi_vfsops.c
src/afs/LINUX/osi_vnodeops.c
src/cf/linux-test4.m4

index 2a972a16dab1affcaf45c5b338fa02b60ef4fba1..ded36539cde7473c758a7fab82be0b5ebc196ff0 100644 (file)
@@ -716,6 +716,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
                  LINUX_HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN
                  LINUX_STRUCT_TASK_HAS_CRED
                  LINUX_KMEM_CACHE_INIT
+                LINUX_HAVE_BDI_INIT
                 LINUX_HAVE_KMEM_CACHE_T
                 LINUX_KMEM_CACHE_CREATE_TAKES_DTOR
                 LINUX_CONFIG_H_EXISTS
index c3e8d5455542237df81fa91d3c70f9f541f5b50d..e8e8986e8e5d6d25527f283268464a724478980a 100644 (file)
@@ -143,6 +143,9 @@ afs_read_super(struct super_block *sb, void *data, int silent)
     sb->s_blocksize_bits = 10;
     sb->s_magic = AFS_VFSMAGIC;
     sb->s_op = &afs_sops;      /* Super block (vfs) ops */
+#if defined(HAVE_BDI_INIT)
+    bdi_init(&afs_backing_dev_info);
+#endif
 #if defined(MAX_NON_LFS)
 #ifdef AFS_64BIT_CLIENT
 #if !defined(MAX_LFS_FILESIZE)
@@ -394,6 +397,9 @@ afs_put_super(struct super_block *sbp)
 #endif
 
     osi_linux_verify_alloced_memory();
+#if defined(HAVE_BDI_INIT)
+    bdi_destroy(&afs_backing_dev_info);
+#endif
     AFS_GUNLOCK();
 
     sbp->s_dev = 0;
index b599fa94cf0ed3cd9383c323bb2bca9cac5177be..42f9a9f32ac98fb51c197007f2fc03f54f918aba 100644 (file)
@@ -47,6 +47,7 @@ RCSID
 
 #if defined(AFS_LINUX26_ENV)
 #define UnlockPage(pp) unlock_page(pp)
+extern struct backing_dev_info afs_backing_dev_info;
 #endif
 
 extern struct vcache *afs_globalVp;
@@ -1929,6 +1930,7 @@ afs_fill_inode(struct inode *ip, struct vattr *vattr)
     if (vattr)
        vattr2inode(ip, vattr);
 
+    ip->i_mapping->backing_dev_info = &afs_backing_dev_info;
 /* Reset ops if symlink or directory. */
     if (S_ISREG(ip->i_mode)) {
        ip->i_op = &afs_file_iops;
index 5fc4c2bd80acd47d8673feba39811077149be47e..144eb50408bf0d98b0ed4bf2d13d1fddb146d29f 100644 (file)
@@ -1061,6 +1061,19 @@ AC_DEFUN([LINUX_SEMAPHORE_H_EXISTS], [
     AC_DEFINE([LINUX_SEMAPHORE_H], 1, [define if linux/semaphore.h exists])
   fi])
 
+AC_DEFUN([LINUX_HAVE_BDI_INIT], [
+  AC_MSG_CHECKING([for linux bdi_init()])
+  AC_CACHE_VAL([ac_cv_linux_bdi_init], [
+    AC_TRY_KBUILD(
+[#include <linux/backing-dev.h>],
+[bdi_init(NULL);],
+      ac_cv_linux_bdi_init=yes,
+      ac_cv_linux_bdi_init=no)])
+  AC_MSG_RESULT($ac_cv_linux_bdi_init)
+  if test "x$ac_cv_linux_bdi_init" = "xyes"; then
+    AC_DEFINE([HAVE_BDI_INIT], 1, [define if your kernel has a bdi_init()])
+  fi])
+
 AC_DEFUN([LINUX_HAVE_WRITE_BEGIN_AOP], [
   AC_MSG_CHECKING([for linux write_begin() address space op])
   AC_CACHE_VAL([ac_cv_linux_write_begin], [