[linux] 02/04: gfs2: Make statistics unsigned, suitable for use with do_div()

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Wed Aug 26 01:02:59 UTC 2015


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch master
in repository linux.

commit d477438be7b784ef964cf012e0159452a244637d
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Wed Aug 26 01:43:52 2015 +0100

    gfs2: Make statistics unsigned, suitable for use with do_div()
    
    Fixes FTBFS on mips,mipsel,m68k.
---
 debian/changelog                                   |   2 +
 ...tatistics-unsigned-suitable-for-use-with-.patch | 128 +++++++++++++++++++++
 debian/patches/series                              |   2 +
 3 files changed, 132 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 856ddca..7b2a8a8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,6 +3,8 @@ linux (4.2~rc8-1~exp2) UNRELEASED; urgency=medium
   * Remove all support for ia64 (Closes: #679545, #691576, #728706)
   * [s390x] Compile with gcc-4.9 (Closes: #796845)
   * linux-source: Depend on xz-utils, not bzip2 (Closes: #796940)
+  * gfs2: Make statistics unsigned, suitable for use with do_div()
+    (fixes FTBFS on mips,mipsel,m68k)
 
  -- Ben Hutchings <ben at decadent.org.uk>  Tue, 25 Aug 2015 18:50:57 +0100
 
diff --git a/debian/patches/bugfix/all/gfs2-make-statistics-unsigned-suitable-for-use-with-.patch b/debian/patches/bugfix/all/gfs2-make-statistics-unsigned-suitable-for-use-with-.patch
new file mode 100644
index 0000000..084de2d
--- /dev/null
+++ b/debian/patches/bugfix/all/gfs2-make-statistics-unsigned-suitable-for-use-with-.patch
@@ -0,0 +1,128 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Wed, 26 Aug 2015 00:44:21 +0100
+Subject: gfs2: Make statistics unsigned, suitable for use with do_div()
+Forwarded: http://mid.gmane.org/1440548464.26026.9.camel@decadent.org.uk
+
+None of these statistics can meaningfully be negative, and the
+numerator for do_div() must have the type u64.  The generic
+implementation of do_div() used on some 32-bit architectures asserts
+that, resulting in a compiler error in gfs2_rgrp_congested().
+
+Fixes: 0166b197c2ed ("GFS2: Average in only non-zero round-trip times ...")
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+---
+ fs/gfs2/glock.c      | 22 +++++++++++-----------
+ fs/gfs2/incore.h     |  2 +-
+ fs/gfs2/rgrp.c       |  8 ++++----
+ fs/gfs2/trace_gfs2.h | 16 ++++++++--------
+ 4 files changed, 24 insertions(+), 24 deletions(-)
+
+diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
+index a38e38f..1b6aebe 100644
+--- a/fs/gfs2/glock.c
++++ b/fs/gfs2/glock.c
+@@ -1733,17 +1733,17 @@ static int gfs2_glstats_seq_show(struct seq_file *seq, void *iter_ptr)
+ {
+ 	struct gfs2_glock *gl = iter_ptr;
+ 
+-	seq_printf(seq, "G: n:%u/%llx rtt:%lld/%lld rttb:%lld/%lld irt:%lld/%lld dcnt: %lld qcnt: %lld\n",
++	seq_printf(seq, "G: n:%u/%llx rtt:%llu/%llu rttb:%llu/%llu irt:%llu/%llu dcnt: %llu qcnt: %llu\n",
+ 		   gl->gl_name.ln_type,
+ 		   (unsigned long long)gl->gl_name.ln_number,
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_SRTT],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_SRTTVAR],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_SRTTB],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_SRTTVARB],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_SIRT],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_SIRTVAR],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_DCOUNT],
+-		   (long long)gl->gl_stats.stats[GFS2_LKS_QCOUNT]);
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTT],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTTVAR],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTTB],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTTVARB],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SIRT],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SIRTVAR],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_DCOUNT],
++		   (unsigned long long)gl->gl_stats.stats[GFS2_LKS_QCOUNT]);
+ 	return 0;
+ }
+ 
+@@ -1780,7 +1780,7 @@ static int gfs2_sbstats_seq_show(struct seq_file *seq, void *iter_ptr)
+ 	struct gfs2_sbd *sdp = gi->sdp;
+ 	unsigned index = gi->hash >> 3;
+ 	unsigned subindex = gi->hash & 0x07;
+-	s64 value;
++	u64 value;
+ 	int i;
+ 
+ 	if (index == 0 && subindex != 0)
+@@ -1796,7 +1796,7 @@ static int gfs2_sbstats_seq_show(struct seq_file *seq, void *iter_ptr)
+ 		} else {
+ 			value = lkstats->lkstats[index - 1].stats[subindex];
+ 		}
+-		seq_printf(seq, " %15lld", (long long)value);
++		seq_printf(seq, " %15llu", (long long)value);
+ 	}
+ 	seq_putc(seq, '\n');
+ 	return 0;
+diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h
+index a1ec7c2..7647e31 100644
+--- a/fs/gfs2/incore.h
++++ b/fs/gfs2/incore.h
+@@ -241,7 +241,7 @@ enum {
+ };
+ 
+ struct gfs2_lkstats {
+-	s64 stats[GFS2_NR_LKSTATS];
++	u64 stats[GFS2_NR_LKSTATS];
+ };
+ 
+ enum {
+diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c
+index c6c6232..2884f6f 100644
+--- a/fs/gfs2/rgrp.c
++++ b/fs/gfs2/rgrp.c
+@@ -1862,11 +1862,11 @@ static bool gfs2_rgrp_congested(const struct gfs2_rgrpd *rgd, int loops)
+ 	const struct gfs2_glock *gl = rgd->rd_gl;
+ 	const struct gfs2_sbd *sdp = gl->gl_sbd;
+ 	struct gfs2_lkstats *st;
+-	s64 r_dcount, l_dcount;
+-	s64 l_srttb, a_srttb = 0;
++	u64 r_dcount, l_dcount;
++	u64 l_srttb, a_srttb = 0;
+ 	s64 srttb_diff;
+-	s64 sqr_diff;
+-	s64 var;
++	u64 sqr_diff;
++	u64 var;
+ 	int cpu, nonzero = 0;
+ 
+ 	preempt_disable();
+diff --git a/fs/gfs2/trace_gfs2.h b/fs/gfs2/trace_gfs2.h
+index 20c007d..03a7049 100644
+--- a/fs/gfs2/trace_gfs2.h
++++ b/fs/gfs2/trace_gfs2.h
+@@ -267,14 +267,14 @@ TRACE_EVENT(gfs2_glock_lock_time,
+ 		__field(	int,	status		)
+ 		__field(	char,	flags		)
+ 		__field(	s64,	tdiff		)
+-		__field(	s64,	srtt		)
+-		__field(	s64,	srttvar		)
+-		__field(	s64,	srttb		)
+-		__field(	s64,	srttvarb	)
+-		__field(	s64,	sirt		)
+-		__field(	s64,	sirtvar		)
+-		__field(	s64,	dcount		)
+-		__field(	s64,	qcount		)
++		__field(	u64,	srtt		)
++		__field(	u64,	srttvar		)
++		__field(	u64,	srttb		)
++		__field(	u64,	srttvarb	)
++		__field(	u64,	sirt		)
++		__field(	u64,	sirtvar		)
++		__field(	u64,	dcount		)
++		__field(	u64,	qcount		)
+ 	),
+ 
+ 	TP_fast_assign(
diff --git a/debian/patches/series b/debian/patches/series
index ec98c24..abc5a43 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -85,3 +85,5 @@ features/all/grsecurity/grsecurity-kconfig.patch
 # Disabled until we add code into the grsecurity/ directory
 #features/all/grsecurity/grsecurity-kbuild.patch
 features/all/grsecurity/grkernsec_perf_harden.patch
+
+bugfix/all/gfs2-make-statistics-unsigned-suitable-for-use-with-.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list