From: Chandan Rajendra <chandan@linux.ibm.com> To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fscrypt@vger.kernel.org Cc: Chandan Rajendra <chandan@linux.ibm.com>, chandanrmail@gmail.com, tytso@mit.edu, adilger.kernel@dilger.ca, ebiggers@kernel.org, jaegeuk@kernel.org, yuchao0@huawei.com, hch@infradead.org Subject: [PATCH V4 4/8] fs/buffer.c: add decryption support via read_callbacks Date: Fri, 16 Aug 2019 11:48:00 +0530 [thread overview] Message-ID: <20190816061804.14840-5-chandan@linux.ibm.com> (raw) In-Reply-To: <20190816061804.14840-1-chandan@linux.ibm.com> This commit sets up read_callbacks context for buffer heads whose contents need to be decrypted on endio. Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com> --- fs/buffer.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index ce357602f471..96c4c9840746 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -45,6 +45,7 @@ #include <linux/bit_spinlock.h> #include <linux/pagevec.h> #include <linux/sched/mm.h> +#include <linux/read_callbacks.h> #include <trace/events/block.h> static int fsync_buffers_list(spinlock_t *lock, struct list_head *list); @@ -245,11 +246,7 @@ __find_get_block_slow(struct block_device *bdev, sector_t block) return ret; } -/* - * I/O completion handler for block_read_full_page() - pages - * which come unlocked at the end of I/O. - */ -static void end_buffer_async_read(struct buffer_head *bh, int uptodate) +void end_buffer_async_read(struct buffer_head *bh, int uptodate) { unsigned long flags; struct buffer_head *first; @@ -257,8 +254,6 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate) struct page *page; int page_uptodate = 1; - BUG_ON(!buffer_async_read(bh)); - page = bh->b_page; if (uptodate) { set_buffer_uptodate(bh); @@ -306,6 +301,17 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate) return; } +/* + * I/O completion handler for block_read_full_page(). Pages are unlocked + * after the I/O completes and the read callbacks (if any) have executed. + */ +static void __end_buffer_async_read(struct buffer_head *bh, int uptodate) +{ + BUG_ON(!buffer_async_read(bh)); + + read_callbacks_endio_bh(bh, uptodate, end_buffer_async_read); +} + /* * Completion handler for block_write_full_page() - pages which are unlocked * during I/O, and which have PageWriteback cleared upon I/O completion. @@ -378,7 +384,7 @@ EXPORT_SYMBOL(end_buffer_async_write); */ static void mark_buffer_async_read(struct buffer_head *bh) { - bh->b_end_io = end_buffer_async_read; + bh->b_end_io = __end_buffer_async_read; set_buffer_async_read(bh); } @@ -2293,10 +2299,15 @@ int block_read_full_page(struct page *page, get_block_t *get_block) */ for (i = 0; i < nr; i++) { bh = arr[i]; - if (buffer_uptodate(bh)) - end_buffer_async_read(bh, 1); - else + if (buffer_uptodate(bh)) { + __end_buffer_async_read(bh, 1); + } else { + if (WARN_ON(read_callbacks_setup_bh(inode, bh))) { + __end_buffer_async_read(bh, 0); + continue; + } submit_bh(REQ_OP_READ, 0, bh); + } } return 0; } -- 2.19.1
WARNING: multiple messages have this Message-ID (diff)
From: Chandan Rajendra <chandan@linux.ibm.com> To: linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fscrypt@vger.kernel.org Cc: hch@infradead.org, tytso@mit.edu, ebiggers@kernel.org, Chandan Rajendra <chandan@linux.ibm.com>, adilger.kernel@dilger.ca, chandanrmail@gmail.com, jaegeuk@kernel.org Subject: [f2fs-dev] [PATCH V4 4/8] fs/buffer.c: add decryption support via read_callbacks Date: Fri, 16 Aug 2019 11:48:00 +0530 [thread overview] Message-ID: <20190816061804.14840-5-chandan@linux.ibm.com> (raw) In-Reply-To: <20190816061804.14840-1-chandan@linux.ibm.com> This commit sets up read_callbacks context for buffer heads whose contents need to be decrypted on endio. Signed-off-by: Chandan Rajendra <chandan@linux.ibm.com> --- fs/buffer.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/fs/buffer.c b/fs/buffer.c index ce357602f471..96c4c9840746 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -45,6 +45,7 @@ #include <linux/bit_spinlock.h> #include <linux/pagevec.h> #include <linux/sched/mm.h> +#include <linux/read_callbacks.h> #include <trace/events/block.h> static int fsync_buffers_list(spinlock_t *lock, struct list_head *list); @@ -245,11 +246,7 @@ __find_get_block_slow(struct block_device *bdev, sector_t block) return ret; } -/* - * I/O completion handler for block_read_full_page() - pages - * which come unlocked at the end of I/O. - */ -static void end_buffer_async_read(struct buffer_head *bh, int uptodate) +void end_buffer_async_read(struct buffer_head *bh, int uptodate) { unsigned long flags; struct buffer_head *first; @@ -257,8 +254,6 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate) struct page *page; int page_uptodate = 1; - BUG_ON(!buffer_async_read(bh)); - page = bh->b_page; if (uptodate) { set_buffer_uptodate(bh); @@ -306,6 +301,17 @@ static void end_buffer_async_read(struct buffer_head *bh, int uptodate) return; } +/* + * I/O completion handler for block_read_full_page(). Pages are unlocked + * after the I/O completes and the read callbacks (if any) have executed. + */ +static void __end_buffer_async_read(struct buffer_head *bh, int uptodate) +{ + BUG_ON(!buffer_async_read(bh)); + + read_callbacks_endio_bh(bh, uptodate, end_buffer_async_read); +} + /* * Completion handler for block_write_full_page() - pages which are unlocked * during I/O, and which have PageWriteback cleared upon I/O completion. @@ -378,7 +384,7 @@ EXPORT_SYMBOL(end_buffer_async_write); */ static void mark_buffer_async_read(struct buffer_head *bh) { - bh->b_end_io = end_buffer_async_read; + bh->b_end_io = __end_buffer_async_read; set_buffer_async_read(bh); } @@ -2293,10 +2299,15 @@ int block_read_full_page(struct page *page, get_block_t *get_block) */ for (i = 0; i < nr; i++) { bh = arr[i]; - if (buffer_uptodate(bh)) - end_buffer_async_read(bh, 1); - else + if (buffer_uptodate(bh)) { + __end_buffer_async_read(bh, 1); + } else { + if (WARN_ON(read_callbacks_setup_bh(inode, bh))) { + __end_buffer_async_read(bh, 0); + continue; + } submit_bh(REQ_OP_READ, 0, bh); + } } return 0; } -- 2.19.1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2019-08-16 6:18 UTC|newest] Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-16 6:17 [PATCH V4 0/8] Consolidate FS read I/O callbacks code Chandan Rajendra 2019-08-16 6:17 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:17 ` [PATCH V4 1/8] buffer_head: Introduce BH_Read_Cb flag Chandan Rajendra 2019-08-16 6:17 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:17 ` [PATCH V4 2/8] FS: Introduce read callbacks Chandan Rajendra 2019-08-16 6:17 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:17 ` [PATCH V4 3/8] fs/mpage.c: Integrate " Chandan Rajendra 2019-08-16 6:17 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:18 ` Chandan Rajendra [this message] 2019-08-16 6:18 ` [f2fs-dev] [PATCH V4 4/8] fs/buffer.c: add decryption support via read_callbacks Chandan Rajendra 2019-08-16 6:18 ` [PATCH V4 5/8] f2fs: Use read_callbacks for decrypting file data Chandan Rajendra 2019-08-16 6:18 ` [f2fs-dev] " Chandan Rajendra 2019-08-18 13:45 ` Chao Yu 2019-08-18 13:45 ` Chao Yu 2019-08-19 13:33 ` Chandan Rajendra 2019-08-19 13:33 ` Chandan Rajendra 2019-08-20 7:43 ` Chao Yu 2019-08-20 7:43 ` Chao Yu 2019-08-20 7:43 ` Chao Yu 2019-08-20 5:05 ` Chandan Rajendra 2019-08-20 5:05 ` [f2fs-dev] " Chandan Rajendra 2019-08-20 5:12 ` Gao Xiang 2019-08-20 5:12 ` [f2fs-dev] " Gao Xiang 2019-08-20 5:12 ` Gao Xiang 2019-08-20 5:16 ` Gao Xiang 2019-08-20 5:16 ` [f2fs-dev] " Gao Xiang 2019-08-20 5:16 ` Gao Xiang 2019-08-20 16:25 ` Theodore Y. Ts'o 2019-08-20 16:25 ` [f2fs-dev] " Theodore Y. Ts'o 2019-08-20 17:07 ` Gao Xiang 2019-08-20 17:07 ` [f2fs-dev] " Gao Xiang via Linux-f2fs-devel 2019-08-20 16:38 ` Theodore Y. Ts'o 2019-08-20 16:38 ` [f2fs-dev] " Theodore Y. Ts'o 2019-08-20 17:31 ` Jaegeuk Kim 2019-08-20 17:31 ` [f2fs-dev] " Jaegeuk Kim 2019-08-21 2:04 ` Chandan Rajendra 2019-08-21 2:04 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:18 ` [PATCH V4 6/8] ext4: Wire up ext4_readpage[s] to use mpage_readpage[s] Chandan Rajendra 2019-08-16 6:18 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:18 ` [PATCH V4 7/8] ext4: Enable encryption for subpage-sized blocks Chandan Rajendra 2019-08-16 6:18 ` [f2fs-dev] " Chandan Rajendra 2019-08-16 6:18 ` [PATCH V4 8/8] fscrypt: remove struct fscrypt_ctx Chandan Rajendra 2019-08-16 6:18 ` [f2fs-dev] " Chandan Rajendra
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190816061804.14840-5-chandan@linux.ibm.com \ --to=chandan@linux.ibm.com \ --cc=adilger.kernel@dilger.ca \ --cc=chandanrmail@gmail.com \ --cc=ebiggers@kernel.org \ --cc=hch@infradead.org \ --cc=jaegeuk@kernel.org \ --cc=linux-ext4@vger.kernel.org \ --cc=linux-f2fs-devel@lists.sourceforge.net \ --cc=linux-fscrypt@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=tytso@mit.edu \ --cc=yuchao0@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.