diff --git a/internal/rbd/controllerserver.go b/internal/rbd/controllerserver.go index 86a880505..6c3edcede 100644 --- a/internal/rbd/controllerserver.go +++ b/internal/rbd/controllerserver.go @@ -547,6 +547,16 @@ func (cs *ControllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVol } defer cs.VolumeLocks.Release(rbdVol.RequestName) + found, _, err := rbdStatus(ctx, rbdVol, cr) + if err != nil { + klog.Errorf(util.Log(ctx, "failed getting information for image (%s): (%s)"), rbdVol, err) + return nil, status.Error(codes.Internal, err.Error()) + } + if found { + klog.Errorf(util.Log(ctx, "rbd %s is still being used"), rbdVol) + return nil, status.Errorf(codes.Internal, "rbd %s is still being used", rbdVol.RbdImageName) + } + // Deleting rbd image klog.V(4).Infof(util.Log(ctx, "deleting image %s"), rbdVol.RbdImageName) if err = deleteImage(ctx, rbdVol, cr); err != nil { diff --git a/internal/rbd/rbd_util.go b/internal/rbd/rbd_util.go index 5c4900486..7c9080d94 100644 --- a/internal/rbd/rbd_util.go +++ b/internal/rbd/rbd_util.go @@ -339,21 +339,8 @@ func addRbdManagerTask(ctx context.Context, pOpts *rbdVolume, arg []string) (boo // deleteImage deletes a ceph image with provision and volume options. func deleteImage(ctx context.Context, pOpts *rbdVolume, cr *util.Credentials) error { image := pOpts.RbdImageName - found, _, err := rbdStatus(ctx, pOpts, cr) - if err != nil { - klog.Errorf(util.Log(ctx, "failed getting information for image (%s): (%s)"), pOpts, err) - if strings.Contains(err.Error(), "rbd: error opening image "+image+ - ": (2) No such file or directory") { - return ErrImageNotFound{image, err} - } - return err - } - if found { - klog.Errorf(util.Log(ctx, "rbd %s is still being used"), image) - return fmt.Errorf("rbd %s is still being used", image) - } // Support deleting the older rbd images whose imageID is not stored in omap - err = pOpts.getImageID() + err := pOpts.getImageID() if err != nil { return err }