From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Christoph Hellwig <hch@lst.de>
Cc: viro@zeniv.linux.org.uk, Avi Kivity <avi@scylladb.com>,
linux-aio@kvack.org, linux-fsdevel@vger.kernel.org,
linux-api@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 9/9] aio: implement IOCB_CMD_FSYNC and IOCB_CMD_FDSYNC
Date: Wed, 21 Mar 2018 09:26:23 -0700 [thread overview]
Message-ID: <20180321162623.GD4807@magnolia> (raw)
In-Reply-To: <20180321073232.13366-10-hch@lst.de>
On Wed, Mar 21, 2018 at 08:32:32AM +0100, Christoph Hellwig wrote:
> Simple workqueue offload for now, but prepared for adding a real aio_fsync
> method if the need arises. Based on an earlier patch from Dave Chinner.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/aio.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 50 insertions(+)
>
> diff --git a/fs/aio.c b/fs/aio.c
> index da87cbf7c67a..79d3eb3d2dd9 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -156,9 +156,16 @@ struct kioctx {
> unsigned id;
> };
>
> +struct fsync_iocb {
> + struct work_struct work;
> + struct file *file;
> + bool datasync;
> +};
> +
> struct aio_kiocb {
> union {
> struct kiocb rw;
> + struct fsync_iocb fsync;
> };
>
> struct kioctx *ki_ctx;
> @@ -1565,6 +1572,43 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored,
> return ret;
> }
>
> +static void aio_fsync_work(struct work_struct *work)
> +{
> + struct fsync_iocb *req = container_of(work, struct fsync_iocb, work);
> + int ret;
> +
> + ret = vfs_fsync(req->file, req->datasync);
> + fput(req->file);
> + aio_complete(container_of(req, struct aio_kiocb, fsync), ret, 0);
> +}
> +
> +static int aio_fsync(struct fsync_iocb *req, struct iocb *iocb, bool datasync)
> +{
> + int ret;
> +
> + if (iocb->aio_buf)
> + return -EINVAL;
> + if (iocb->aio_offset || iocb->aio_nbytes || iocb->aio_rw_flags)
> + return -EINVAL;
> +
> + req->file = fget(iocb->aio_fildes);
> + if (unlikely(!req->file))
> + return -EBADF;
> +
> + ret = -EINVAL;
> + if (!req->file->f_op->fsync)
> + goto out_fput;
> +
> + req->datasync = datasync;
> + INIT_WORK(&req->work, aio_fsync_work);
> + schedule_work(&req->work);
> + return -EIOCBQUEUED;
> +out_fput:
> + if (unlikely(ret && ret != -EIOCBQUEUED))
> + fput(req->file);
> + return ret;
> +}
> +
> static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
> struct iocb *iocb, bool compat)
> {
> @@ -1628,6 +1672,12 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
> case IOCB_CMD_PWRITEV:
> ret = aio_write(&req->rw, iocb, true, compat);
> break;
> + case IOCB_CMD_FSYNC:
> + ret = aio_fsync(&req->fsync, iocb, false);
> + break;
> + case IOCB_CMD_FDSYNC:
> + ret = aio_fsync(&req->fsync, iocb, true);
> + break;
> default:
> pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);
> ret = -EINVAL;
> --
> 2.14.2
>
--
To unsubscribe, send a message with 'unsubscribe linux-aio' in
the body to majordomo@kvack.org. For more info on Linux AIO,
see: http://www.kvack.org/aio/
Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Christoph Hellwig <hch@lst.de>
Cc: viro@zeniv.linux.org.uk, Avi Kivity <avi@scylladb.com>,
linux-aio@kvack.org, linux-fsdevel@vger.kernel.org,
linux-api@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 9/9] aio: implement IOCB_CMD_FSYNC and IOCB_CMD_FDSYNC
Date: Wed, 21 Mar 2018 09:26:23 -0700 [thread overview]
Message-ID: <20180321162623.GD4807@magnolia> (raw)
In-Reply-To: <20180321073232.13366-10-hch@lst.de>
On Wed, Mar 21, 2018 at 08:32:32AM +0100, Christoph Hellwig wrote:
> Simple workqueue offload for now, but prepared for adding a real aio_fsync
> method if the need arises. Based on an earlier patch from Dave Chinner.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Looks ok,
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
--D
> ---
> fs/aio.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 50 insertions(+)
>
> diff --git a/fs/aio.c b/fs/aio.c
> index da87cbf7c67a..79d3eb3d2dd9 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -156,9 +156,16 @@ struct kioctx {
> unsigned id;
> };
>
> +struct fsync_iocb {
> + struct work_struct work;
> + struct file *file;
> + bool datasync;
> +};
> +
> struct aio_kiocb {
> union {
> struct kiocb rw;
> + struct fsync_iocb fsync;
> };
>
> struct kioctx *ki_ctx;
> @@ -1565,6 +1572,43 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored,
> return ret;
> }
>
> +static void aio_fsync_work(struct work_struct *work)
> +{
> + struct fsync_iocb *req = container_of(work, struct fsync_iocb, work);
> + int ret;
> +
> + ret = vfs_fsync(req->file, req->datasync);
> + fput(req->file);
> + aio_complete(container_of(req, struct aio_kiocb, fsync), ret, 0);
> +}
> +
> +static int aio_fsync(struct fsync_iocb *req, struct iocb *iocb, bool datasync)
> +{
> + int ret;
> +
> + if (iocb->aio_buf)
> + return -EINVAL;
> + if (iocb->aio_offset || iocb->aio_nbytes || iocb->aio_rw_flags)
> + return -EINVAL;
> +
> + req->file = fget(iocb->aio_fildes);
> + if (unlikely(!req->file))
> + return -EBADF;
> +
> + ret = -EINVAL;
> + if (!req->file->f_op->fsync)
> + goto out_fput;
> +
> + req->datasync = datasync;
> + INIT_WORK(&req->work, aio_fsync_work);
> + schedule_work(&req->work);
> + return -EIOCBQUEUED;
> +out_fput:
> + if (unlikely(ret && ret != -EIOCBQUEUED))
> + fput(req->file);
> + return ret;
> +}
> +
> static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
> struct iocb *iocb, bool compat)
> {
> @@ -1628,6 +1672,12 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
> case IOCB_CMD_PWRITEV:
> ret = aio_write(&req->rw, iocb, true, compat);
> break;
> + case IOCB_CMD_FSYNC:
> + ret = aio_fsync(&req->fsync, iocb, false);
> + break;
> + case IOCB_CMD_FDSYNC:
> + ret = aio_fsync(&req->fsync, iocb, true);
> + break;
> default:
> pr_debug("invalid aio operation %d\n", iocb->aio_lio_opcode);
> ret = -EINVAL;
> --
> 2.14.2
>
next prev parent reply other threads:[~2018-03-21 16:26 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-21 7:32 io_pgetevents & aio fsync Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 7:32 ` [PATCH 1/9] aio: don't print the page size at boot time Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:12 ` Greg KH
2018-03-21 9:12 ` Greg KH
2018-03-21 7:32 ` [PATCH 2/9] aio: remove an outdated comment in aio_complete Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:14 ` Greg KH
2018-03-21 9:14 ` Greg KH
2018-03-21 9:17 ` Christoph Hellwig
2018-03-21 9:17 ` Christoph Hellwig
2018-03-21 7:32 ` [PATCH 3/9] aio: refactor read/write iocb setup Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:15 ` Greg KH
2018-03-21 9:15 ` Greg KH
2018-03-21 7:32 ` [PATCH 4/9] aio: sanitize ki_list handling Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:16 ` Greg KH
2018-03-21 9:16 ` Greg KH
2018-03-22 15:24 ` Al Viro
2018-03-22 15:24 ` Al Viro
2018-03-22 17:04 ` Christoph Hellwig
2018-03-22 17:04 ` Christoph Hellwig
2018-03-21 7:32 ` [PATCH 5/9] aio: simplify cancellation Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:17 ` Greg KH
2018-03-21 9:17 ` Greg KH
2018-03-21 16:23 ` Darrick J. Wong
2018-03-21 16:23 ` Darrick J. Wong
2018-03-21 7:32 ` [PATCH 6/9] aio: delete iocbs from the active_reqs list in kiocb_cancel Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:17 ` Greg KH
2018-03-21 9:17 ` Greg KH
2018-03-21 16:23 ` Darrick J. Wong
2018-03-21 16:23 ` Darrick J. Wong
2018-03-21 7:32 ` [PATCH 7/9] aio: add delayed cancel support Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:18 ` Greg KH
2018-03-21 9:18 ` Greg KH
2018-03-21 16:23 ` Darrick J. Wong
2018-03-21 16:23 ` Darrick J. Wong
2018-03-22 16:33 ` Al Viro
2018-03-22 16:33 ` Al Viro
2018-03-21 7:32 ` [PATCH 8/9] aio: implement io_pgetevents Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:24 ` Greg KH
2018-03-21 9:24 ` Greg KH
2018-03-21 9:29 ` Christoph Hellwig
2018-03-21 9:29 ` Christoph Hellwig
2018-03-21 14:39 ` Greg KH
2018-03-21 14:39 ` Greg KH
2018-03-21 16:26 ` Darrick J. Wong
2018-03-21 16:26 ` Darrick J. Wong
2018-03-21 7:32 ` [PATCH 9/9] aio: implement IOCB_CMD_FSYNC and IOCB_CMD_FDSYNC Christoph Hellwig
2018-03-21 7:32 ` Christoph Hellwig
2018-03-21 9:27 ` Greg KH
2018-03-21 9:27 ` Greg KH
2018-03-21 9:30 ` Christoph Hellwig
2018-03-21 9:30 ` Christoph Hellwig
2018-03-21 16:26 ` Darrick J. Wong [this message]
2018-03-21 16:26 ` Darrick J. Wong
2018-03-22 16:36 ` io_pgetevents & aio fsync Al Viro
2018-03-22 16:36 ` Al Viro
2018-03-22 16:36 ` Al Viro
2018-03-22 16:36 ` Al Viro
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=20180321162623.GD4807@magnolia \
--to=darrick.wong@oracle.com \
--cc=avi@scylladb.com \
--cc=hch@lst.de \
--cc=linux-aio@kvack.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/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: link
Be 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.