From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Chandan Rajendra Subject: Re: [PATCH V3 4/7] fs/mpage.c: Integrate read callbacks Date: Tue, 25 Jun 2019 11:51:14 +0530 In-Reply-To: <20190621211454.GC167064@gmail.com> References: <20190616160813.24464-1-chandan@linux.ibm.com> <20190616160813.24464-5-chandan@linux.ibm.com> <20190621211454.GC167064@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Message-Id: <1847149.B8S3WBCFIi@localhost.localdomain> To: Eric Biggers Cc: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fscrypt@vger.kernel.org, tytso@mit.edu, adilger.kernel@dilger.ca, jaegeuk@kernel.org, yuchao0@huawei.com, hch@infradead.org List-ID: On Saturday, June 22, 2019 2:44:55 AM IST Eric Biggers wrote: > On Sun, Jun 16, 2019 at 09:38:10PM +0530, Chandan Rajendra wrote: > > This commit adds code to make do_mpage_readpage() to be "read callbacks" > > aware i.e. for files requiring decryption, do_mpage_readpage() now > > sets up the read callbacks state machine when allocating a bio and later > > starts execution of the state machine after file data is read from the > > underlying disk. > > > > Signed-off-by: Chandan Rajendra > > --- > > fs/mpage.c | 11 ++++++++++- > > 1 file changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/fs/mpage.c b/fs/mpage.c > > index 436a85260394..611ad122fc92 100644 > > --- a/fs/mpage.c > > +++ b/fs/mpage.c > > @@ -30,6 +30,7 @@ > > #include > > #include > > #include > > +#include > > #include "internal.h" > > > > /* > > @@ -49,6 +50,8 @@ static void mpage_end_io(struct bio *bio) > > struct bio_vec *bv; > > struct bvec_iter_all iter_all; > > > > + if (read_callbacks_end_bio(bio)) > > + return; > > bio_for_each_segment_all(bv, bio, iter_all) { > > struct page *page = bv->bv_page; > > page_endio(page, bio_op(bio), > > @@ -309,6 +312,12 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) > > gfp); > > if (args->bio == NULL) > > goto confused; > > + > > + if (read_callbacks_setup(inode, args->bio, NULL)) { > > + bio_put(args->bio); > > + args->bio = NULL; > > + goto confused; > > + } > > } > > > > length = first_hole << blkbits; > > @@ -330,7 +339,7 @@ static struct bio *do_mpage_readpage(struct mpage_readpage_args *args) > > confused: > > if (args->bio) > > args->bio = mpage_bio_submit(REQ_OP_READ, op_flags, args->bio); > > - if (!PageUptodate(page)) > > + if (!PageUptodate(page) && !PageError(page)) > > block_read_full_page(page, args->get_block); > > else > > unlock_page(page); > > Why is the !PageError() check needed here? > Sorry, Its a remnant from when I was debugging the patchset. I will remove this. -- chandan