[dm-devel] 2 TB wraparound on 32 bit host

James Bottomley James.Bottomley at HansenPartnership.com
Sat Jun 12 16:09:09 UTC 2010


On Sat, 2010-06-12 at 11:03 -0500, James Bottomley wrote:
> On Sat, 2010-06-12 at 11:45 -0400, Phillip Susi wrote:
> > On 06/11/2010 05:16 PM, James Bottomley wrote:
> > > So best guess is that CONFIG_LBDAF isn't set.  This would make all
> > > sector_t counts wrap at 2TB (32 bits worth of 512 bytes).  It would be
> > > rather a daft thing for a distribution not to have set, though ...
> > 
> > Bingo, thanks.  It doesn't seem to be set on this machine running the 
> > amd64 2.6.32 lucid build which also appears to suffer the same problem. 
> 
> So is this a default kernel or did you build your own ... because if
> it's a vanilla ubuntu kernel, not setting this config option would be
> pretty embarrassing (not to mention annoy a lot of users)?
> 
> >   If this config option isn't set though, shouldn't the kernel fail 
> > calls like llseek() that try to exceed the limit, rather than silently 
> > wrap around to the wrong address?
> 
> Not really ... it's defaulted to y; only people who know what they're
> doing should set it to N.  These people are mostly embedded and will
> never connect > 2TB devices to their system, so checking is a waste of
> time and space for them.  Plus making the checks exhaustive and
> foolproof is just about impossible given that we alter the underlying
> size of sector_t and wrap around without warning is the C default.

Actually, looking at the above, this is conflicting information.  On 64
bit systems (like amd64) there's no need to set CONFIG_LBDAF because
sector_t is an unsigned long, which is 64 bits.  It's only on 32 bit
configurations it gets set.  Initially you said you were using a PAE
i686 configuration, which would need this setting.  An amd64 one
wouldn't.

Which kernel are you actually seeing the problem on, and what is
CONFIG_LBDAF set to on that kernel?

James





More information about the dm-devel mailing list