mark device faulty after parent fails to suspend
When an error is returned here, unlike the other error returns in the function, nothing is done to mark the added device as faulty or remove it. I have observed this causing future snapshot creations to continue to attempt to use the same ID (from the sequence) to create new devices and get blocked because the device already exists because it was not rolled back here. Hopefully fixes #5110 Signed-off-by: Jeremy Williams <ctrlaltdel121@gmail.com>
This commit is contained in:
parent
134f7a7370
commit
51a72f0492
@ -331,12 +331,6 @@ func (p *PoolDevice) CreateSnapshotDevice(ctx context.Context, deviceName string
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
// Save snapshot metadata and allocate new device ID
|
|
||||||
metaErr = p.metadata.AddDevice(ctx, snapInfo)
|
|
||||||
if metaErr != nil {
|
|
||||||
return metaErr
|
|
||||||
}
|
|
||||||
|
|
||||||
// The base device must be suspend before taking a snapshot to
|
// The base device must be suspend before taking a snapshot to
|
||||||
// avoid corruption.
|
// avoid corruption.
|
||||||
// https://github.com/torvalds/linux/blob/v5.7/Documentation/admin-guide/device-mapper/thin-provisioning.rst#internal-snapshots
|
// https://github.com/torvalds/linux/blob/v5.7/Documentation/admin-guide/device-mapper/thin-provisioning.rst#internal-snapshots
|
||||||
@ -354,6 +348,12 @@ func (p *PoolDevice) CreateSnapshotDevice(ctx context.Context, deviceName string
|
|||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save snapshot metadata and allocate new device ID
|
||||||
|
metaErr = p.metadata.AddDevice(ctx, snapInfo)
|
||||||
|
if metaErr != nil {
|
||||||
|
return metaErr
|
||||||
|
}
|
||||||
|
|
||||||
// Create thin device snapshot
|
// Create thin device snapshot
|
||||||
devErr = p.createSnapshot(ctx, baseInfo, snapInfo)
|
devErr = p.createSnapshot(ctx, baseInfo, snapInfo)
|
||||||
if devErr != nil {
|
if devErr != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user