diff options
author | mwilck@arcor.de <mwilck@arcor.de> | 2013-07-18 20:48:59 +0200 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-07-22 16:56:32 +1000 |
commit | 35c3606df71e50859072e248489f2469f3c8edd6 (patch) | |
tree | 2ba6033126fe5704240c5251a38b437bb1818999 /super-ddf.c | |
parent | 57666a41b22b6fa6da6b9de1098899601c7ccad3 (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.c | 12 |
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 |