mkfs.btrfs error checking mount status of loop device backing_file

Bug #1735046 reported by Ryan Harper on 2017-11-29
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
btrfs-tools (Ubuntu)
Medium
Unassigned
Trusty
Medium
Ryan Harper
Xenial
Medium
Unassigned

Bug Description

SRU Template

[Impact]

 * Users may be unable to successfully create a btrfs filesystem on
   block devices when a loop device is mounted and the backing file
   no longer exists. This typically happens in the precense of
   overlayroot but may be encountered in other situations.

   This affects the btrfs-tools package prior to the 3.13 release.

 * Backporting the fix from the upstream repository is required to
   allow Trusty MAAS/Cloud images which use overlayrootfs to create
   btrfs filesystems in the presence of a loopdevice with a missing
   backing file.

 * All patches applied are already accepted upstream. Xenial, Artful,
   and Bionic are not affected.

[Test Case]

 * On a Trusty 14.04 system with a secondary disk (vdb)
    - apt-get install btrfs-tools
    - truncate -s 1G testloop.img
    - losetup /dev/loop0 testloop.img
    - mkfs.ext4 /dev/loop0
    - mount /dev/loop0 /mnt
    - rm testloop.img
    - mkfs.btrfs --force /dev/vdb

    PASS if mkfs.btrfs returns 0 and /dev/vdb has a btrfs filesystem

    FAIL if mkfs.btrfs returns non-zero and /dev/vdb does not have a
    btrfs filesystem. mkfs.btrfs returns the error message:

    Error: error checking /dev/vdb mount status

[Regression Potential]

 * mkfs.btrfs fails to detect that the target device is already mounted
   and an existing btrfs filesystem is destroyed.

[Original Description]
# lsb_release -rd
Description: Ubuntu 14.04.5 LTS
Release: 14.04

# apt-cache policy btrfs-tools
btrfs-tools:
  Installed: 3.12-1ubuntu0.1
  Candidate: 3.12-1ubuntu0.1
  Version table:
 *** 3.12-1ubuntu0.1 0
        500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     3.12-1 0
        500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

# mkfs.btrfs --force /dev/vdd succeeds

# # mkfs.btrfs --force /dev/vdd
Error: error checking /dev/vdd mount status

