1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-22 17:35:59 +03:00
lvm2/lib
Jonathan Earl Brassow 6d0aa801a0 Fix for bug 733114.
When an image is split from a 2-way mirror, the original mirror is converted to
a linear device.  To do this, the top "layer" must be removed.  The segments
are transferred from the sub-lv to the top-level LV and the link is severed.
The former sub-lv - having its segments transferred - now contains a temporary
error target.

When the original LV is resumed, the old sub-lv that now contains an error
segment is activated and scanned.  This is what causes the I/O error messages.
There are three ways to fix this problem:

1) Do not set the sub-lv which contains the error target as "visible" before
suspending the original LV.  This way, when the original is resumed, the sub-lv
device node is not created and it is not scanned - avoiding the error messages.
 The problem with this approach is that if the machine crashes after the
resume, it leaves the *hidden* LV in place and the user has a more difficult
time noticing that it needs to be cleaned up.  Thus, this type of processing is
frowned upon.

2) Do like _remove_mirror_images does and suspend the original, then suspend
the sub-lv (the error target), then resume the sub-lv, and finally resume the
original LV.  This seems like extra pointless operations to me, but it does not
produce the error message (although, I'm not sure why) and it allows us to
leave the visible flag in place.

3) Flag the sub-lv (error target) with a "do not scan" flag.  This seems like
the cleanest approach, but I have been unable to find the method for doing
this.  LVs get tagged in such a way by _get_udev_flags, but in this case the
resume of the original LV also resumes the error target LV without running it
through _get_udev_flags (likely because they are no longer linked).  Could
there be something wrong in resume_lv?

Option #2 was chosen to fix this bug, but it seems like more of a workaround
for now.
2011-09-13 13:59:19 +00:00
..
activate Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
cache Use size_t return type 2011-09-01 10:25:22 +00:00
commands Add missing 'static' for local function 2011-09-02 12:38:43 +00:00
config Add a new 'thin_pool' output field to 'lvs. 2011-09-09 00:54:49 +00:00
datastruct Revert the #include changes. Need to fix this at the #include site for now, and 2011-07-18 14:34:33 +00:00
device Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
display Fix some compile warnings on RHEL5 2011-03-01 20:17:56 +00:00
error Add lv_activate_opts structure 2011-06-17 14:14:19 +00:00
filters Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
format1 lvcreate parsing for thin provisioning. 2011-09-06 00:26:42 +00:00
format_pool lvcreate parsing for thin provisioning. 2011-09-06 00:26:42 +00:00
format_text lvcreate/remove thin_pool and thin volumes (--driverloaded n only) 2011-09-08 16:41:18 +00:00
freeseg Replace malloc with zalloc when creating segment_type's 2011-03-25 21:59:42 +00:00
label Report sector containing label in verbose message. 2011-06-01 15:30:36 +00:00
locking Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
log Trivial, add void to ignore dm_snprinf result 2011-08-11 19:21:42 +00:00
metadata Fix for bug 733114. 2011-09-13 13:59:19 +00:00
mirror Replace const usage of dm_config_find_node with more appropriate value-lookup 2011-08-31 15:19:19 +00:00
misc tdata->tpool 2011-09-06 15:38:44 +00:00
mm Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
raid Replace const usage of dm_config_find_node with more appropriate value-lookup 2011-08-31 15:19:19 +00:00
replicator Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
report Add a new 'thin_pool' output field to 'lvs. 2011-09-09 00:54:49 +00:00
snapshot Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
striped Replace const usage of dm_config_find_node with more appropriate value-lookup 2011-08-31 15:19:19 +00:00
thin lvcreate/remove thin_pool and thin volumes (--driverloaded n only) 2011-09-08 16:41:18 +00:00
unknown Move the core of the lib/config/config.c functionality into libdevmapper, 2011-08-30 14:55:15 +00:00
uuid Revert the #include changes. Need to fix this at the #include site for now, and 2011-07-18 14:34:33 +00:00
zero Add lv_activate_opts structure 2011-06-17 14:14:19 +00:00
Makefile.in add thin_manip.c like the other manip files 2011-09-06 19:25:42 +00:00