Liu Bo
2012-Apr-02 11:28 UTC
[PATCH] Btrfs: do not mount when we have a sectorsize larger than PAGE_SIZE
Our code is not ready to cope with a sectorsize that''s larger than PAGE_SIZE. Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com> --- fs/btrfs/disk-io.c | 8 ++++++++ 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 20196f4..08e49d2 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2104,6 +2104,14 @@ int open_ctree(struct super_block *sb, err = -EINVAL; goto fail_alloc; } + if (btrfs_super_sectorsize(disk_super) > PAGE_CACHE_SIZE) { + printk(KERN_ERR "BTRFS: couldn''t mount because sectorsize(%d)" + " was larger than PAGE_SIZE(%lu)\n", + btrfs_super_sectorsize(disk_super), + (unsigned long long)PAGE_CACHE_SIZE); + err = -EINVAL; + goto fail_alloc; + } features = btrfs_super_incompat_flags(disk_super); features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF; -- 1.6.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
David Sterba
2012-Apr-02 12:17 UTC
Re: [PATCH] Btrfs: do not mount when we have a sectorsize larger than PAGE_SIZE
On Mon, Apr 02, 2012 at 07:28:18PM +0800, Liu Bo wrote:> --- a/fs/btrfs/disk-io.c > +++ b/fs/btrfs/disk-io.c > @@ -2104,6 +2104,14 @@ int open_ctree(struct super_block *sb, > err = -EINVAL; > goto fail_alloc; > } > + if (btrfs_super_sectorsize(disk_super) > PAGE_CACHE_SIZE) { > + printk(KERN_ERR "BTRFS: couldn''t mount because sectorsize(%d)" > + " was larger than PAGE_SIZE(%lu)\n",%llu> + btrfs_super_sectorsize(disk_super), > + (unsigned long long)PAGE_CACHE_SIZE); > + err = -EINVAL; > + goto fail_alloc; > + } > > features = btrfs_super_incompat_flags(disk_super); > features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF;We have the opposite check a few lines below 2257 if (sectorsize < PAGE_SIZE) { 2258 printk(KERN_WARNING "btrfs: Incompatible sector size " 2259 "found on %s\n", sb->s_id); 2260 goto fail_sb_buffer; 2261 } 2262 so sectorsize must be equal to PAGE_SIZE always and one check can catch both cases. david -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Liu Bo
2012-Apr-03 01:15 UTC
Re: [PATCH] Btrfs: do not mount when we have a sectorsize larger than PAGE_SIZE
On 04/02/2012 08:17 PM, David Sterba wrote:> On Mon, Apr 02, 2012 at 07:28:18PM +0800, Liu Bo wrote: >> --- a/fs/btrfs/disk-io.c >> +++ b/fs/btrfs/disk-io.c >> @@ -2104,6 +2104,14 @@ int open_ctree(struct super_block *sb, >> err = -EINVAL; >> goto fail_alloc; >> } >> + if (btrfs_super_sectorsize(disk_super) > PAGE_CACHE_SIZE) { >> + printk(KERN_ERR "BTRFS: couldn''t mount because sectorsize(%d)" >> + " was larger than PAGE_SIZE(%lu)\n", > > %llu >err, thanks for caching it.>> + btrfs_super_sectorsize(disk_super), >> + (unsigned long long)PAGE_CACHE_SIZE); >> + err = -EINVAL; >> + goto fail_alloc; >> + } >> >> features = btrfs_super_incompat_flags(disk_super); >> features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF; > > We have the opposite check a few lines below > > 2257 if (sectorsize < PAGE_SIZE) { > 2258 printk(KERN_WARNING "btrfs: Incompatible sector size " > 2259 "found on %s\n", sb->s_id); > 2260 goto fail_sb_buffer; > 2261 } > 2262 > > so sectorsize must be equal to PAGE_SIZE always and one check can catch > both cases. >But this check is _useless_ when we have a sectorsize which is larger than PAGE_SIZE, we''re not ready for that, too. We already have one check, so I''ll modify this instead. :) thanks, liubo> > david > -- > To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html >-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
James Courtier-Dutton
2012-Apr-04 09:17 UTC
Re: [PATCH] Btrfs: do not mount when we have a sectorsize larger than PAGE_SIZE
On 3 April 2012 02:15, Liu Bo <liubo2009@cn.fujitsu.com> wrote:> On 04/02/2012 08:17 PM, David Sterba wrote: >> On Mon, Apr 02, 2012 at 07:28:18PM +0800, Liu Bo wrote: >>> --- a/fs/btrfs/disk-io.c >>> +++ b/fs/btrfs/disk-io.c >>> @@ -2104,6 +2104,14 @@ int open_ctree(struct super_block *sb, >>> err = -EINVAL; >>> goto fail_alloc; >>> } >>> + if (btrfs_super_sectorsize(disk_super) > PAGE_CACHE_SIZE) { >>> + printk(KERN_ERR "BTRFS: couldn''t mount because sectorsize(%d)" >>> + " was larger than PAGE_SIZE(%lu)\n", >> >> %llu >> > > err, thanks for caching it. > >>> + btrfs_super_sectorsize(disk_super), >>> + (unsigned long long)PAGE_CACHE_SIZE); >>> + err = -EINVAL; >>> + goto fail_alloc; >>> + } >>> >>> features = btrfs_super_incompat_flags(disk_super); >>> features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF; >> >> We have the opposite check a few lines below >> >> 2257 if (sectorsize < PAGE_SIZE) { >> 2258 printk(KERN_WARNING "btrfs: Incompatible sector size " >> 2259 "found on %s\n", sb->s_id); >> 2260 goto fail_sb_buffer; >> 2261 } >> 2262 >> >> so sectorsize must be equal to PAGE_SIZE always and one check can catch >> both cases. >> > > But this check is _useless_ when we have a sectorsize which is larger than PAGE_SIZE, > we''re not ready for that, too. > > We already have one check, so I''ll modify this instead. :) >Minor observation. One is "PAGE_SIZE" and one is "PAGE_CACHE_SIZE". Might those be different? -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html