From 35c3606df71e50859072e248489f2469f3c8edd6 Mon Sep 17 00:00:00 2001 From: "mwilck@arcor.de" Date: Thu, 18 Jul 2013 20:48:59 +0200 Subject: [PATCH] DDF: increase seq number in ddf_set_updates_pending Increase seq number only when there's actually a metadata change. This is better then increasing it at every write. This also fixes another endianness bug. Signed-off-by: NeilBrown --- super-ddf.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/super-ddf.c b/super-ddf.c index a3799b8..e5007b9 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -464,8 +464,14 @@ static void pr_state(struct ddf_super *ddf, const char *msg) static void pr_state(const struct ddf_super *ddf, const char *msg) {} #endif -#define ddf_set_updates_pending(x) \ - do { (x)->updates_pending = 1; pr_state(x, __func__); } while (0) +static void _ddf_set_updates_pending(struct ddf_super *ddf, const char *func) +{ + ddf->updates_pending = 1; + ddf->active->seq = __cpu_to_be32((__be32_to_cpu(ddf->active->seq)+1)); + pr_state(ddf, func); +} + +#define ddf_set_updates_pending(x) _ddf_set_updates_pending((x), __func__) static unsigned int get_pd_index_from_refnum(const struct vcl *vc, __u32 refnum, unsigned int nmax, @@ -2867,7 +2873,7 @@ static int __write_init_super_ddf(struct supertype *st) } memset(null_aligned, 0xff, NULL_CONF_SZ); - seq = ddf->active->seq + 1; + seq = ddf->active->seq; /* try to write updated metadata, * if we catch a failure move on to the next disk