From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-f193.google.com ([209.85.214.193]:41440 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727206AbeH1Dw3 (ORCPT ); Mon, 27 Aug 2018 23:52:29 -0400 Received: by mail-pl1-f193.google.com with SMTP id b12-v6so311257plr.8 for ; Mon, 27 Aug 2018 17:03:35 -0700 (PDT) From: Omar Sandoval To: linux-fsdevel@vger.kernel.org, linux-btrfs@vger.kernel.org, Al Viro Cc: David Sterba , kernel-team@fb.com Subject: [RFC PATCH v2 5/6] fs: pass iocb to direct I/O submit_io() Date: Mon, 27 Aug 2018 17:03:18 -0700 Message-Id: In-Reply-To: References: Sender: linux-fsdevel-owner@vger.kernel.org List-ID: From: Omar Sandoval Btrfs abuses current->journal_info in btrfs_direct_IO() in order to pass around some state to get_block() and submit_io(). However, iocb->private is free for Btrfs to use, we just need it passed to submit_io(). Btrfs is the only user of submit_io(), so this doesn't affect any other filesystems. Signed-off-by: Omar Sandoval --- fs/btrfs/inode.c | 4 ++-- fs/direct-io.c | 3 ++- include/linux/fs.h | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index b61ea6dd9956..6efa6a6e3e20 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -8427,8 +8427,8 @@ static int btrfs_submit_direct_hook(struct btrfs_dio_private *dip) return 0; } -static void btrfs_submit_direct(struct bio *dio_bio, struct inode *inode, - loff_t file_offset) +static void btrfs_submit_direct(struct kiocb *iocb, struct bio *dio_bio, + struct inode *inode, loff_t file_offset) { struct btrfs_dio_private *dip = NULL; struct bio *bio = NULL; diff --git a/fs/direct-io.c b/fs/direct-io.c index 80e488afe6c6..aa367e70456d 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -473,7 +473,8 @@ static inline void dio_bio_submit(struct dio *dio, struct dio_submit *sdio) dio->bio_disk = bio->bi_disk; if (sdio->submit_io) { - sdio->submit_io(bio, dio->inode, sdio->logical_offset_in_bio); + sdio->submit_io(dio->iocb, bio, dio->inode, + sdio->logical_offset_in_bio); dio->bio_cookie = BLK_QC_T_NONE; } else dio->bio_cookie = submit_bio(bio); diff --git a/include/linux/fs.h b/include/linux/fs.h index f1a235f0fa21..daf1df811f67 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -3003,8 +3003,8 @@ extern int generic_file_open(struct inode * inode, struct file * filp); extern int nonseekable_open(struct inode * inode, struct file * filp); #ifdef CONFIG_BLOCK -typedef void (dio_submit_t)(struct bio *bio, struct inode *inode, - loff_t file_offset); +typedef void (dio_submit_t)(struct kiocb *iocb, struct bio *bio, + struct inode *inode, loff_t file_offset); enum { /* need locking between buffered and direct access */ -- 2.18.0