Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/cmd/dmsetup/dmsetup.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ func RemoveCmd() cli.Command {
Usage: "Remove the device mapper device with the given name: remove --force --deferred <device name>",
Action: func(c *cli.Context) {
if err := remove(c); err != nil {
logrus.WithError(err).Fatalf("Failed to create device %v with table %v", c.Args().First(), c.String("table"))
logrus.WithError(err).Fatalf("Failed to remove device mapper device %v", c.Args().First())
}
},
}
Expand Down
45 changes: 43 additions & 2 deletions pkg/initiator/initiator.go
Original file line number Diff line number Diff line change
Expand Up @@ -1227,8 +1227,49 @@ func (i *Initiator) removeLinearDmDevice(force, deferred bool) error {
return err
}

i.logger.Info("Removing linear dm device")
return util.DmsetupRemove(i.Name, force, deferred, i.executor)
i.logger.Infof("Removing linear dm device %v", dmDevPath)
if err := util.DmsetupRemove(dmDevPath, force, deferred, i.executor); err != nil {
i.logger.WithError(err).Debugf("Failed to remove linear dm device: %v", dmDevPath)
if isRemoveDmDevNotFoundError(err) {
return nil
}
return err
Comment on lines +1232 to +1236
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
i.logger.WithError(err).Debugf("Failed to remove linear dm device: %v", dmDevPath)
if isRemoveDmDevNotFoundError(err) {
return nil
}
return err
if isRemoveDmDevNotFoundError(err) {
return nil
}
i.logger.WithError(err).Errorf("Failed to remove linear dm device %v", dmDevPath)
return err

}

// Encrypted volume will create another dm device with "-encrypted" suffix,
// and this dm device will block the removal of the linear dm device until it's removed.
// So we need to remove the encrypted dm device after the linear dm device,
encryptedDmDevPath := fmt.Sprintf("%s-encrypted", dmDevPath)
isEncryptedDmDevExist := true
if _, err := os.Stat(encryptedDmDevPath); err != nil {
if !os.IsNotExist(err) {
return err
}
isEncryptedDmDevExist = false
}
if isEncryptedDmDevExist {
i.logger.Infof("Removing encrypted dm device %v", encryptedDmDevPath)
if err := util.DmsetupRemove(encryptedDmDevPath, true, true, i.executor); err != nil {
i.logger.WithError(err).Debugf("Failed to remove encrypted dm device: %s", encryptedDmDevPath)
if isRemoveDmDevNotFoundError(err) {
return nil
}
return err
}
}
Comment thread
mantissahz marked this conversation as resolved.

return nil
}

func isRemoveDmDevNotFoundError(err error) bool {
if err == nil {
return false
}

errMsg := strings.ToLower(err.Error())
return strings.Contains(errMsg, "no such device or address") ||
strings.Contains(errMsg, "not found") ||
strings.Contains(errMsg, "no such file or directory")
}

func (i *Initiator) createLinearDmDevice() error {
Expand Down
3 changes: 2 additions & 1 deletion pkg/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ const (
ShallowCopyStateComplete = "complete"
ShallowCopyStateError = "error"

ExecuteTimeout = 180 * time.Second
ExecuteShortTimeout = 5 * time.Second
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it enough? Why not use ExecuteTimeout?

ExecuteTimeout = 180 * time.Second
)

const (
Expand Down
2 changes: 1 addition & 1 deletion pkg/util/dmsetup.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func DmsetupRemove(dmDeviceName string, force, deferred bool, executor *commonns
if deferred {
opts = append(opts, "--deferred")
}
_, err := executor.Execute(nil, dmsetupBinary, opts, types.ExecuteTimeout)
_, err := executor.Execute(nil, dmsetupBinary, opts, types.ExecuteShortTimeout)
return err
}

Expand Down
Loading