From patchwork Sat Apr 6 01:53:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qu Wenruo X-Patchwork-Id: 10888039 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 12E321708 for ; Sat, 6 Apr 2019 01:53:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DDA8528B7A for ; Sat, 6 Apr 2019 01:53:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CEC1528B99; Sat, 6 Apr 2019 01:53:24 +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=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI 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 F1F3D28B7A for ; Sat, 6 Apr 2019 01:53:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726397AbfDFBxT (ORCPT ); Fri, 5 Apr 2019 21:53:19 -0400 Received: from mout.gmx.net ([212.227.15.18]:51565 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726204AbfDFBxT (ORCPT ); Fri, 5 Apr 2019 21:53:19 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1554515593; bh=BF8mvYPawszHC4P7lfGDq3DFanXe7XQKFHHezOIyPto=; h=X-UI-Sender-Class:To:From:Subject:Date; b=giCk7D77qhi6x6/zYZ3UxsAK8KCo98IXktf1cH79JuIjVa41YJH2C7qju95ddcftz lBCxLI7tCIWn/KWHGO75WcdogI//UxaGTcI/dXsZvGkVIeATNc5JwUloGO+w9c6rRh WoIt9p936lUAq+ZxqPqmQMoRbLx2dzkmmrXxBIMQ= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [0.0.0.0] ([210.140.77.29]) by mail.gmx.com (mrgmx001 [212.227.17.184]) with ESMTPSA (Nemesis) id 0MEGIi-1h635E06H2-00FWLN; Sat, 06 Apr 2019 03:53:13 +0200 To: "linux-btrfs@vger.kernel.org" , Linux FS Devel , "linux-block@vger.kernel.org" , ming.lei@redhat.com From: Qu Wenruo Subject: No way to break bio_for_each_segment_all() macro? Openpgp: preference=signencrypt Autocrypt: addr=quwenruo.btrfs@gmx.com; prefer-encrypt=mutual; keydata= mQENBFnVga8BCACyhFP3ExcTIuB73jDIBA/vSoYcTyysFQzPvez64TUSCv1SgXEByR7fju3o 8RfaWuHCnkkea5luuTZMqfgTXrun2dqNVYDNOV6RIVrc4YuG20yhC1epnV55fJCThqij0MRL 1NxPKXIlEdHvN0Kov3CtWA+R1iNN0RCeVun7rmOrrjBK573aWC5sgP7YsBOLK79H3tmUtz6b 9Imuj0ZyEsa76Xg9PX9Hn2myKj1hfWGS+5og9Va4hrwQC8ipjXik6NKR5GDV+hOZkktU81G5 gkQtGB9jOAYRs86QG/b7PtIlbd3+pppT0gaS+wvwMs8cuNG+Pu6KO1oC4jgdseFLu7NpABEB AAG0IlF1IFdlbnJ1byA8cXV3ZW5ydW8uYnRyZnNAZ214LmNvbT6JAVQEEwEIAD4CGwMFCwkI BwIGFQgJCgsCBBYCAwECHgECF4AWIQQt33LlpaVbqJ2qQuHCPZHzoSX+qAUCWdWCnQUJCWYC bgAKCRDCPZHzoSX+qAR8B/94VAsSNygx1C6dhb1u1Wp1Jr/lfO7QIOK/nf1PF0VpYjTQ2au8 ihf/RApTna31sVjBx3jzlmpy+lDoPdXwbI3Czx1PwDbdhAAjdRbvBmwM6cUWyqD+zjVm4RTG rFTPi3E7828YJ71Vpda2qghOYdnC45xCcjmHh8FwReLzsV2A6FtXsvd87bq6Iw2axOHVUax2 FGSbardMsHrya1dC2jF2R6n0uxaIc1bWGweYsq0LXvLcvjWH+zDgzYCUB0cfb+6Ib/ipSCYp 3i8BevMsTs62MOBmKz7til6Zdz0kkqDdSNOq8LgWGLOwUTqBh71+lqN2XBpTDu1eLZaNbxSI ilaVuQENBFnVga8BCACqU+th4Esy/c8BnvliFAjAfpzhI1wH76FD1MJPmAhA3DnX5JDORcga CbPEwhLj1xlwTgpeT+QfDmGJ5B5BlrrQFZVE1fChEjiJvyiSAO4yQPkrPVYTI7Xj34FnscPj /IrRUUka68MlHxPtFnAHr25VIuOS41lmYKYNwPNLRz9Ik6DmeTG3WJO2BQRNvXA0pXrJH1fN GSsRb+pKEKHKtL1803x71zQxCwLh+zLP1iXHVM5j8gX9zqupigQR/Cel2XPS44zWcDW8r7B0 q1eW4Jrv0x19p4P923voqn+joIAostyNTUjCeSrUdKth9jcdlam9X2DziA/DHDFfS5eq4fEv ABEBAAGJATwEGAEIACYWIQQt33LlpaVbqJ2qQuHCPZHzoSX+qAUCWdWBrwIbDAUJA8JnAAAK CRDCPZHzoSX+qA3xB/4zS8zYh3Cbm3FllKz7+RKBw/ETBibFSKedQkbJzRlZhBc+XRwF61mi f0SXSdqKMbM1a98fEg8H5kV6GTo62BzvynVrf/FyT+zWbIVEuuZttMk2gWLIvbmWNyrQnzPl mnjK4AEvZGIt1pk+3+N/CMEfAZH5Aqnp0PaoytRZ/1vtMXNgMxlfNnb96giC3KMR6U0E+siA 4V7biIoyNoaN33t8m5FwEwd2FQDG9dAXWhG13zcm9gnk63BN3wyCQR+X5+jsfBaS4dvNzvQv h8Uq/YGjCoV1ofKYh3WKMY8avjq25nlrhzD/Nto9jHp8niwr21K//pXVA81R2qaXqGbql+zo Message-ID: Date: Sat, 6 Apr 2019 09:53:07 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.3 MIME-Version: 1.0 X-Provags-ID: V03:K1:ZeP6OlBJAgBHBn3/lzrZM0HHShvMFAN3JM1AHPRHlvgR5THwQHa rWM6XbJ+2Oj6VpNhC+9AZ4whLsRQFSfgAHPAY8NAZ8Y36ai8h63Cw10AlGTA/MQjnfVho/k 63BSZchAy2vZdgukOcUZNKklafqJ7puoAcrabxZX2K6CAQ6tm+pCom2MU2zjr9mzmWaa+GZ G3u3gHjOa8aBsYIYj8hjQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:g+90SxyGnos=:znL38MtiVv6f27WZDANRij IkN4XKjGGRKSWE/KwTOlqhWvmK/xDMJv6WWBN0G6nCe0OowY19G/mzv7fS+ClE9Um3p5liyNl KHFj/59VsYJZBaPT1QabEOsZ/ZpVPefJZeTAQ9tm4yG4++iYOlQPuAK7A5ovoa/DIxRCRk3Bt b+20RH9RRk170UtlCQBiySDly/ytbUkc90czqsYomwagmqP7d4gJOUxfK1lVo3YriOePWHA/N WNkedSlku2gBtMg2xzBCtoWNlSXJGCP6lJ7lzvFjwLqjIUBR9mKG5lCofey2lVIbg1XNOLXQm ljh6EGKtI3urJfNywLuw5GVHv2XprZInRKNV7jXVZnOfpqhIFFN0Psq53sAisV6OI5ktb0zFQ QRIB9FVYdyn0Gv2KOVfwm3CKXHYuXmK8Ssxj175KLYRf06jV9FAmr6kju7TeY8V1y2wZCmoh4 Oxg7XZGauy6784PrSwTxNez8Gor4ekqT+qPt+gpJdRt/XFdspELA7Hf6jAW5DCon/x2LKNl7E zkiIRLBL3vQ4az+1mrJsW0Dv4Dh/POdzC2RTCrlPtM7myqZUPKOlxRV/Vsh7UM3he7W7VwDIQ CLPPxDAJ0fDQyvIU6E2aqVOraSZIfcpKvNKfbh0s3hF9QLG0dnluA+c7UNDuWDxA3mt8zQXPc zjkgCtyAxaOvySToJhXSmM3p+z5ZLDGUzbipoInexxTJbMHBHq5aFQUAxItNoV3rMlPHujGMO UkO8t0XbmQJIY1xN1BcOl2nJMhsUoCytwYkEg2C0tXn5C+qyzjlx2hu5+ajqd6OtDgmm5OlMX y3LKJm25QCZ2xeC/WIh6/y4A+Cxz6WS7TW91ipJ4shFfPc8mgJ0KjLKuBe1iSrOs3BLHYkM4d VIeiaENOmPQw/AcGb0W+L0HR6w49/f3vwsOocGRX49zd2SEMw+QgBZi2boLbpt 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 Hi, I'm looking into a strange behavior that we can't break bio_for_each_segment_all() after commit 6dc4f100c175 ("block: allow bio_for_each_segment_all() to iterate over multi-page bvec"). It's screwing up all bio_for_each_segment_all() call with error out branch. There is one relatively easy to trigger setup. Here is my kernel branch, which is based on David Sterb's misc-next branch: https://github.com/adam900710/linux/tree/tree_checker_testing It's just two commits ahead. Then some debug diff: Straightforward, if we break, we should have err == ret. Then run fstests btrfs/151, which will trigger a false alert in tree-checker: BTRFS critical (device dm-1): corrupt leaf: root=3 block=570572800 slot=1 devid=1 invalid total bytes: have 0 BTRFS error (device dm-1): block=570572800 write time tree block corruption detected breaking out with ret=-117 err=-117 out, but ret=0 So it looks like the break line doens't really break, but continue executing. Thanks, Qu diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index c2c0640aea55..05c880a5254b 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -851,16 +851,22 @@ static blk_status_t btree_csum_one_bio(struct bio *bio) struct bio_vec *bvec; struct btrfs_root *root; int i, ret = 0; + int err = 0; struct bvec_iter_all iter_all; ASSERT(!bio_flagged(bio, BIO_CLONED)); bio_for_each_segment_all(bvec, bio, i, iter_all) { root = BTRFS_I(bvec->bv_page->mapping->host)->root; ret = csum_dirty_buffer(root->fs_info, bvec->bv_page); - if (ret) + if (ret) { + err = ret; + pr_info("breaking out with ret=%d\n", ret); break; + } } + if (err) + pr_info("err=%d out, but ret=%d\n",err, ret); return errno_to_blk_status(ret); }