From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F11F5C4361B for ; Tue, 15 Dec 2020 22:47:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BB81F22D02 for ; Tue, 15 Dec 2020 22:47:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729791AbgLOWrg (ORCPT ); Tue, 15 Dec 2020 17:47:36 -0500 Received: from mail108.syd.optusnet.com.au ([211.29.132.59]:47641 "EHLO mail108.syd.optusnet.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729716AbgLOWrf (ORCPT ); Tue, 15 Dec 2020 17:47:35 -0500 X-Greylist: delayed 1800 seconds by postgrey-1.27 at vger.kernel.org; Tue, 15 Dec 2020 17:47:34 EST Received: from dread.disaster.area (pa49-179-6-140.pa.nsw.optusnet.com.au [49.179.6.140]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id B60E61ACD12; Wed, 16 Dec 2020 09:16:51 +1100 (AEDT) Received: from dave by dread.disaster.area with local (Exim 4.92.3) (envelope-from ) id 1kpIck-004MEv-Bl; Wed, 16 Dec 2020 09:16:50 +1100 Date: Wed, 16 Dec 2020 09:16:50 +1100 From: Dave Chinner To: Goldwyn Rodrigues Cc: linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org, darrick.wong@oracle.com, hch@infradead.org, nborisov@suse.com, Goldwyn Rodrigues Subject: Re: [PATCH 1/2] iomap: Separate out generic_write_sync() from iomap_dio_complete() Message-ID: <20201215221650.GR3913616@dread.disaster.area> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.3 cv=F8MpiZpN c=1 sm=1 tr=0 cx=a_idp_d a=uDU3YIYVKEaHT0eX+MXYOQ==:117 a=uDU3YIYVKEaHT0eX+MXYOQ==:17 a=kj9zAlcOel0A:10 a=zTNgK-yGK50A:10 a=iox4zFpeAAAA:8 a=7-415B0cAAAA:8 a=vO0O9KBZJt_N6kGT6psA:9 a=CjuIK1q_8ugA:10 a=WzC6qhA0u3u7Ye7llzcV:22 a=biEYGPWJfzWAr4FL6Ov7:22 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org On Tue, Dec 15, 2020 at 12:06:35PM -0600, Goldwyn Rodrigues wrote: > From: Goldwyn Rodrigues > > This introduces a separate function __iomap_dio_complte() which > completes the Direct I/O without performing the write sync. > > Filesystems such as btrfs which require an inode_lock for sync can call > __iomap_dio_complete() and must perform sync on their own after unlock. > > Signed-off-by: Goldwyn Rodrigues > --- > fs/iomap/direct-io.c | 16 +++++++++++++--- > include/linux/iomap.h | 2 +- > 2 files changed, 14 insertions(+), 4 deletions(-) > > diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c > index 933f234d5bec..11a108f39fd9 100644 > --- a/fs/iomap/direct-io.c > +++ b/fs/iomap/direct-io.c > @@ -76,7 +76,7 @@ static void iomap_dio_submit_bio(struct iomap_dio *dio, struct iomap *iomap, > dio->submit.cookie = submit_bio(bio); > } > > -ssize_t iomap_dio_complete(struct iomap_dio *dio) > +ssize_t __iomap_dio_complete(struct iomap_dio *dio) > { > const struct iomap_dio_ops *dops = dio->dops; > struct kiocb *iocb = dio->iocb; > @@ -119,18 +119,28 @@ ssize_t iomap_dio_complete(struct iomap_dio *dio) > } > > inode_dio_end(file_inode(iocb->ki_filp)); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(__iomap_dio_complete); > + > +ssize_t iomap_dio_complete(struct iomap_dio *dio) > +{ > + ssize_t ret; > + > + ret = __iomap_dio_complete(dio); > /* > * If this is a DSYNC write, make sure we push it to stable storage now > * that we've written data. > */ > if (ret > 0 && (dio->flags & IOMAP_DIO_NEED_SYNC)) > - ret = generic_write_sync(iocb, ret); > + ret = generic_write_sync(dio->iocb, ret); > > kfree(dio); > > return ret; > } > -EXPORT_SYMBOL_GPL(iomap_dio_complete); > + NACK. If you don't want iomap_dio_complete to do O_DSYNC work after successfully writing data, strip those flags out of the kiocb before you call iomap_dio_rw() and do it yourself after calling iomap_dio_complete(). Cheers, Dave. -- Dave Chinner david@fromorbit.com