]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
linux bdi allocate memory
authorDerrick Brashear <shadow@dementia.org>
Tue, 16 Feb 2010 18:10:09 +0000 (13:10 -0500)
committerDerrick Brashear <shadow@dementia.org>
Wed, 3 Mar 2010 16:26:32 +0000 (08:26 -0800)
allocate bdi with osi_Alloc (and free with osi_Free)
seems to fix an oops

FIXES 126514

Change-Id: I667391710c5fd2b6712117471247f1cd7c20aa9b
Reviewed-on: http://gerrit.openafs.org/1332
Reviewed-by: Simon Wilkinson <sxw@inf.ed.ac.uk>
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
(cherry picked from commit 8f1e1199a2ef65ac0c5f00dcb30aeb8114c95551)
Reviewed-on: http://gerrit.openafs.org/1497

src/afs/LINUX/osi_vfsops.c
src/afs/LINUX/osi_vnodeops.c

index 5af9fd41646ea09168570037b3facbf2580e497a..abb15e6f144caff23da0f1620691f1bdd35a8b35 100644 (file)
@@ -101,9 +101,7 @@ struct file_system_type afs_fs_type = {
 #endif
 
 #if defined(AFS_LINUX26_ENV)
-struct backing_dev_info afs_backing_dev_info = {
-    .ra_pages          = 0, /* disable readahead, afs does prefetch */
-};
+struct backing_dev_info *afs_backing_dev_info;
 
 int
 afs_fill_super(struct super_block *sb, void *data, int silent)
@@ -142,13 +140,17 @@ 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 */
+    /* used for inodes backing_dev_info field, also */
+    afs_backing_dev_info = osi_Alloc(sizeof(struct backing_dev_info));
 #if defined(HAVE_BDI_INIT)
-    bdi_init(&afs_backing_dev_info);
+    bdi_init(afs_backing_dev_info);
 #endif
+    afs_backing_dev_info->name = "openafs";
+    afs_backing_dev_info->ra_pages = 0;
 #if defined (STRUCT_SUPER_BLOCK_HAS_S_BDI)
-    sb->s_bdi = &afs_backing_dev_info;
+    sb->s_bdi = afs_backing_dev_info;
     /* The name specified here will appear in the flushing thread name - flush-afs */
-    bdi_register(&afs_backing_dev_info, NULL, "afs");
+    bdi_register(afs_backing_dev_info, NULL, "afs");
 #endif
 #if defined(MAX_NON_LFS)
 #ifdef AFS_64BIT_CLIENT
@@ -377,8 +379,9 @@ afs_put_super(struct super_block *sbp)
 
     osi_linux_verify_alloced_memory();
 #if defined(HAVE_BDI_INIT)
-    bdi_destroy(&afs_backing_dev_info);
+    bdi_destroy(afs_backing_dev_info);
 #endif
+    osi_Free(afs_backing_dev_info, sizeof(struct backing_dev_info));
     AFS_GUNLOCK();
 
     sbp->s_dev = 0;
index f661ecd0607691195c38c6fcc0bd5fe46b257999..6a7355c485ad12cc0a9246ea5d3e659aa0553a3d 100644 (file)
@@ -49,7 +49,7 @@
 
 #if defined(AFS_LINUX26_ENV)
 #define UnlockPage(pp) unlock_page(pp)
-extern struct backing_dev_info afs_backing_dev_info;
+extern struct backing_dev_info *afs_backing_dev_info;
 #if !defined(WRITEPAGE_ACTIVATE)
 #define WRITEPAGE_ACTIVATE AOP_WRITEPAGE_ACTIVATE
 #endif
@@ -2002,7 +2002,7 @@ afs_fill_inode(struct inode *ip, struct vattr *vattr)
        vattr2inode(ip, vattr);
 
 #if defined(AFS_LINUX26_ENV)
-    ip->i_mapping->backing_dev_info = &afs_backing_dev_info;
+    ip->i_mapping->backing_dev_info = afs_backing_dev_info;
 #endif
 /* Reset ops if symlink or directory. */
     if (S_ISREG(ip->i_mode)) {