From: Felix Blanke <felixblanke@gmail.com>
To: Hugo Mills <hugo-lkml@carfax.org.uk>
Cc: kreijack@inwind.it, linux-btrfs@vger.kernel.org
Subject: Re: Bug in mkfs.btrfs?!
Date: Mon, 24 Jan 2011 15:35:55 +0100 [thread overview]
Message-ID: <20110124143555.GC7354@scooter> (raw)
In-Reply-To: <20110124142936.GB3403@carfax.org.uk>
> On Mon, Jan 24, 2011 at 02:53:05PM +0100, Felix Blanke wrote:
> > On 24. January 2011 - 13:13, Hugo Mills wrote:
> > > On Mon, Jan 24, 2011 at 02:01:04PM +0100, Felix Blanke wrote:
> > > > Hi,
> > > >
> > > > you were talking about the LOOP_GET_STATUS function. I'm not quite sure where does it
> > > > came from. Is it part of the kernel? Or does it come from the util-linux package?
> > >
> > > It's an ioctl (number 0x4c03) that works on loop devices, and
> > > returns information about the loop device. Being an ioctl, it's
> > > implemented in the kernel. Unfortunately, since it's part of the
> > > kernel API, the size of the name field is probably fixed for the rest
> > > of time, and so the bug can't be fixed.
> > >
> >
> > That sounds great :/
>
> If you change the layout of the structure, then you have two
> incompatible APIs: the one before, and the one after the change. Code
> that's compiled to work with one version won't work with the other.
> This will cause all manner of pain, and the kernel developers tend
> (quite rightly) to come down hard on any attempts to do that kind of
> thing.
>
> > > > Btw: I tested it with util-linux-2.19-rc1. The strace still contains
> > > > the truncated path, and no '*'. Therefore I think that ioctl is from
> > > > the kernel.
> > >
> > > Indeed.
> > >
> > > What I find interesting is that my copy of losetup follows symlinks
> > > from the /dev/disk/by-id/... path back to the original device node
> > > (/dev/dm-7 in my test case) before setting up the loop, whereas yours
> > > seems not to.
> > >
> > > I think that that's probably the easiest solution to this problem:
> > > modify losetup to use realpath(3) on the device node it's given.
>
> > I dont see where that helps with the problem. If I understand
> > Goffredo correct mkfs.btrfs is using the ioctl to get the path.
> > Letting losetup following the link will fix the output of "losetup
> > /dev/loopX", but it will not fix the truncated path from the ioctl
> > and therefore it will not fix the problem with mkfs.btrfs.
>
> What seems to be happening is that at the point that losetup
> creates the loop device, it stores the pathname of the underlying
> device node in the kernel. When you run losetup -a or mkfs.btrfs,
> these use the LOOP_GET_STATUS ioctl to retrieve that pathname. The
> pathname that LOOP_GET_STATUS returns is truncated to 64 bytes (63
> ASCII characters, plus the zero terminator). losetup -a simply prints
> it; mkfs.btrfs tries to use it as a parameter to realpath(3). It is at
> this point that the symptoms of breakage occur, because the truncated
> name doesn't exist, so realpath returns an error.
>
> If, instead, the initial losetup call tracked the symlinks back to
> the original device node (i.e. something like "/dev/sdb3", or
> "/dev/mapper/ruthven-btest" in my example), then the name that's
> stored in the kernel would be shorter, and we'd be less likely to see
> the truncation. This is what my copy of losetup seems to be doing. I
> can't see any distribution-specific patches in the source for
> util-linux that would do this, though.
>
Ah, I see :)
It is strange that your util-linux does follow the link.
I tried to read the informations with the newest (original) util-linux. But the
assignment of the /dev/loopX was done with an older util-linux. I'll try to use the
new util-linux to decrypt a device and look what losetup is reporting. Maybe that
will solve the problem and it's just my "old" version of util-linux which has that
problem.
Felix
> Hugo.
>
> --
> === Hugo Mills: hugo@... carfax.org.uk | darksatanic.net | lug.org.uk ===
> PGP key: 515C238D from wwwkeys.eu.pgp.net or http://www.carfax.org.uk
> --- But people have always eaten people, / what else is there to ---
> eat? / If the Juju had meant us not to eat people / he
> wouldn't have made us of meat.
---end quoted text---
next prev parent reply other threads:[~2011-01-24 14:35 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-22 14:45 Bug in mkfs.btrfs?! Felix Blanke
2011-01-22 14:52 ` Felix Blanke
2011-01-22 15:11 ` Hugo Mills
2011-01-22 15:45 ` Hugo Mills
2011-01-22 15:56 ` Felix Blanke
2011-01-22 22:54 ` Chris Samuel
2011-01-22 23:03 ` Felix Blanke
2011-01-23 18:18 ` Hugo Mills
2011-01-23 22:02 ` Goffredo Baroncelli
2011-01-23 23:15 ` Felix Blanke
2011-01-24 7:42 ` Helmut Hullen
2011-01-24 9:41 ` Felix Blanke
2011-01-23 23:27 ` Hugo Mills
2011-01-23 23:58 ` Felix Blanke
2011-01-24 1:53 ` Fajar A. Nugraha
2011-01-24 9:38 ` Felix Blanke
2011-01-24 13:01 ` Felix Blanke
2011-01-24 13:13 ` Hugo Mills
2011-01-24 13:53 ` Felix Blanke
2011-01-24 14:29 ` Hugo Mills
2011-01-24 14:34 ` Hugo Mills
2011-01-24 14:44 ` Felix Blanke
2011-01-24 16:52 ` Felix Blanke
2011-01-24 17:00 ` Hugo Mills
2011-01-24 21:04 ` Felix Blanke
2011-01-24 21:14 ` Felix Blanke
2011-01-24 14:35 ` Felix Blanke [this message]
2011-01-25 0:15 ` LOOP_GET_STATUS(64) truncates pathnames to 64 chars (was Re: Bug in mkfs.btrfs?!) Chris Samuel
2011-02-10 12:29 ` Petr Uzel
2011-02-11 13:04 ` Felix Blanke
2011-02-11 18:59 ` Milan Broz
[not found] ` <AANLkTi=Arg-09F0DXsWNhsYgyPar=rKs7G_OQG2uMm4f@mail.gmail.com>
2011-02-11 19:31 ` Milan Broz
2011-02-11 19:41 ` Felix Blanke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110124143555.GC7354@scooter \
--to=felixblanke@gmail.com \
--cc=hugo-lkml@carfax.org.uk \
--cc=kreijack@inwind.it \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).