All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hugo Mills <hugo-lkml@carfax.org.uk>
To: Felix Blanke <felixblanke@gmail.com>
Cc: Hugo Mills <hugo-lkml@carfax.org.uk>,
	kreijack@inwind.it, linux-btrfs@vger.kernel.org
Subject: Re: Bug in mkfs.btrfs?!
Date: Mon, 24 Jan 2011 14:29:36 +0000	[thread overview]
Message-ID: <20110124142936.GB3403@carfax.org.uk> (raw)
In-Reply-To: <20110124135305.GB7354@scooter>

[-- Attachment #1: Type: text/plain, Size: 3402 bytes --]

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.

   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.                      

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 190 bytes --]

  reply	other threads:[~2011-01-24 14:29 UTC|newest]

Thread overview: 34+ 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 [this message]
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
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 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=20110124142936.GB3403@carfax.org.uk \
    --to=hugo-lkml@carfax.org.uk \
    --cc=felixblanke@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.