summaryrefslogtreecommitdiff
path: root/super-ddf.c
diff options
context:
space:
mode:
authormwilck@arcor.de <mwilck@arcor.de>2013-07-18 20:48:59 +0200
committerNeilBrown <neilb@suse.de>2013-07-22 16:56:32 +1000
commit35c3606df71e50859072e248489f2469f3c8edd6 (patch)
tree2ba6033126fe5704240c5251a38b437bb1818999 /super-ddf.c
parent57666a41b22b6fa6da6b9de1098899601c7ccad3 (diff)
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 <neilb@suse.de>
Diffstat (limited to 'super-ddf.c')
-rw-r--r--super-ddf.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/super-ddf.c b/super-ddf.c
index a3799b81..e5007b94 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