Whamcloud - gitweb
LU-12477 ldiskfs: remove obsolete ext4 patches
[fs/lustre-release.git] / ldiskfs / kernel_patches / patches / sles11sp2 / ext4-mballoc-pa_free-mismatch.patch
diff --git a/ldiskfs/kernel_patches/patches/sles11sp2/ext4-mballoc-pa_free-mismatch.patch b/ldiskfs/kernel_patches/patches/sles11sp2/ext4-mballoc-pa_free-mismatch.patch
deleted file mode 100644 (file)
index c21573e..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-diff -r -u linux-stage.orig/fs/ext4/mballoc.c linux-stage/fs/ext4/mballoc.c
---- linux-stage.orig/fs/ext4/mballoc.c 2012-12-31 15:18:15.000000000 -0500
-+++ linux-stage/fs/ext4/mballoc.c      2012-12-31 15:23:38.000000000 -0500
-@@ -3643,6 +3643,7 @@
-       INIT_LIST_HEAD(&pa->pa_group_list);
-       pa->pa_deleted = 0;
-       pa->pa_type = MB_INODE_PA;
-+      pa->pa_error = 0;
-
-       mb_debug(1, "new inode pa %p: %llu/%u for %u\n", pa,
-                       pa->pa_pstart, pa->pa_len, pa->pa_lstart);
-@@ -3704,6 +3705,7 @@
-       INIT_LIST_HEAD(&pa->pa_group_list);
-       pa->pa_deleted = 0;
-       pa->pa_type = MB_GROUP_PA;
-+      pa->pa_error = 0;
-
-       mb_debug(1, "new group pa %p: %llu/%u for %u\n", pa,
-                       pa->pa_pstart, pa->pa_len, pa->pa_lstart);
-@@ -3764,7 +3766,9 @@
-       int err = 0;
-       int free = 0;
-
-+      assert_spin_locked(ext4_group_lock_ptr(sb, e4b->bd_group));
-       BUG_ON(pa->pa_deleted == 0);
-+      BUG_ON(pa->pa_inode == NULL);
-       ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit);
-       grp_blk_start = pa->pa_pstart - bit;
-       BUG_ON(group != e4b->bd_group && pa->pa_len != 0);
-@@ -3786,19 +3790,27 @@
-               mb_free_blocks(pa->pa_inode, e4b, bit, next - bit);
-               bit = next + 1;
-       }
--      if (free != pa->pa_free) {
--              ext4_msg(e4b->bd_sb, KERN_CRIT,
--                       "pa %p: logic %lu, phys. %lu, len %lu",
--                       pa, (unsigned long) pa->pa_lstart,
--                       (unsigned long) pa->pa_pstart,
--                       (unsigned long) pa->pa_len);
--              ext4_grp_locked_error(sb, group, 0, 0, "free %u, pa_free %u",
-+
-+      /* "free < pa->pa_free" means we maybe double alloc the same blocks,
-+       * otherwise maybe leave some free blocks unavailable, no need to BUG.*/
-+      if ((free > pa->pa_free && !pa->pa_error) || (free < pa->pa_free)) {
-+              ext4_error(sb, "pa free mismatch: [pa %p] "
-+                              "[phy %lu] [logic %lu] [len %u] [free %u] "
-+                              "[error %u] [inode %lu] [freed %u]", pa,
-+                              (unsigned long)pa->pa_pstart,
-+                              (unsigned long)pa->pa_lstart,
-+                              (unsigned)pa->pa_len, (unsigned)pa->pa_free,
-+                              (unsigned)pa->pa_error, pa->pa_inode->i_ino,
-+                              free);
-+              ext4_grp_locked_error(sb, group, 0, 0,
-+                                      "free %u, pa_free %u",
-                                       free, pa->pa_free);
-               /*
-                * pa is already deleted so we use the value obtained
-                * from the bitmap and continue.
-                */
-       }
-+      BUG_ON(pa->pa_free != free);
-       atomic_add(free, &sbi->s_mb_discarded);
-
-       return err;
-@@ -4542,6 +4555,25 @@
-               ac->ac_b_ex.fe_len = 0;
-               ar->len = 0;
-               ext4_mb_show_ac(ac);
-+              if (ac->ac_pa) {
-+                      struct ext4_prealloc_space *pa = ac->ac_pa;
-+
-+                      /* We can not make sure whether the bitmap has
-+                      * been updated or not when fail case. So can
-+                      * not revert pa_free back, just mark pa_error*/
-+                      pa->pa_error++;
-+                      ext4_error(sb,
-+                              "Updating bitmap error: [err %d] "
-+                              "[pa %p] [phy %lu] [logic %lu] "
-+                              "[len %u] [free %u] [error %u] "
-+                              "[inode %lu]", *errp, pa,
-+                              (unsigned long)pa->pa_pstart,
-+                              (unsigned long)pa->pa_lstart,
-+                              (unsigned)pa->pa_len,
-+                              (unsigned)pa->pa_free,
-+                              (unsigned)pa->pa_error,
-+                              pa->pa_inode ? pa->pa_inode->i_ino : 0);
-+              }
-       }
-       ext4_mb_release_context(ac);
- out:
-diff -r -u linux-stage.orig/fs/ext4/mballoc.h linux-stage/fs/ext4/mballoc.h
---- linux-stage.orig/fs/ext4/mballoc.h 2012-12-31 15:18:15.000000000 -0500
-+++ linux-stage/fs/ext4/mballoc.h      2012-12-31 15:19:22.000000000 -0500
-@@ -19,6 +19,7 @@
- #include <linux/seq_file.h>
- #include <linux/blkdev.h>
- #include <linux/mutex.h>
-+#include <linux/genhd.h>
- #include "ext4_jbd2.h"
- #include "ext4.h"
-
-@@ -129,6 +130,7 @@
-       ext4_grpblk_t           pa_free;        /* how many blocks are free */
-       unsigned short          pa_type;        /* pa type. inode or group */
-       spinlock_t              *pa_obj_lock;
-+      unsigned short          pa_error;
-       struct inode            *pa_inode;      /* hack, for history only */
- };
-