summaryrefslogtreecommitdiffstats
path: root/lib/metadata/snapshot_manip.c
diff options
context:
space:
mode:
authorMilan Broz <mbroz@redhat.com>2009-05-13 21:25:45 +0000
committerMilan Broz <mbroz@redhat.com>2009-05-13 21:25:45 +0000
commitb14c5af76d0c3f6017f825981b9749324ed70fd8 (patch)
treef0bedbb91e6398d0801b65dc87148341cd0df1e7 /lib/metadata/snapshot_manip.c
parent0b706ac672bb86437b9361a9d53f6aae02f49039 (diff)
downloadlvm2-b14c5af76d0c3f6017f825981b9749324ed70fd8.tar.gz
lvm2-b14c5af76d0c3f6017f825981b9749324ed70fd8.tar.xz
lvm2-b14c5af76d0c3f6017f825981b9749324ed70fd8.zip
Fix lv_is_visible to handle virtual origin.
Snapshot is visible if its origin is marked visible, or if the origin is virtual.
Diffstat (limited to 'lib/metadata/snapshot_manip.c')
-rw-r--r--lib/metadata/snapshot_manip.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/metadata/snapshot_manip.c b/lib/metadata/snapshot_manip.c
index e186dffb..0509fe0a 100644
--- a/lib/metadata/snapshot_manip.c
+++ b/lib/metadata/snapshot_manip.c
@@ -30,8 +30,15 @@ int lv_is_cow(const struct logical_volume *lv)
int lv_is_visible(const struct logical_volume *lv)
{
- if (lv_is_cow(lv))
- return lv_is_visible(find_cow(lv)->lv);
+ if (lv->status & SNAPSHOT)
+ return 0;
+
+ if (lv_is_cow(lv)) {
+ if (lv_is_virtual_origin(origin_from_cow(lv)))
+ return 1;
+
+ return lv_is_visible(origin_from_cow(lv));
+ }
return lv->status & VISIBLE_LV ? 1 : 0;
}