mkfs.btrfs error checking mount status of loop device backing_file

Bug #1735046 reported by Ryan Harper
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
btrfs-tools (Ubuntu)
Fix Released
Medium
Unassigned
Trusty
Fix Released
Medium
Ryan Harper
Xenial
Fix Released
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)

Revision history for this message
Ryan Harper (raharper) wrote :
Revision history for this message
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.

Revision history for this message
Ubuntu Foundations Team Bug Bot (crichton) wrote :

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
Mathew Hodson (mhodson)
Changed in btrfs-tools (Ubuntu):
importance: Undecided → Medium
Ryan Harper (raharper)
description: updated
Revision history for this message
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
Revision history for this message
Brian Murray (brian-murray) wrote : Please test proposed package

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
Revision history for this message
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)
tags: added: verification-done
removed: verification-needed
Revision history for this message
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
Revision history for this message
Robie Basak (racb) wrote : Update 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  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.