mirror of
https://github.com/siderolabs/talos.git
synced 2025-12-12 13:01:14 +01:00
fix: fix "defer" leak in ResetUserDisks
Also, print error if we failed to close the device. Signed-off-by: Dmitriy Matrenichev <dmitry.matrenichev@siderolabs.com>
This commit is contained in:
parent
bfba3677b0
commit
638dc9128f
@ -1634,27 +1634,36 @@ func ResetSystemDisk(seq runtime.Sequence, data interface{}) (runtime.TaskExecut
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ResetUserDisks represents the task to reset the user disks.
|
// ResetUserDisks represents the task to reset the user disks.
|
||||||
func ResetUserDisks(seq runtime.Sequence, data interface{}) (runtime.TaskExecutionFunc, string) {
|
func ResetUserDisks(_ runtime.Sequence, data any) (runtime.TaskExecutionFunc, string) {
|
||||||
return func(ctx context.Context, logger *log.Logger, r runtime.Runtime) (err error) {
|
return func(ctx context.Context, logger *log.Logger, r runtime.Runtime) (err error) {
|
||||||
in, ok := data.(runtime.ResetOptions)
|
in, ok := data.(runtime.ResetOptions)
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("unexpected runtime data")
|
return fmt.Errorf("unexpected runtime data")
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, deviceName := range in.GetUserDisksToWipe() {
|
wipeDevice := func(deviceName string) error {
|
||||||
var dev *blockdevice.BlockDevice
|
dev, err := blockdevice.Open(deviceName)
|
||||||
|
|
||||||
dev, err = blockdevice.Open(deviceName)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
defer dev.Close() //nolint:errcheck
|
defer func() {
|
||||||
|
if closeErr := dev.Close(); closeErr != nil {
|
||||||
|
logger.Printf("failed to close device %s: %s", deviceName, closeErr)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
logger.Printf("wiping user disk %s", deviceName)
|
logger.Printf("wiping user disk %s", deviceName)
|
||||||
|
|
||||||
err = dev.FastWipe()
|
if err = dev.FastWipe(); err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, deviceName := range in.GetUserDisksToWipe() {
|
||||||
|
if err := wipeDevice(deviceName); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user