ignore_errors: true
 
     - name: Debug dump loop devices
-      command: losetup
-      register: losetup_output
-
-    - debug:
-        var: losetup_output
-        verbosity: 2
+      command: losetup -a
+      ignore_errors: true
 
     - name: delete loop devices for image file
       # use this because kpartx -dv will fail if raw_imgfile was delete
       shell: losetup -O NAME,BACK-FILE | grep "{{ raw_imgfile_basename }}" | awk '{ print $1 }' | xargs -l1 losetup -d
       ignore_errors: true
 
+    - name: Debug dump loop devices again
+      command: losetup -a
+      ignore_errors: true
+
     - name: delete {{ raw_imgfile }}
       file:
         path: "{{ raw_imgfile }}"
 
     fi
 fi
 
+cleanup_loopbacks() {
+    # try again to cleanup loopbacks in case of error
+    losetup -a
+    losetup -O NAME,BACK-FILE | awk '/yardstick/ { print $1 }' | xargs -l1 losetup -v -d || true
+}
+
 build_yardstick_image()
 {
     echo
             # Build the image. Retry once if the build fails
             $cmd || $cmd
 
+            cleanup_loopbacks
             if [ ! -f "${RAW_IMAGE}" ]; then
                 echo "Failed building RAW image"
                 exit 1
                      -e YARD_IMG_ARCH=${YARD_IMG_ARCH} \
                      -vvv -i inventory.ini build_yardstick_image.yml
 
+            cleanup_loopbacks
             if [ ! -f "${QCOW_IMAGE}" ]; then
                 echo "Failed building QCOW image"
                 exit 1
                      -e img_property="nsb" \
                      -e YARD_IMG_ARCH=${YARD_IMG_ARCH} \
                      -vvv -i inventory.ini build_yardstick_image.yml
+            cleanup_loopbacks
             if [ ! -f "${QCOW_NSB_IMAGE}" ]; then
                 echo "Failed building QCOW NSB image"
                 exit 1