Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp2464602ybl; Mon, 19 Aug 2019 02:28:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqwP2nq5NvgqfjGVwE4ikZDYsF0rumcbskQHCYM05TYTfnpFoSm7mxQ/z9URmOXpBa5BVufP X-Received: by 2002:a17:902:1e3:: with SMTP id b90mr20963570plb.82.1566206921159; Mon, 19 Aug 2019 02:28:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566206921; cv=none; d=google.com; s=arc-20160816; b=xuhR/v+44PfFaQbCxFSRKrF0qUWsWrzELq132wOqzDkxpv5ipBvb1ccJDVvUgpaOw9 j7UPBgJtWh/yZFHfO/e/eMHfeg7BLJ/jbHzkpOXm6c72IxyyEQ+YfkOf8mI+DGbVkwMx xYhsp+w9BL1sv8ZW8v5nGD4D3G6hB83nlclPw72rAQWDjS/UYCTkuLQeA1t6WpApTlNs VZtG9fCSUoTl3HIwIp8LrAQdnKuETY/PvFDcjwSrrfVMq2ZxDMVKTURQZxN1weGIe0ba 0/BMTP+AEjXOjCs52PS/sZ0TMHq3U3T2ojvRCQR34z09fJNg0Wd1OLuoALe+RCbnWAqJ 58BQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=KKVW5yULDoWPsPDFlzL5ik05cdljwhyET2JhsabbZbk=; b=dWAT/3nW431DINNKI/KuxgGNdsfwQOtOHpfb/+xHfmtYxQzpdnbpYsBQVwzVR8XA8G /EmRaZWDVdLadHzb7B5BVxTNHdPF00BcolS0zye9e1EWVjkMXccAe/L3yQM7ax/j8hCs lS/qpKZl4YraIozfwC46juKF0AcDY7hALmCQdTvd6Jw7Gl+d9L7adDHsbeDrbxpfYfc6 3qqfyZD1SIo+eXNqYXvR9fgB9z5OspQxzSQoGKigHRuDekP5WMl9+rpJWXmE2UuqN0/5 JetyMEMXg38mnU6WlVpVUfRDyEjsQBGfKXt4PNM+YihrYfgtNGkQFFtVIe2OiMUzr/8l usJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=wA2NJI4e; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=android.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d1si371278pla.79.2019.08.19.02.28.26; Mon, 19 Aug 2019 02:28:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@android.com header.s=20161025 header.b=wA2NJI4e; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=android.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727379AbfHSJ0T (ORCPT + 99 others); Mon, 19 Aug 2019 05:26:19 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:33812 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727308AbfHSJ0T (ORCPT ); Mon, 19 Aug 2019 05:26:19 -0400 Received: by mail-lj1-f194.google.com with SMTP id x18so1086816ljh.1 for ; Mon, 19 Aug 2019 02:26:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=android.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=KKVW5yULDoWPsPDFlzL5ik05cdljwhyET2JhsabbZbk=; b=wA2NJI4eovu2KpJ16T8gEf1zOYXo4yJ2Y4xCKZyg1F0xC15FaVXCqI5Wua5J882DvI IykJke3OhdZlJwz4Y9+xJqoOHTBlGxM2hzvh5IU5CkHmyf2ecDt5N3dtwiv2IJe4ztrY xari8RXm+Jz8+I2kYOBEzNkyCoZOaihUeuk+QEIMe9eu90E8/Dikt6uObUgDip3Vdt+/ Y6yeHs3U5dXuUo3xknHjxlhJYDqviVSrrMbInCzoKb8KJFxrOsuwcGeaIBrpcg7yuzHD w9GESdLzZr43tmaKiFOhA4pjW3ViiEZPbrpcm0S5AWy7vHRM/eSRUhgjL4zuW8BVunM0 dfaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=KKVW5yULDoWPsPDFlzL5ik05cdljwhyET2JhsabbZbk=; b=P3NmUywRW34eOANqDAEXXw7n4duTVg57aeje4dMGia2bPSGmp7p6BDscpmr/Exz7Fh DMPoayGeVU4SZCnlb1MoCqJqg4Ma5HBEvXYgxYQV7Bu4ViDwNK5eP9pL/G2Lij/YqAL/ LwszgY7kWv2eW5v913l1GQFyh7j5BZtAqpzywl82cN+HVUeh0z1YQUSdmw9hEybZqoWU rHmpHG0bdwDqZN3aIWOjTnzJDvqx87OfijKGlb9/ZMPY3QPFF+izX4Kq3xj2VvZn9cok 88pp2mQPwi2ay/g0vhM57iFWdmmm/Ji+OUH2R95nvNfv2D3Yu/ITWc6FTgtDnWhBQxDk Xy8A== X-Gm-Message-State: APjAAAVqVbP7dvpULaKRXymoSMnuCngJj/6mpV3CqEDdtpjx9AacrLua WuP4KrE+CmoSskXgdPxOX4oafmlm8GcRG+tnioZgcg== X-Received: by 2002:a05:651c:153:: with SMTP id c19mr2118768ljd.152.1566206777474; Mon, 19 Aug 2019 02:26:17 -0700 (PDT) MIME-Version: 1.0 References: <20190814103244.92518-1-maco@android.com> <20190814113348.GA525@ming.t460p> In-Reply-To: From: Martijn Coenen Date: Mon, 19 Aug 2019 11:26:06 +0200 Message-ID: Subject: Re: [PATCH] RFC: loop: Avoid calling blk_mq_freeze_queue() when possible. To: Ming Lei Cc: Jens Axboe , linux-block , LKML , Greg KH , kernel-team@android.com, Narayan Kamath , Dario Freni , Nikita Ioffe , Jiyong Park , Martijn Coenen Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 19, 2019 at 11:06 AM Martijn Coenen wrote: > One idea to fix is to call blk_queue_logical_block_size() as part of > LOOP_SET_FD, to match the block size of the backing fs in case the > backing file is opened with O_DIRECT; you could argue that if the > backing file is opened with O_DIRECT, this is what the user wanted > anyway. This would allow us to get rid of the latter two ioctl's and > already save quite some time. Basically: diff --git a/drivers/block/loop.c b/drivers/block/loop.c index ab7ca5989097a..ad3db72fbd729 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -994,6 +994,12 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync) blk_queue_write_cache(lo->lo_queue, true, false); + if(io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev) { + /* In case of direct I/O, match underlying block size */ + blk_queue_logical_block_size(lo->lo_queue, + bdev_logical_block_size(inode->i_sb->s_bdev)); + } + loop_update_rotational(lo); loop_update_dio(lo); > > Thanks, > Martijn > > > > > Something like the following patch: > > > > diff --git a/drivers/block/loop.c b/drivers/block/loop.c > > index a7461f482467..8791f9242583 100644 > > --- a/drivers/block/loop.c > > +++ b/drivers/block/loop.c > > @@ -1015,6 +1015,9 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode, > > */ > > bdgrab(bdev); > > mutex_unlock(&loop_ctl_mutex); > > + > > + percpu_ref_switch_to_percpu(&lo->lo_queue->q_usage_counter); > > + > > if (partscan) > > loop_reread_partitions(lo, bdev); > > if (claimed_bdev) > > @@ -1171,6 +1174,8 @@ static int __loop_clr_fd(struct loop_device *lo, bool release) > > lo->lo_state = Lo_unbound; > > mutex_unlock(&loop_ctl_mutex); > > > > + percpu_ref_switch_to_atomic(&lo->lo_queue->q_usage_counter, NULL); > > + > > /* > > * Need not hold loop_ctl_mutex to fput backing file. > > * Calling fput holding loop_ctl_mutex triggers a circular > > @@ -2003,6 +2008,12 @@ static int loop_add(struct loop_device **l, int i) > > } > > lo->lo_queue->queuedata = lo; > > > > + /* > > + * cheat block layer for not switching to q_usage_counter's > > + * percpu mode before loop becomes Lo_bound > > + */ > > + blk_queue_flag_set(QUEUE_FLAG_INIT_DONE, lo->lo_queue); > > + > > blk_queue_max_hw_sectors(lo->lo_queue, BLK_DEF_MAX_SECTORS); > > > > /* > > > > > > thanks, > > Ming