diff options
author | Alasdair Kergon <agk@redhat.com> | 2010-08-17 19:25:05 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2010-08-17 19:25:05 +0000 |
commit | 22149572e8a05492316bf74dee681a3a948bd2b1 (patch) | |
tree | 72aadf89125169394805e364d59bba0c2a52195e /daemons/clvmd/lvm-functions.c | |
parent | 2d6fcbf67d131c7969bd60798b2bfe3cc2316205 (diff) | |
download | lvm2-22149572e8a05492316bf74dee681a3a948bd2b1.tar.gz lvm2-22149572e8a05492316bf74dee681a3a948bd2b1.tar.xz lvm2-22149572e8a05492316bf74dee681a3a948bd2b1.zip |
Use 'SINGLENODE' instead of 'dead' in clvmd singlenode messages.
Ignore snapshots when performing mirror recovery beneath an origin.
Pass LCK_ORIGIN_ONLY flag around cluster.
Add suspend_lv_origin and resume_lv_origin using LCK_ORIGIN_ONLY.
Diffstat (limited to 'daemons/clvmd/lvm-functions.c')
-rw-r--r-- | daemons/clvmd/lvm-functions.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/daemons/clvmd/lvm-functions.c b/daemons/clvmd/lvm-functions.c index 80555635..b8d9de71 100644 --- a/daemons/clvmd/lvm-functions.c +++ b/daemons/clvmd/lvm-functions.c @@ -122,12 +122,19 @@ static const char *decode_locking_cmd(unsigned char cmdl) static const char *decode_flags(unsigned char flags) { static char buf[128]; + int len; - sprintf(buf, "0x%x (%s%s%s%s)", flags, - flags & LCK_PARTIAL_MODE ? "PARTIAL_MODE " : "", - flags & LCK_MIRROR_NOSYNC_MODE ? "MIRROR_NOSYNC " : "", - flags & LCK_DMEVENTD_MONITOR_MODE ? "DMEVENTD_MONITOR " : "", - flags & LCK_CONVERT ? "CONVERT " : ""); + len = sprintf(buf, "0x%x ( %s%s%s%s%s)", flags, + flags & LCK_PARTIAL_MODE ? "PARTIAL_MODE|" : "", + flags & LCK_MIRROR_NOSYNC_MODE ? "MIRROR_NOSYNC|" : "", + flags & LCK_DMEVENTD_MONITOR_MODE ? "DMEVENTD_MONITOR|" : "", + flags & LCK_ORIGIN_ONLY_MODE ? "ORIGIN_ONLY|" : "", + flags & LCK_CONVERT ? "CONVERT|" : ""); + + if (len > 1) + buf[len - 2] = ' '; + else + buf[0] = '\0'; return buf; } @@ -350,13 +357,11 @@ static int do_activate_lv(char *resource, unsigned char lock_flags, int mode) } /* If it's suspended then resume it */ - // FIXME Set origin_only if (!lv_info_by_lvid(cmd, resource, 0, &lvi, 0, 0)) goto error; if (lvi.suspended) { memlock_inc(cmd); - // FIXME Set origin_only if (!lv_resume(cmd, resource, 0)) { memlock_dec(cmd); goto error; @@ -387,8 +392,7 @@ static int do_resume_lv(char *resource, unsigned char lock_flags) return 0; /* We don't need to do anything */ } - // FIXME Set origin_only - if (!lv_resume_if_active(cmd, resource, 0)) + if (!lv_resume_if_active(cmd, resource, (lock_flags & LCK_ORIGIN_ONLY_MODE) ? 1 : 0)) return EIO; return 0; @@ -399,6 +403,7 @@ static int do_suspend_lv(char *resource, unsigned char lock_flags) { int oldmode; struct lvinfo lvi; + unsigned origin_only = (lock_flags & LCK_ORIGIN_ONLY_MODE) ? 1 : 0; /* Is it open ? */ oldmode = get_current_lock(resource); @@ -408,12 +413,10 @@ static int do_suspend_lv(char *resource, unsigned char lock_flags) } /* Only suspend it if it exists */ - // FIXME Set origin_only - if (!lv_info_by_lvid(cmd, resource, 0, &lvi, 0, 0)) + if (!lv_info_by_lvid(cmd, resource, origin_only, &lvi, 0, 0)) return EIO; - // FIXME Set origin_only - if (lvi.exists && !lv_suspend_if_active(cmd, resource, 0)) + if (lvi.exists && !lv_suspend_if_active(cmd, resource, origin_only)) return EIO; return 0; @@ -558,6 +561,7 @@ int post_lock_lv(unsigned char command, unsigned char lock_flags, char *resource) { int status; + unsigned origin_only = (lock_flags & LCK_ORIGIN_ONLY_MODE) ? 1 : 0; /* Opposite of above, done on resume after a metadata update */ if ((command & (LCK_SCOPE_MASK | LCK_TYPE_MASK)) == LCK_LV_RESUME && @@ -574,8 +578,7 @@ int post_lock_lv(unsigned char command, unsigned char lock_flags, struct lvinfo lvi; pthread_mutex_lock(&lvm_lock); - // FIXME Set origin_only - status = lv_info_by_lvid(cmd, resource, 0, &lvi, 0, 0); + status = lv_info_by_lvid(cmd, resource, origin_only, &lvi, 0, 0); pthread_mutex_unlock(&lvm_lock); if (!status) return EIO; |