summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc13-gcc-4.7-compat.patch')
-rw-r--r--sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc13-gcc-4.7-compat.patch51
1 files changed, 51 insertions, 0 deletions
diff --git a/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc13-gcc-4.7-compat.patch b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc13-gcc-4.7-compat.patch
new file mode 100644
index 000000000000..9f31ecc82307
--- /dev/null
+++ b/sys-fs/zfs-kmod/files/zfs-kmod-0.6.0_rc13-gcc-4.7-compat.patch
@@ -0,0 +1,51 @@
+From 37f000c5aa76613e644cf3e5b1ec7bd2df6f7451 Mon Sep 17 00:00:00 2001
+From: Ned Bass <bass6@llnl.gov>
+Date: Wed, 26 Dec 2012 14:56:41 -0800
+Subject: [PATCH] Fix gcc array subscript above bounds warning
+
+In a debug build, certain GCC versions flag an array bounds warning in
+the below code from dnode_sync.c
+
+ } else {
+ int i;
+ ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
+ /* the blkptrs we are losing better be unallocated */
+ for (i = dn->dn_next_nblkptr[txgoff];
+ i < dnp->dn_nblkptr; i++)
+ ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
+
+This usage is in fact safe, since the ASSERT ensures the index does
+not exceed to maximum possible number of block pointers. However gcc
+can't determine that the assignment 'i = dn->dn_next_nblkptr[txgoff];'
+falls within the array bounds so it issues a warning. To avoid this,
+initialize i to zero to make gcc happy but skip the elements before
+dn->dn_next_nblkptr[txgoff] in the loop body. Since a dnode contains
+at most 3 block pointers this overhead should be negligible.
+
+Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
+Closes #950
+---
+ module/zfs/dnode_sync.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/module/zfs/dnode_sync.c b/module/zfs/dnode_sync.c
+index af636dc..f2dda86 100644
+--- a/module/zfs/dnode_sync.c
++++ b/module/zfs/dnode_sync.c
+@@ -666,9 +666,10 @@
+ int i;
+ ASSERT(dn->dn_next_nblkptr[txgoff] < dnp->dn_nblkptr);
+ /* the blkptrs we are losing better be unallocated */
+- for (i = dn->dn_next_nblkptr[txgoff];
+- i < dnp->dn_nblkptr; i++)
+- ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
++ for (i = 0; i < dnp->dn_nblkptr; i++) {
++ if (i >= dn->dn_next_nblkptr[txgoff])
++ ASSERT(BP_IS_HOLE(&dnp->dn_blkptr[i]));
++ }
+ #endif
+ }
+ mutex_enter(&dn->dn_mtx);
+--
+1.7.10
+