From: Qu Wenruo <quwenruo@cn.fujitsu.com>
To: Satoru Takeuchi <takeuchi_satoru@jp.fujitsu.com>,
Dongsheng Yang <yangds.fnst@cn.fujitsu.com>,
<linux-btrfs@vger.kernel.org>
Cc: Josef Bacik <jbacik@fb.com>
Subject: Re: [PATCH] btrfs: get the accurate value of used_bytes in btrfs_get_block_group_info().
Date: Wed, 7 Jan 2015 17:22:58 +0800 [thread overview]
Message-ID: <54ACFAF2.2010700@cn.fujitsu.com> (raw)
In-Reply-To: <54ACEDEC.7090904@jp.fujitsu.com>
Hi Satoru-san
> Hi Dongsheng,
>
> On 2015/01/05 20:19, Dongsheng Yang wrote:
>
>> Ping.....
>>
>> IOCTL of BTRFS_IOC_SPACE_INFO currently does not report
>> the data used but not synced to user. Then btrfs fi df will
>> give user a wrong numbers before sync. This patch solve
>> this problem.
>>
>> On 10/27/2014 08:38 PM, Dongsheng Yang wrote:
>>> Reproducer:
>>> # mkfs.btrfs -f -b 20G /dev/sdb
>>> # mount /dev/sdb /mnt/test
>>> # fallocate -l 17G /mnt/test/largefile
>>> # btrfs fi df /mnt/test
>>> Data, single: total=17.49GiB, used=6.00GiB <- only 6G, but
>>> actually it should be 17G.
>>> System, DUP: total=8.00MiB, used=16.00KiB
>>> System, single: total=4.00MiB, used=0.00B
>>> Metadata, DUP: total=1.00GiB, used=112.00KiB
>>> Metadata, single: total=8.00MiB, used=0.00B
>>> GlobalReserve, single: total=16.00MiB, used=0.00B
>
> I tried to reproduce your problem with 3.19-rc1.
> However, this problem doesn't happen. Could you
> also try to reproduce with the upstream kernel?
I can still reproduce it in 3.18, but it seems to be fixed in 3.19-rc1
already by other patch,
so this patch is no longer needed.
Thanks,
Qu
>
> * Detail
>
> test script (named "yang-test.sh" here):
> ===============================================================================
>
> #!/bin/bash -x
>
> PART1=/dev/vdb
> MNT_PNT=./mnt
> mkfs.btrfs -f -b 20G ${PART1}
> mount ${PART1} ${MNT_PNT}
> fallocate -l 17G ${MNT_PNT}/largefile
> btrfs fi df ${MNT_PNT}
> sync
> btrfs fi df ${MNT_PNT}
> umount ${MNT_PNT}
> ===============================================================================
>
>
> Result:
> ===============================================================================
>
> # ./yang-test.sh
> + PART1=/dev/vdb
> + MNT_PNT=./mnt
> + mkfs.btrfs -f -b 20G /dev/vdb
> Btrfs v3.17
> See http://btrfs.wiki.kernel.org for more information.
>
> Turning ON incompat feature 'extref': increased hardlink limit per
> file to 65536
> fs created label (null) on /dev/vdb
> nodesize 16384 leafsize 16384 sectorsize 4096 size 20.00GiB
> + mount /dev/vdb ./mnt
> + fallocate -l 17G ./mnt/largefile
> + btrfs fi df ./mnt
> Data, single: total=17.01GiB, used=17.00GiB # Used 17GiB properly
> System, DUP: total=8.00MiB, used=16.00KiB
> System, single: total=4.00MiB, used=0.00B
> Metadata, DUP: total=1.00GiB, used=112.00KiB
> Metadata, single: total=8.00MiB, used=0.00B
> GlobalReserve, single: total=16.00MiB, used=0.00B
> + sync
> + btrfs fi df ./mnt
> Data, single: total=17.01GiB, used=17.00GiB # (of course) used
> 17GiB too
> System, DUP: total=8.00MiB, used=16.00KiB
> System, single: total=4.00MiB, used=0.00B
> Metadata, DUP: total=1.00GiB, used=112.00KiB
> Metadata, single: total=8.00MiB, used=0.00B
> GlobalReserve, single: total=16.00MiB, used=0.00B
> + umount ./mnt
> ===============================================================================
>
>
> Although I ran this test five times, the results are the same.
>
> Thanks,
> Satoru
>
>>> # sync
>>> # btrfs fi df /mnt/test
>>> Data, single: total=17.49GiB, used=17.00GiB <- After sync, it is
>>> expected.
>>> System, DUP: total=8.00MiB, used=16.00KiB
>>> System, single: total=4.00MiB, used=0.00B
>>> Metadata, DUP: total=1.00GiB, used=112.00KiB
>>> Metadata, single: total=8.00MiB, used=0.00B
>>> GlobalReserve, single: total=16.00MiB, used=0.00B
>>>
>>> The value of 6.00GiB is actually calculated in
>>> btrfs_get_block_group_info()
>>> by adding the @block_group->item->used for each group together. In
>>> this way,
>>> it did not consider the bytes in cache.
>>>
>>> This patch adds the value of @pinned, @reserved and @bytes_super in
>>> struct btrfs_block_group_cache to make sure we can get the accurate
>>> @used_bytes.
>>>
>>> Reported-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
>>> Signed-off-by: Dongsheng Yang <yangds.fnst@cn.fujitsu.com>
>>> ---
>>> fs/btrfs/ioctl.c | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>>
>>> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
>>> index 33c80f5..bc2aaeb 100644
>>> --- a/fs/btrfs/ioctl.c
>>> +++ b/fs/btrfs/ioctl.c
>>> @@ -3892,6 +3892,10 @@ void btrfs_get_block_group_info(struct
>>> list_head *groups_list,
>>> space->total_bytes += block_group->key.offset;
>>> space->used_bytes +=
>>> btrfs_block_group_used(&block_group->item);
>>> + /* Add bytes-info in cache */
>>> + space->used_bytes += block_group->pinned;
>>> + space->used_bytes += block_group->reserved;
>>> + space->used_bytes += block_group->bytes_super;
>>> }
>>> }
>>
>> --
>> 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
next prev parent reply other threads:[~2015-01-07 9:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-27 12:38 [PATCH] btrfs: get the accurate value of used_bytes in btrfs_get_block_group_info() Dongsheng Yang
2015-01-05 11:19 ` Dongsheng Yang
2015-01-07 8:27 ` Satoru Takeuchi
2015-01-07 9:22 ` Qu Wenruo [this message]
2015-01-07 9:41 ` Dongsheng Yang
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=54ACFAF2.2010700@cn.fujitsu.com \
--to=quwenruo@cn.fujitsu.com \
--cc=jbacik@fb.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=takeuchi_satoru@jp.fujitsu.com \
--cc=yangds.fnst@cn.fujitsu.com \
/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.