From patchwork Mon Nov 20 02:42:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Qu Wenruo X-Patchwork-Id: 10065871 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 180686023A for ; Mon, 20 Nov 2017 02:42:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0CA3228F4D for ; Mon, 20 Nov 2017 02:42:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F38C129025; Mon, 20 Nov 2017 02:42:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI,T_TVD_MIME_EPI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5E71128F4D for ; Mon, 20 Nov 2017 02:42:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751215AbdKTCmb (ORCPT ); Sun, 19 Nov 2017 21:42:31 -0500 Received: from mout.gmx.net ([212.227.15.19]:58590 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751190AbdKTCmb (ORCPT ); Sun, 19 Nov 2017 21:42:31 -0500 Received: from [0.0.0.0] ([210.140.77.29]) by mail.gmx.com (mrgmx001 [212.227.17.184]) with ESMTPSA (Nemesis) id 0Lh6sJ-1evEJv19Et-00oYU3; Mon, 20 Nov 2017 03:42:29 +0100 Subject: Re: bug? fstrim only trims unallocated space, not unused in bg's To: Chris Murphy Cc: Btrfs BTRFS References: From: Qu Wenruo Message-ID: <0f6c7514-1cf2-1d88-1307-c43f7642b525@gmx.com> Date: Mon, 20 Nov 2017 10:42:09 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: X-Provags-ID: V03:K0:FZydOKos3CLg8kYz0CG4kwXbD9GPRU+cAdT/MoGvWNNtD4Q/Hcv cb/LIc5r1WE4f/AIRUTU+inRzX6TAHl/hVJV/EJfVTH9ONvTunGnll82S8liE7+88eI/kRk ot34ezKHU6Wocn/KdDdSNDSIuZOonf29JKhXdHVzadbIpEjHNaPUeWE9GUEonvX0rPZ5SNd 6p+pBp/QqzKUN72Fodw7w== X-UI-Out-Filterresults: notjunk:1; V01:K0:RVdy4l8DviI=:v4HvpAHXbegD4nFrD7rgCD XJQixQvwwilRLyMFEBQctBuYJOOgngy5U7oq4j2cr0UvQN3krtaQrEqpQVl08ZfdKIUs+jd46 /g8Hez+tMPeKU3n8Ol//dl6h9e8upz/ik07s2kAzyAl5xbW6OE7fFexpH+hgs9/28GNETPcdu Az7HdkiaI4Gl6WWIOmsp4RRHJBdhKgpHv5sovxJIIv2L/Ei/FV42P7V6etrLVZn7iBdOmMKVC JB4D5ji6itVB7///7uxpkyeXoKDmxPw6BS6o2B3vNNuzPwcQLI1SK6FtO3cBhH/bGKS3Btihl 8c8Go7CzdmLwn7pz51ae3mdnwwhIIR59WicAmbvT7Ip9S8vcWK8BfP7I/p+nGA+aVvuPS6Cjk FHrdu1GSrS9e0aiV3pjFlSFu68E4dyrcL4qS+A/WUoocVGujYl/b//OO/WKTMIa7t3h8ARmr2 JutzsKDfbxpdzFamk49O4zOwnDsd5E5Fjj/pehAxGCUAetTvkfLCUWLPJfcZ9U1y6+0b//RId qi17K/IV+jWYrmrmXnEuPIS9pWuXom4cFORlWlgaH6F6NXGgfbfXg2jducE6nGPVFgGl2S7HS QlMuYBezFP9HdgWzTaB0WKXpvXHNeytkurPdAEvf6yJAJAblax4+veBNy4e9/z8G/yXxN08wP 0eNhbdVCYOCrTLHSKCsJ8IxxwkH6kAYfeG2ZOG3aDJHSfNS9S05EfWHUSP5fVsBoOFukxVp/L QDB4NgYjk/MrmxMKbc7dVo50P+R03CllZMJx5soHhnG28h92S3Tffjejjgi5VCQESdizzc8MU CLscteKyyxpWo+00waM4V1F8OloFu2RRBdO5vDWAjYxxbQGqis= Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On 2017年11月20日 10:24, Chris Murphy wrote: > On Sun, Nov 19, 2017 at 7:13 PM, Qu Wenruo wrote: >> >> >> On 2017年11月19日 14:17, Chris Murphy wrote: >>> fstrim should trim free space, but it only trims unallocated. This is >>> with kernel 4.14.0 and the entire 4.13 series. I'm pretty sure it >>> behaved this way with 4.12 also. >> >> Tested with 4.14-rc7, can't reproduce it. > > $ sudo btrfs fi us / > Overall: > Device size: 70.00GiB > Device allocated: 31.03GiB > Device unallocated: 38.97GiB > Device missing: 0.00B > Used: 22.12GiB > Free (estimated): 47.62GiB (min: 47.62GiB) > ...snip... > > $ sudo fstrim -v / > /: 39 GiB (41841328128 bytes) trimmed > > Then I run btrfs-debug -b / and find the least used block group, at 8% usage; > > block group offset 174202028032 len 1073741824 used 89206784 > chunk_objectid 256 flags 1 usage 0.08 > > And balance that block group: > > $ sudo btrfs balance start -dvrange=174202028032..174202028033 -dlimit=1 / > Done, had to relocate 1 out of 32 chunks > > And trim again: > > /: 39 GiB (41841328128 bytes) trimmed > > >> Any special mount options or setup? >> (BTW, I also tried space_cache=v2 and default v1, no obvious difference) > > > /dev/nvme0n1p8 on / type btrfs > (rw,relatime,seclabel,ssd,space_cache,subvolid=333,subvol=/root27) Nothing special at all. And unfortunately, no trace point inside btrfs_trim_block_group() at all. But a quick glance shows me that, the loop to iterate existing block groups to trim free space inside them has a return value overwrite bug. So only unallocated space get trimmed. Would you please try this diff to get the return value? ------ ret = btrfs_trim_block_group(cache, @@ -11000,7 +11000,7 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) trimmed += group_trimmed; if (ret) { btrfs_put_block_group(cache); - break; + goto out; } } @@ -11019,6 +11019,7 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) } mutex_unlock(&fs_info->fs_devices->device_list_mutex); +out: range->len = trimmed; return ret; } ------ Thanks, Qu > > > Would a strace of fstrim help? > > diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 309a109069f1..dbec05dc8810 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -10983,12 +10983,12 @@ int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range) ret = cache_block_group(cache, 0); if (ret) { btrfs_put_block_group(cache); - break; + goto out; } ret = wait_block_group_cache_done(cache); if (ret) { btrfs_put_block_group(cache); - break; + goto out; } }