mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
vgcreate: close exclusive fd after pvcreate
When vgcreate does an automatic pvcreate, it opens the dev with O_EXCL to ensure no other subsystem is using the device. This exclusive fd remained in bcache and prevented activation parts of lvm from using the dev. This appeared with vgcreate of a sanlock VG because of the unique combination where the dev is not yet a PV, so pvcreate is needed, and the vgcreate also creates and activates an internal LV for sanlock. Fix this by closing the exclusive fd after it's used by pvcreate so that it won't interfere with other bits of lvm that may try to use the device.
This commit is contained in:
parent
aa464aa2f6
commit
763219611c
@ -1185,7 +1185,7 @@ bool dev_write_bytes(struct device *dev, uint64_t start, size_t len, void *data)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(dev->flags & DEV_BCACHE_WRITE)) {
|
||||
if (_in_bcache(dev) && !(dev->flags & DEV_BCACHE_WRITE)) {
|
||||
/* FIXME: avoid tossing out bcache blocks just to replace fd. */
|
||||
log_debug("Close and reopen to write %s", dev_name(dev));
|
||||
bcache_invalidate_fd(scan_bcache, dev->bcache_fd);
|
||||
@ -1231,7 +1231,7 @@ bool dev_write_zeros(struct device *dev, uint64_t start, size_t len)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(dev->flags & DEV_BCACHE_WRITE)) {
|
||||
if (_in_bcache(dev) && !(dev->flags & DEV_BCACHE_WRITE)) {
|
||||
/* FIXME: avoid tossing out bcache blocks just to replace fd. */
|
||||
log_debug("Close and reopen to write %s", dev_name(dev));
|
||||
bcache_invalidate_fd(scan_bcache, dev->bcache_fd);
|
||||
@ -1277,7 +1277,7 @@ bool dev_set_bytes(struct device *dev, uint64_t start, size_t len, uint8_t val)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(dev->flags & DEV_BCACHE_WRITE)) {
|
||||
if (_in_bcache(dev) && !(dev->flags & DEV_BCACHE_WRITE)) {
|
||||
/* FIXME: avoid tossing out bcache blocks just to replace fd. */
|
||||
log_debug("Close and reopen to write %s", dev_name(dev));
|
||||
bcache_invalidate_fd(scan_bcache, dev->bcache_fd);
|
||||
|
@ -5782,6 +5782,13 @@ do_command:
|
||||
pd->name);
|
||||
}
|
||||
|
||||
/*
|
||||
* Don't keep devs open excl in bcache because the excl will prevent
|
||||
* using that dev elsewhere.
|
||||
*/
|
||||
dm_list_iterate_items(devl, &rescan_devs)
|
||||
label_scan_invalidate(devl->dev);
|
||||
|
||||
dm_list_iterate_items(pd, &pp->arg_fail)
|
||||
log_debug("%s: command failed for %s.",
|
||||
cmd->command->name, pd->name);
|
||||
|
Loading…
Reference in New Issue
Block a user