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=-8.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 DC922C4338F for ; Thu, 12 Aug 2021 21:26:14 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 664B660F35 for ; Thu, 12 Aug 2021 21:26:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 664B660F35 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id D07B88D0001; Thu, 12 Aug 2021 17:26:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CB7EE6B0071; Thu, 12 Aug 2021 17:26:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B7F158D0001; Thu, 12 Aug 2021 17:26:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0203.hostedemail.com [216.40.44.203]) by kanga.kvack.org (Postfix) with ESMTP id 9A6B26B006C for ; Thu, 12 Aug 2021 17:26:13 -0400 (EDT) Received: from smtpin21.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 41511824C442 for ; Thu, 12 Aug 2021 21:26:13 +0000 (UTC) X-FDA: 78467711826.21.DE119F9 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf28.hostedemail.com (Postfix) with ESMTP id 8F77F90057C0 for ; Thu, 12 Aug 2021 21:26:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=IaxypzM/Vd450pfEGpkrf9PDYM68Z4Ke2vXmaf+5usc=; b=bBdMGgY0e395Pv6868WWSWwx1w UhvtZIeN6lIkZJlSfHuaOVvuJtwbmiqCG2gdHG+A64njOfxRkQijGLcH28jQ4Oqxar3V8wGtcoPdD OUHoh1P0NfrvIUp/OilxQEWgtRabRDfM1gHd3G8xpygLnkxr9jyOmgS91wnFsMPV0i9D38g2IWQok a8bF0Ug0uMnucRBqfkQ0BoYG8MwgRahuFc2nZ4rmWoauoB/pRxCr6CJAJ6uihg1xBhMtkyyw5yT38 L8cKGJp3+zTy4wXZoKULOwgopWVqyRRED0w5R5GliyWgzKw/NdlE0PX2Q2XjLIr/xybT2vawr4NBP I9P/w5pw==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1mEIB0-00F0Hk-1z; Thu, 12 Aug 2021 21:23:54 +0000 Date: Thu, 12 Aug 2021 22:23:46 +0100 From: Matthew Wilcox To: David Howells Cc: trond.myklebust@primarydata.com, darrick.wong@oracle.com, hch@lst.de, viro@zeniv.linux.org.uk, jlayton@kernel.org, sfrench@samba.org, torvalds@linux-foundation.org, linux-nfs@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v2 3/5] mm: Make swap_readpage() for SWP_FS_OPS use ->direct_IO() not ->readpage() Message-ID: References: <162879971699.3306668.8977537647318498651.stgit@warthog.procyon.org.uk> <162879974434.3306668.4798886633463058599.stgit@warthog.procyon.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <162879974434.3306668.4798886633463058599.stgit@warthog.procyon.org.uk> Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=bBdMGgY0; spf=none (imf28.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org; dmarc=none X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 8F77F90057C0 X-Stat-Signature: pibs5431ojuzbp1s4hsrktgrk14rwoyc X-HE-Tag: 1628803572-865755 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, Aug 12, 2021 at 09:22:24PM +0100, David Howells wrote: > +++ b/include/linux/fs.h > @@ -336,6 +336,7 @@ struct kiocb { > union { > unsigned int ki_cookie; /* for ->iopoll */ > struct wait_page_queue *ki_waitq; /* for async buffered IO */ > + struct page *ki_swap_page; /* For swapfile_read/write */ Nice idea. > +static void __swapfile_read_complete(struct kiocb *iocb, long ret, long ret2) I would make this take a struct page * and just one 'ret'. > +{ > + struct page *page = iocb->ki_swap_page; > + > + if (ret == PAGE_SIZE) { page_size(page)? > + kiocb.ki_pos = page_file_offset(page); We talked about swap_file_pos(), right? > + ret = swap_file->f_mapping->a_ops->direct_IO(&kiocb, &to); > + > + __swapfile_read_complete(&kiocb, ret, 0); > + return (ret > 0) ? 0 : ret; What if it returns a short read? > +static int swapfile_read(struct swap_info_struct *sis, struct page *page, > + bool synchronous) > +{ > + struct swapfile_kiocb *ki; > + struct file *swap_file = sis->swap_file; > + struct bio_vec bv = { > + .bv_page = page, > + .bv_len = thp_size(page), > + .bv_offset = 0 > + }; > + struct iov_iter to; > + int ret; > + > + if (synchronous) > + return swapfile_read_sync(sis, page); Seems a shame to set up the bio_vec and iov_iter twice. Maybe call: iov_iter_bvec(&to, READ, &bv, 1, thp_size(page)); before swapfile_read_sync() and pass a pointer to 'to' to swapfile_read_sync?