diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go index f0ac0a479..1745dbc37 100644 --- a/internal/rbd/controllerserver.go +++ b/internal/rbd/controllerserver.go @@ -881,9 +881,9 @@ func (cs *ControllerServer) checkErrAndUndoReserve( } if errors.Is(err, ErrImageNotFound) { - err = rbdVol.ensureImageCleanup(ctx) - if err != nil { - return nil, status.Error(codes.Internal, err.Error()) + notFoundErr := rbdVol.ensureImageCleanup(ctx) + if notFoundErr != nil { + return nil, status.Errorf(codes.Internal, "failed to cleanup image %q: %v", rbdVol, notFoundErr) } } else { // All errors other than ErrImageNotFound should return an error back to the caller @@ -1538,11 +1538,6 @@ func cleanUpImageAndSnapReservation(ctx context.Context, rbdSnap *rbdSnapshot, c } defer rbdVol.Destroy(ctx) - err = rbdVol.openIoctx() - if err != nil { - return status.Error(codes.Internal, err.Error()) - } - // cleanup the image from trash if the error is image not found. err = rbdVol.ensureImageCleanup(ctx) if err != nil { diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index 3b07d235d..3b72b7c4c 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -621,6 +621,11 @@ func isCephMgrSupported(ctx context.Context, clusterID string, err error) bool { // ensureImageCleanup finds image in trash and if found removes it // from trash. func (ri *rbdImage) ensureImageCleanup(ctx context.Context) error { + err := ri.openIoctx() + if err != nil { + return err + } + trashInfoList, err := librbd.GetTrashList(ri.ioctx) if err != nil { log.ErrorLog(ctx, "failed to list images in trash: %v", err)