Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp1998353ybl; Thu, 30 Jan 2020 09:35:32 -0800 (PST) X-Google-Smtp-Source: APXvYqworZhVmiSDTirZnC5M4Z42rt16weGtiTvZUprS4bJgh7rnVnT/fxOeyBQK2FwpcG4Q5JrX X-Received: by 2002:a9d:6c0d:: with SMTP id f13mr4195114otq.354.1580405732232; Thu, 30 Jan 2020 09:35:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580405732; cv=none; d=google.com; s=arc-20160816; b=o6OhLovO+HhSxEUmZXhISpF2rdzuzYeX3d42wjKOUWBgwWyh0ZM1vRes/GAObuo1Do nbWB7m4wKIDkDDAEYjrk7WTqz1d5FcUmP/Czl1L2ey2CjAs9GFIePFEv25IBKko37T2u XxFQ/+kmCUUbSaVTeASY3L7jC1HT/969bERKcVEbKdKR1sKqLcbotm/I8AAShxcn3FEW LOe70ozNX/ZSa7YI2gqjD4a1eHGIU9aMvM+lrw8lW4kep9LmzPKwN9bdRiOw0v/4mqCe VLMlDMv89KN4y+oqeId3rZjYBi7vHfiz144+0BZ4YZmqkvQ6oDGEl9VxP0PPryIU3WUH c1Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date:from :references:cc:to:subject; bh=Kvlt3AoBNy6zmP12Al8hXxIzJ1laF4PrZ3MtbKcV9QU=; b=fg2rUuXtEN4A8dayIVp5ky8zJbaqITywzSM0JbgLf6DdRxjGBAt9bZwABQa/kcfZkB yiYDJOD6WSKn7nzokVodMDonTmnEfuhoeTGTSLP6lJ4w/VFixPL66pqD60mPitEnaxjV 3j06HpvB0D6bf6Xyg0AMoNFnwQfpkxHp+GgYCFlZ4Znh8MJ2ItzTBGvi7asrFAx6zVEe ODLw7xVsQ2rswAPE9JAmWNCH24va/XqpDFSVBa0bIqc17fbO0Jc8HOWZbNRaxDmHjf6k W75qLkyuyWIx5ANglRu0IKOZnvorqvQq6JEkJXm/9yGCjk83GT8LtBCgZn1JomuylZzS gN+g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f5si3647448otp.129.2020.01.30.09.35.10; Thu, 30 Jan 2020 09:35:32 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-ext4-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-ext4-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=ibm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727322AbgA3RfJ (ORCPT + 99 others); Thu, 30 Jan 2020 12:35:09 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:30286 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727158AbgA3RfJ (ORCPT ); Thu, 30 Jan 2020 12:35:09 -0500 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 00UHWYBm094515 for ; Thu, 30 Jan 2020 12:35:07 -0500 Received: from e06smtp02.uk.ibm.com (e06smtp02.uk.ibm.com [195.75.94.98]) by mx0b-001b2d01.pphosted.com with ESMTP id 2xubctmm71-1 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 30 Jan 2020 12:35:07 -0500 Received: from localhost by e06smtp02.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 30 Jan 2020 17:35:05 -0000 Received: from b06cxnps3074.portsmouth.uk.ibm.com (9.149.109.194) by e06smtp02.uk.ibm.com (192.168.101.132) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; (version=TLSv1/SSLv3 cipher=AES256-GCM-SHA384 bits=256/256) Thu, 30 Jan 2020 17:35:01 -0000 Received: from d06av24.portsmouth.uk.ibm.com (d06av24.portsmouth.uk.ibm.com [9.149.105.60]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 00UHZ0Aq34472044 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 30 Jan 2020 17:35:00 GMT Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3E06642045; Thu, 30 Jan 2020 17:35:00 +0000 (GMT) Received: from d06av24.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2B5944203F; Thu, 30 Jan 2020 17:34:58 +0000 (GMT) Received: from localhost.localdomain (unknown [9.199.50.205]) by d06av24.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 30 Jan 2020 17:34:57 +0000 (GMT) Subject: Re: [RFCv2 0/4] ext4: bmap & fiemap conversion to use iomap To: "Darrick J. Wong" Cc: jack@suse.cz, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org, hch@infradead.org, cmaiolino@redhat.com References: <20200130160018.GC3445353@magnolia> From: Ritesh Harjani Date: Thu, 30 Jan 2020 23:04:56 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.2 MIME-Version: 1.0 In-Reply-To: <20200130160018.GC3445353@magnolia> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 20013017-0008-0000-0000-0000034E4ABB X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 20013017-0009-0000-0000-00004A6ECBFF Message-Id: <20200130173458.2B5944203F@d06av24.portsmouth.uk.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-01-30_05:2020-01-28,2020-01-30 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=999 clxscore=1015 adultscore=0 phishscore=0 suspectscore=0 malwarescore=0 priorityscore=1501 spamscore=0 mlxscore=0 lowpriorityscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1911200001 definitions=main-2001300122 Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org On 1/30/20 9:30 PM, Darrick J. Wong wrote: > On Tue, Jan 28, 2020 at 03:48:24PM +0530, Ritesh Harjani wrote: >> Hello All, >> >> Background >> ========== >> There are RFCv2 patches to move ext4 bmap & fiemap calls to use iomap APIs. >> This reduces the users of ext4_get_block API and thus a step towards getting >> rid of buffer_heads from ext4. Also reduces a lot of code by making use of >> existing iomap_ops (except for xattr implementation). >> >> Testing (done on ext4 master branch) >> ======== >> 'xfstests -g auto' passes with default mkfs/mount configuration >> (v/s which also pass with vanilla kernel without this patch). Except >> generic/473 which also failes on XFS. This seems to be the test case issue >> since it expects the data in slightly different way as compared to what iomap >> returns. >> Point 2.a below describes more about this. >> >> Observations/Review required >> ============================ >> 1. bmap related old v/s new method differences:- >> a. In case if addr > INT_MAX, it issues a warning and >> returns 0 as the block no. While earlier it used to return the >> truncated value with no warning. > > Good... > >> b. block no. is only returned in case of iomap->type is IOMAP_MAPPED, >> but not when iomap->type is IOMAP_UNWRITTEN. While with previously >> we used to get block no. for both of above cases. > > Assuming the only remaining usecase of bmap is to tell old bootloaders > where to find vmlinuz blocks on disk, I don't see much reason to map > unwritten blocks -- there's no data there, and if your bootloader writes > to the filesystem(!) then you can't read whatever was written there > anyway. Yes, no objection there. Just wanted to get it reviewed. > > Uh, can we put this ioctl on the deprecation list, please? :) > >> 2. Fiemap related old v/s new method differences:- >> a. iomap_fiemap returns the disk extent information in exact >> correspondence with start of user requested logical offset till the >> length requested by user. While in previous implementation the >> returned information used to give the complete extent information if >> the range requested by user lies in between the extent mapping. > > This is a topic of much disagreement. The FIEMAP documentation says > that the call must return data for the requested range, but *may* return > a mapping that extends beyond the requested range. > > XFS (and now iomap) only return data for the requested range, whereas > ext4 has (had?) the behavior you describe. generic/473 was an attempt > to enforce the ext4 behavior across all filesystems, but I put it in my > dead list and never run it. > > So it's a behavioral change, but the new behavior isn't forbidden. Sure, thanks. > >> b. iomap_fiemap adds the FIEMAP_EXTENT_LAST flag also at the last >> fiemap_extent mapping range requested by the user via fm_length ( >> if that has a valid mapped extent on the disk). > > That sounds like a bug. _LAST is supposed to be set on the last extent > in the file, not the last record in the queried dataset. Thought so too, sure will spend some time to try fixing it. > >> But if the user >> requested for more fm_length which could not be mapped in the last >> fiemap_extent, then the flag is not set. > > Yes... if there were more extents to map than there was space in the map > array, then _LAST should remain unset to encourage userspace to come > back for the rest of the mappings. > > (Unless maybe I'm misunderstanding here...) > >> e.g. output for above differences 2.a & 2.b >> =========================================== >> create a file with below cmds. >> 1. fallocate -o 0 -l 8K testfile.txt >> 2. xfs_io -c "pwrite 8K 8K" testfile.txt >> 3. check extent mapping:- xfs_io -c "fiemap -v" testfile.txt >> 4. run this binary on with and without these patches:- ./a.out (test_fiemap_diff.c) [4] >> >> o/p of xfs_io -c "fiemap -v" >> ============================================ >> With this patch on patched kernel:- >> testfile.txt: >> EXT: FILE-OFFSET BLOCK-RANGE TOTAL FLAGS >> 0: [0..15]: 122802736..122802751 16 0x800 >> 1: [16..31]: 122687536..122687551 16 0x1 >> >> without patch on vanilla kernel (no difference):- >> testfile.txt: >> EXT: FILE-OFFSET BLOCK-RANGE TOTAL FLAGS >> 0: [0..15]: 332211376..332211391 16 0x800 >> 1: [16..31]: 332722392..332722407 16 0x1 >> >> >> o/p of a.out without patch:- >> ================ >> riteshh-> ./a.out >> logical: [ 0.. 15] phys: 332211376..332211391 flags: 0x800 tot: 16 >> (0) extent flag = 2048 >> >> o/p of a.out with patch (both point 2.a & 2.b could be seen) >> ======================= >> riteshh-> ./a.out >> logical: [ 0.. 7] phys: 122802736..122802743 flags: 0x801 tot: 8 >> (0) extent flag = 2049 >> >> FYI - In test_fiemap_diff.c test we had >> a. fm_extent_count = 1 >> b. fm_start = 0 >> c. fm_length = 4K >> Whereas when we change fm_extent_count = 32, then we don't see any difference. >> >> e.g. output for above difference listed in point 1.b >> ==================================================== >> >> o/p without patch (block no returned for unwritten block as well) >> =========Testing IOCTL FIBMAP========= >> File size = 16384, blkcnt = 4, blocksize = 4096 >> 0 41526422 >> 1 41526423 >> 2 41590299 >> 3 41590300 >> >> o/p with patch (0 returned for unwritten block) >> =========Testing IOCTL FIBMAP========= >> File size = 16384, blkcnt = 4, blocksize = 4096 >> 0 0 0 >> 1 0 0 >> 2 15335942 29953 >> 3 15335943 29953 >> >> >> Summary:- >> ======== >> Due to some of the observational differences to user, listed above, >> requesting to please help with a careful review in moving this to iomap. >> Digging into some older threads, it looks like these differences should be fine, >> since the same tools have been working fine with XFS (which uses iomap based >> implementation) [1] >> Also as Ted suggested in [3]: Fiemap & bmap spec could be made based on the ext4 >> implementation. But since all the tools also work with xfs which uses iomap >> based fiemap, so we should be good there. > > Thanks for the worked example output. :) Thanks for the review. :) ritesh > > --D > >> >> References of some previous discussions: >> ======================================= >> [1]: https://www.spinics.net/lists/linux-fsdevel/msg128370.html >> [2]: https://www.spinics.net/lists/linux-fsdevel/msg127675.html >> [3]: https://www.spinics.net/lists/linux-fsdevel/msg128368.html >> [4]: https://raw.githubusercontent.com/riteshharjani/LinuxStudy/master/tools/test_fiemap_diff.c >> [RFCv1]: https://www.spinics.net/lists/linux-ext4/msg67077.html >> >> >> Ritesh Harjani (4): >> ext4: Add IOMAP_F_MERGED for non-extent based mapping >> ext4: Optimize ext4_ext_precache for 0 depth >> ext4: Move ext4 bmap to use iomap infrastructure. >> ext4: Move ext4_fiemap to use iomap infrastructure >> >> fs/ext4/extents.c | 288 +++++++--------------------------------------- >> fs/ext4/inline.c | 41 ------- >> fs/ext4/inode.c | 6 +- >> 3 files changed, 49 insertions(+), 286 deletions(-) >> >> -- >> 2.21.0 >>