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:
Dmitriy Matrenichev 2023-02-28 17:26:00 +03:00
parent bfba3677b0
commit 638dc9128f
No known key found for this signature in database
GPG Key ID: D3363CF894E68892

View File

@ -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
} }
} }