# strace -f mkfs.btrfs --force /dev/vdd
<snip>
stat("/dev/loop0", {st_mode=S_IFBLK|0660, st_rdev=makedev(7, 0), ...}) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4180, ...}) = 0
lstat("/dev/loop0", {st_mode=S_IFBLK|0660, st_rdev=makedev(7, 0), ...}) = 0
open("/sys/block//loop0/loop/backing_file", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG|0444, st_size=4096, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fe8bd73c000
read(5, "/root.tmp.img (deleted)\n", 4096) = 24
close(5) = 0
munmap(0x7fe8bd73c000, 4096) = 0
lstat("/dev", {st_mode=S_IFDIR|0755, st_size=4180, ...}) = 0
lstat("/dev/vdd", {st_mode=S_IFBLK|0660, st_rdev=makedev(253, 48), ...}) = 0
lstat("/root.tmp.img (deleted)", 0x7ffeaa3f0bf0) = -1 ENOENT (No such file or directory)
close(4) = 0
munmap(0x7fe8bd73d000, 4096) = 0
close(3) = 0
write(2, "Error: error checking /dev/vdd m"..., 44Error: error checking /dev/vdd mount status
) = 44
exit_group(1) = ?
+++ exited with 1 +++

It appears that mkfs.btrfs doesn't like the loop device, /dev/loop0 which has a deleted backing file.

root@ubuntu:~# cat /sys/block/loop0/loop/backing_file
/root.tmp.img (deleted)
root@ubuntu:~# ls -al /root.tmp.img
ls: cannot access /root.tmp.img: No such file or directory

ProblemType: Bug
DistroRelease: Ubuntu 14.04
Package: btrfs-tools 3.12-1ubuntu0.1
ProcVersionSignature: Ubuntu 3.13.0-135.184-generic 3.13.11-ckt39
Uname: Linux 3.13.0-135-generic x86_64
ApportVersion: 2.14.1-0ubuntu3.27
Architecture: amd64
Date: Wed Nov 29 02:58:04 2017
ProcEnviron:
 TERM=vt102
 PATH=(custom, no user)
 LANG=en_US.UTF-8
 SHELL=/bin/bash
SourcePackage: btrfs-tools
UpgradeStatus: No upgrade log present (probably fresh install)

Ryan Harper (raharper) wrote :
Ryan Harper (raharper) wrote :

Cherry pick upstream commit which resolves dealing with loopfiles when doing mount checks.

https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git/commit/?id=d06b30feb9cb99e3684b5709159ca59cf811f517

I've built a deb from this and tested that this works when a loopdevice is mounted.

The attachment "btrfs-tools-fix-lp1735046.debdiff" seems to be a debdiff. The ubuntu-sponsors team has been subscribed to the bug report so that they can review and hopefully sponsor the debdiff. If the attachment isn't a patch, please remove the "patch" flag from the attachment, remove the "patch" tag, and if you are member of the ~ubuntu-sponsors, unsubscribe the team.

[This is an automated message performed by a Launchpad user owned by ~brian-murray, for any issue please contact him.]

tags: added: patch
Changed in btrfs-tools (Ubuntu):
importance: Undecided → Medium
Ryan Harper (raharper) on 2017-12-15
description: updated
Scott Moser (smoser) wrote :

I just marked xenial explicitly as fixed here. The fix is in all supported ubuntu releases > trusty.

Changed in btrfs-tools (Ubuntu):
status: New → Fix Released
Changed in btrfs-tools (Ubuntu Trusty):
status: New → In Progress
importance: Undecided → Medium
assignee: nobody → Ryan Harper (raharper)
Changed in btrfs-tools (Ubuntu Xenial):
status: New → Fix Released
importance: Undecided → Medium

Hello Ryan, or anyone else affected,

Accepted btrfs-tools into trusty-proposed. The package will build now and be available at https://launchpad.net/ubuntu/+source/btrfs-tools/3.12-1ubuntu0.2 in a few hours, and then in the -proposed repository.

Please help us by testing this new package. See https://wiki.ubuntu.com/Testing/EnableProposed for documentation on how to enable and use -proposed.Your feedback will aid us getting this update out to other Ubuntu users.

If this package fixes the bug for you, please add a comment to this bug, mentioning the version of the package you tested and change the tag from verification-needed-trusty to verification-done-trusty. If it does not fix the bug for you, please add a comment stating that, and change the tag to verification-failed-trusty. In either case, without details of your testing we will not be able to proceed.

Further information regarding the verification process can be found at https://wiki.ubuntu.com/QATeam/PerformingSRUVerification . Thank you in advance!

Changed in btrfs-tools (Ubuntu Trusty):
status: In Progress → Fix Committed
tags: added: verification-needed verification-needed-trusty
Ryan Harper (raharper) wrote :
Download full text (3.4 KiB)

I tested the proposed package and it works as expected.

root@t-unsubsidized-piper:~# lsb_release -rd
Description: Ubuntu 14.04.5 LTS
Release: 14.04

root@t-unsubsidized-piper:~# uname -r
3.13.0-137-generic

First, I confirmed it still fails on 3.12-1ubuntu0.1

root@t-unsubsidized-piper:~# truncate -s 1G testloop.img
root@t-unsubsidized-piper:~# losetup /dev/loop0 testloop.img
root@t-unsubsidized-piper:~# mkfs.ext4 /dev/loop0
mke2fs 1.42.9 (4-Feb-2014)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
 32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

root@t-unsubsidized-piper:~# mount /dev/loop0 /mnt
root@t-unsubsidized-piper:~# rm testloop.img
root@t-unsubsidized-piper:~# mkfs.btrfs --force /dev/vdb
Error: error checking /dev/vdb mount status
root@t-unsubsidized-piper:~# echo $?
1

Next I added trusty-proposed and updated

root@t-unsubsidized-piper:~# apt-cache policy btrfs-tools
btrfs-tools:
  Installed: 3.12-1ubuntu0.1
  Candidate: 3.12-1ubuntu0.2
  Version table:
     3.12-1ubuntu0.2 0
        500 http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty-proposed/main amd64 Packages
 *** 3.12-1ubuntu0.1 0
        500 http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
        100 /var/lib/dpkg/status
     3.12-1 0
        500 http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

After installing the upgrade, I repeated the mkfs.btrfs command, but this time it succeeds

# sudo apt install btrfs-tools
sudo: unable to resolve host t-unsubsidized-piper
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  btrfs-tools
1 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
Need to get 332 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://nova.clouds.archive.ubuntu.com/ubuntu/ trusty-proposed/main btrfs-tools amd64 3.12-1ubuntu0.2 [332 kB]
Fetched 332 kB in 0s (827 kB/s)
(Reading database ... 51345 files and directories currently installed.)
Preparing to unpack .../btrfs-tools_3.12-1ubuntu0.2_amd64.deb ...
Unpacking btrfs-tools (3.12-1ubuntu0.2) over (3.12-1ubuntu0.1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Setting up btrfs-tools (3.12-1ubuntu0.2) ...
update-initramfs: deferring update (trigger activated)
Processing triggers for initramfs-tools (0.103ubuntu4.10) ...
update-initramfs: Generating /boot/initrd.img-3.13.0-137-generic
Processing triggers for libc-bin (2.19-0ubuntu6.13) ...
root@t-unsubsidized-piper:~# mkfs.btrfs --force /dev/vdb

WARNING! - Btrfs v3.12 IS EXPERIME...

Read more...

tags: added: verification-done-trusty
removed: verification-needed-trusty
Scott Moser (smoser) on 2018-01-16
tags: added: verification-done
removed: verification-needed
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package btrfs-tools - 3.12-1ubuntu0.2

---------------
btrfs-tools (3.12-1ubuntu0.2) trusty; urgency=medium

  * Cherry-pick upstream fix loop device mount checks
    (LP: #1735046)

 -- Ryan Harper <email address hidden> Wed, 29 Nov 2017 13:44:30 -0600

Changed in btrfs-tools (Ubuntu Trusty):
status: Fix Committed → Fix Released

The verification of the Stable Release Update for btrfs-tools has completed successfully and the package has now been released to -updates. Subsequently, the Ubuntu Stable Release Updates Team is being unsubscribed and will not receive messages about this bug report. In the event that you encounter a regression using the package from -updates please report a new bug using ubuntu-bug and tag the bug report regression-update so we can easily find any regressions.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers