From patchwork Mon Jul 3 06:56:34 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damien Le Moal X-Patchwork-Id: 9822053 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 95FAD60353 for ; Mon, 3 Jul 2017 06:56:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8913820008 for ; Mon, 3 Jul 2017 06:56:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7ADE22013D; Mon, 3 Jul 2017 06:56:38 +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,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 E898820008 for ; Mon, 3 Jul 2017 06:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752378AbdGCG4h (ORCPT ); Mon, 3 Jul 2017 02:56:37 -0400 Received: from esa6.hgst.iphmx.com ([216.71.154.45]:56075 "EHLO esa6.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752223AbdGCG4g (ORCPT ); Mon, 3 Jul 2017 02:56:36 -0400 X-IronPort-AV: E=Sophos;i="5.40,301,1496073600"; d="scan'208";a="31662767" Received: from sjappemgw12.hgst.com (HELO sjappemgw11.hgst.com) ([199.255.44.66]) by ob1.hgst.iphmx.com with ESMTP; 03 Jul 2017 14:56:36 +0800 Received: from washi.fujisawa.hgst.com ([10.80.170.19]) by sjappemgw11.hgst.com with ESMTP; 02 Jul 2017 23:56:36 -0700 From: Damien Le Moal To: linux-block@vger.kernel.org, Jens Axboe Cc: Christoph Hellwig Subject: [PATCH] block: Fix __blkdev_issue_zeroout loop Date: Mon, 3 Jul 2017 15:56:34 +0900 Message-Id: <20170703065634.8311-1-damien.lemoal@wdc.com> X-Mailer: git-send-email 2.9.4 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The BIO isuuing loop in __blkdev_issue_zeroout() was allocating BIOs with a maximum number of pages equal to min(nr_sects, (sector_t)BIO_MAX_PAGES) This works since the BIO will always be limited to the absolute maximum number of pages, but can be ineficient as too many pages may be requested since variables with different units (number of sectors vs number of pages) are used in the min() operation. Fix this by correctly using the same unit (number of pages). Also remove a trailing space after the bit shift in the internal loop min() call. Signed-off-by: Damien Le Moal --- block/blk-lib.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/block/blk-lib.c b/block/blk-lib.c index e8caecd..7856447 100644 --- a/block/blk-lib.c +++ b/block/blk-lib.c @@ -307,14 +307,15 @@ int __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, ret = 0; while (nr_sects != 0) { - bio = next_bio(bio, min(nr_sects, (sector_t)BIO_MAX_PAGES), + bio = next_bio(bio, min((nr_sects << 9) >> PAGE_SHIFT, + (sector_t)BIO_MAX_PAGES), gfp_mask); bio->bi_iter.bi_sector = sector; bio->bi_bdev = bdev; bio_set_op_attrs(bio, REQ_OP_WRITE, 0); while (nr_sects != 0) { - sz = min((sector_t) PAGE_SIZE >> 9 , nr_sects); + sz = min((sector_t) PAGE_SIZE >> 9, nr_sects); bi_size = bio_add_page(bio, ZERO_PAGE(0), sz << 9, 0); nr_sects -= bi_size >> 9; sector += bi_size >> 9;