Hi,

This is a full mkfs.btrtfs log

[root@T7610 ~]# mkfs.btrfs -O no-holes -R free-space-tree /dev/sdb1 -f
btrfs-progs v5.10.1
See http://btrfs.wiki.kernel.org for more information.

Detected a SSD, turning off metadata duplication.  Mkfs with -m dup if you want 
to force metadata duplication.
Label:              (null)
UUID:               8c745f77-3cdb-45f0-9b67-c69a9bd491a1
Node size:          16384
Sector size:        4096
Filesystem size:    60.00GiB
Block group profiles:
  Data:             single            8.00MiB
  Metadata:         single            8.00MiB
  System:           single            4.00MiB
SSD detected:       yes
Incompat features:  extref, skinny-metadata, no-holes
Runtime features:   free-space-tree
Checksum:           crc32c
Number of devices:  1
Devices:
   ID        SIZE  PATH
    1    60.00GiB  /dev/sdb1

[root@T7610 ~]# btrfs check /dev/sdb1
Opening filesystem to check...
Checking filesystem on /dev/sdb1
UUID: 8c745f77-3cdb-45f0-9b67-c69a9bd491a1
[1/7] checking root items
[2/7] checking extents
WARNING: tree block [5292032, 5308416) crosses 64K page boudnary, may cause 
problem for 64K page system
WARNING: tree block [5357568, 5373952) crosses 64K page boudnary, may cause 
problem for 64K page system
[3/7] checking free space tree
[4/7] checking fs roots
[5/7] checking only csums items (without verifying data)
[6/7] checking root refs
[7/7] checking quota groups skipped (not enabled on this FS)
found 147456 bytes used, no error found
total csum bytes: 0
total tree bytes: 147456
total fs tree bytes: 32768
total extent tree bytes: 16384
btree space waste bytes: 140356
file data blocks allocated: 0
 referenced 0
[root@T7610 ~]# mount /dev/sdb1 /mnt/scratch/
[root@T7610 ~]# btrfs filesystem usage /mnt/scratch
Overall:
    Device size:                  60.00GiB
    Device allocated:             20.00MiB
    Device unallocated:           59.98GiB
    Device missing:                  0.00B
    Used:                        144.00KiB
    Free (estimated):             59.99GiB      (min: 59.99GiB)
    Free (statfs, df):            59.99GiB
    Data ratio:                       1.00
    Metadata ratio:                   1.00
    Global reserve:                3.25MiB      (used: 0.00B)
    Multiple profiles:                  no

Data,single: Size:8.00MiB, Used:0.00B (0.00%)
   /dev/sdb1       8.00MiB

Metadata,single: Size:8.00MiB, Used:128.00KiB (1.56%)
   /dev/sdb1       8.00MiB

System,single: Size:4.00MiB, Used:16.00KiB (0.39%)
   /dev/sdb1       4.00MiB

Unallocated:
   /dev/sdb1      59.98GiB


[root@T7610 ~]# parted /dev/sdb unit s print
Model: TOSHIBA PX05SMQ040 (scsi)
Disk /dev/sdb: 97677846s
Sector size (logical/physical): 4096B/4096B
Partition Table: gpt
Disk Flags:

Number  Start      End        Size       File system  Name     Flags
 1      262144s    15990783s  15728640s  btrfs        primary
 2      15990784s  31719423s  15728640s               primary
 3      31719424s  47448063s  15728640s               primary
 4      47448064s  63176703s  15728640s               primary
 5      63176704s  78905343s  15728640s               primary

Best Regards
Wang Yugui ([email protected])
2021/03/02

> 
> 
> On 2021/3/2 下午4:48, Wang Yugui wrote:
> > Hi, Qu Wenruo
> >
> > This warning message happen even in new created filesystem on amd64
> > system.
> >
> > Should we slicent it before mkfs.btrfs is ready for  64K page system?
> 
> Nope.
> 
> If your fs reports such problem, it means your metadata chunk is not properly 
> aligned.
> 
> The behavior of chunk allocator alignment has been there for a long long 
> time, thus most metadata chunks should already been properly aligned to 64K.
> 
> Either btrfs kernel module or mkfs.btrfs has something wrong.
> 
> 
> >
> > The paration is aligned in 1GiB
> >
> > btrfs-progs: v5.10.x branch
> >
> > # mkfs.btrfs /dev/sdb1 -f
> > 
> And running v5.10.1 I can't reproduce it.
> 
> > # btrfs check /dev/sdb1
> > Opening filesystem to check...
> > Checking filesystem on /dev/sdb1
> > UUID: b298271d-6d1d-4792-a579-fb93653aa811
> > [1/7] checking root items
> > [2/7] checking extents
> > WARNING: tree block [5292032, 5308416) crosses 64K page boudnary, may cause 
> > problem for 64K page system
> > WARNING: tree block [5357568, 5373952) crosses 64K page boudnary, may cause 
> > problem for 64K page system
> 
> I doubt if you're really using v5.10.x mkfs.btrfs.
> 
> As for default btrfs, the metadata chunk is after DATA and SYS chunks, this 
> means metadata chunks should only exist after bytenr 16M, but here your 
> metadata is only at around 5M.
> 
> I strongly doubt your mkfs parameters.
> 
> Please attach the full mkfs output.
> 
> Thanks,
> Qu
> 
> > [3/7] checking free space tree
> > [4/7] checking fs roots
> > [5/7] checking only csums items (without verifying data)
> > [6/7] checking root refs
> > [7/7] checking quota groups skipped (not enabled on this FS)
> > found 147456 bytes used, no error found
> > total csum bytes: 0
> > total tree bytes: 147456
> > total fs tree bytes: 32768
> > total extent tree bytes: 16384
> > btree space waste bytes: 140356
> > file data blocks allocated: 0
> >   referenced 0
> >
> > # parted /dev/sdb unit KiB print
> > Model: TOSHIBA PX05SMQ040 (scsi)
> > Disk /dev/sdb: 390711384kiB
> > Sector size (logical/physical): 4096B/4096B
> > Partition Table: gpt
> > Disk Flags:
> >
> > Number  Start         End           Size         File system  Name     Flags
> >   1      1048576kiB    63963136kiB   62914560kiB  btrfs        primary
> >
> >
> > Best Regards
> > Wang Yugui ([email protected])
> > 2021/03/02
> >
> >> For the incoming subpage support, there is a new requirement for tree
> >> blocks.
> >> Tree blocks should not cross 64K page boudnary.
> >>
> >> For current btrfs-progs and kernel, there shouldn't be any causes to
> >> create such tree blocks.
> >>
> >> But still, we want to detect such tree blocks in the wild before subpage
> >> support fully lands in upstream.
> >>
> >> This patch will add such check for both lowmem and original mode.
> >> Currently it's just a warning, since there aren't many users using 64K
> >> page size yet.
> >>
> >> Signed-off-by: Qu Wenruo <[email protected]>
> >> ---
> >>   check/main.c        |  2 ++
> >>   check/mode-common.h | 18 ++++++++++++++++++
> >>   check/mode-lowmem.c |  2 ++
> >>   3 files changed, 22 insertions(+)
> >>
> >> diff --git a/check/main.c b/check/main.c
> >> index e7996b7c8c0e..0ce9c2f334b4 100644
> >> --- a/check/main.c
> >> +++ b/check/main.c
> >> @@ -5375,6 +5375,8 @@ static int process_extent_item(struct btrfs_root 
> >> *root,
> >>                  num_bytes, gfs_info->sectorsize);
> >>            return -EIO;
> >>    }
> >> +  if (metadata)
> >> +          btrfs_check_subpage_eb_alignment(key.objectid, num_bytes);
> >>  >>        memset(&tmpl, 0, sizeof(tmpl));
> >>    tmpl.start = key.objectid;
> >> diff --git a/check/mode-common.h b/check/mode-common.h
> >> index 4efc07a4f44d..bcda0f53e2c4 100644
> >> --- a/check/mode-common.h
> >> +++ b/check/mode-common.h
> >> @@ -171,4 +171,22 @@ static inline u32 btrfs_type_to_imode(u8 type)
> >>  >>        return imode_by_btrfs_type[(type)];
> >>   }
> >> +
> >> +/*
> >> + * Check tree block alignement for future subpage support on 64K page 
> >> system.
> >> + *
> >> + * Subpage support on 64K page size require one eb to be completely 
> >> contained
> >> + * by a page. Not allowing a tree block to cross 64K page boudanry.
> >> + *
> >> + * Since subpage support is still under development, this check only 
> >> provides
> >> + * warning.
> >> + */
> >> +static inline void btrfs_check_subpage_eb_alignment(u64 start, u32 len)
> >> +{
> >> +  if (start / BTRFS_MAX_METADATA_BLOCKSIZE !=
> >> +      (start + len) / BTRFS_MAX_METADATA_BLOCKSIZE)
> >> +          warning(
> >> +"tree block [%llu, %llu) crosses 64K page boudnary, may cause problem for 
> >> 64K page system",
> >> +                  start, start + len);
> >> +}
> >>   #endif
> >> diff --git a/check/mode-lowmem.c b/check/mode-lowmem.c
> >> index 2b689b2abf63..6dbfe829bb7c 100644
> >> --- a/check/mode-lowmem.c
> >> +++ b/check/mode-lowmem.c
> >> @@ -4206,6 +4206,8 @@ static int check_extent_item(struct btrfs_path *path)
> >>                  key.objectid, key.objectid + nodesize);
> >>            err |= CROSSING_STRIPE_BOUNDARY;
> >>    }
> >> +  if (metadata)
> >> +          btrfs_check_subpage_eb_alignment(key.objectid, nodesize);
> >>  >>        ptr = (unsigned long)(ei + 1);
> >>  >> --
> >> 2.29.2
> >
> > 


Reply via email to