From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Zach Brown <zab@redhat.com>
Cc: axboe@kernel.dk, martin.petersen@oracle.com,
JBottomley@parallels.com, jmoyer@redhat.com, bcrl@kvack.org,
viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org,
linux-aio@kvack.org, linux-scsi@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH 3/6] aio/dio: enable PI passthrough
Date: Wed, 2 Apr 2014 13:44:20 -0700 [thread overview]
Message-ID: <20140402204420.GB10230@birch.djwong.org> (raw)
In-Reply-To: <20140402200133.GK2394@lenny.home.zabbo.net>
On Wed, Apr 02, 2014 at 01:01:33PM -0700, Zach Brown wrote:
> > +static int setup_pi_ext(struct kiocb *req, int is_write)
> > +{
> > + struct file *file = req->ki_filp;
> > + struct io_extension *ext = &req->ki_ioext->ke_kern;
> > + void *p;
> > + unsigned long start, end;
> > + int retval;
> > +
> > + if (!(file->f_flags & O_DIRECT)) {
> > + pr_debug("EINVAL: can't use PI without O_DIRECT.\n");
> > + return -EINVAL;
> > + }
> > +
> > + BUG_ON(req->ki_ioext->ke_pi_iter.pi_userpages);
> > +
> > + end = (((unsigned long)ext->ie_pi_buf) + ext->ie_pi_buflen +
> > + PAGE_SIZE - 1) >> PAGE_SHIFT;
> > + start = ((unsigned long)ext->ie_pi_buf) >> PAGE_SHIFT;
> > + req->ki_ioext->ke_pi_iter.pi_offset = offset_in_page(ext->ie_pi_buf);
> > + req->ki_ioext->ke_pi_iter.pi_len = ext->ie_pi_buflen;
> > + req->ki_ioext->ke_pi_iter.pi_nrpages = end - start;
> > + p = kzalloc(req->ki_ioext->ke_pi_iter.pi_nrpages *
> > + sizeof(struct page *),
> > + GFP_NOIO);
>
> Can userspace give us bad data and get us to generate insane allcation
> attempt warnings?
Easily. One of the bits I have to work on for the PI part is figuring out how
to check with the PI provider that the arguments (the iovec and the pi buffer)
actually make any sense, in terms of length and alignment requirements (PI
tuples can't cross pages). I think it's as simple as adding a bio_integrity
ops call, and then calling down to it from the kiocb level.
One thing I'm not sure about: What's the largest IO (in terms of # of blocks,
not # of struct iovecs) that I can throw at the kernel?
> > + if (p == NULL) {
> > + pr_err("%s: no room for page array?\n", __func__);
> > + return -ENOMEM;
> > + }
> > + req->ki_ioext->ke_pi_iter.pi_userpages = p;
> > +
> > + retval = get_user_pages_fast((unsigned long)ext->ie_pi_buf,
> > + req->ki_ioext->ke_pi_iter.pi_nrpages,
> > + is_write,
>
> Isn't this is_write backwards? If it's a write syscall then the PI
> pages is going to be read from.
Yes, I think so. Good catch!
--D
>
> - z
> --
> To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-04-02 20:44 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-24 16:22 [RFC PATCH DONOTMERGE v2 0/6] userspace PI passthrough via AIO/DIO Darrick J. Wong
2014-03-24 16:22 ` [PATCH 1/6] fs/bio-integrity: remove duplicate code Darrick J. Wong
2014-04-02 19:17 ` Zach Brown
2014-04-02 20:35 ` Darrick J. Wong
2014-03-24 16:22 ` [PATCH 2/6] io: define an interface for IO extensions Darrick J. Wong
[not found] ` <20140324162244.10848.46322.stgit-PTl6brltDGh4DFYR7WNSRA@public.gmane.org>
2014-04-02 19:22 ` Jeff Moyer
2014-04-02 22:08 ` Darrick J. Wong
2014-04-02 19:49 ` Zach Brown
2014-04-02 22:28 ` Darrick J. Wong
2014-04-02 22:53 ` Zach Brown
2014-04-02 23:06 ` Darrick J. Wong
2014-03-24 16:22 ` [PATCH 3/6] aio/dio: enable PI passthrough Darrick J. Wong
2014-04-02 20:01 ` Zach Brown
2014-04-02 20:44 ` Darrick J. Wong [this message]
2014-04-02 22:33 ` Zach Brown
2014-04-02 22:55 ` Darrick J. Wong
2014-03-24 16:22 ` [PATCH 4/6] PI IO extension: allow user to ask kernel to fill in parts of the protection info Darrick J. Wong
2014-03-24 16:23 ` [PATCH 5/6] PI IO extension: advertise possible userspace flags Darrick J. Wong
2014-03-24 16:23 ` [PATCH 6/6] blk-integrity: refactor various routines Darrick J. Wong
2014-04-02 19:14 ` [RFC PATCH DONOTMERGE v2 0/6] userspace PI passthrough via AIO/DIO Zach Brown
2014-04-02 20:05 ` Zach Brown
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=20140402204420.GB10230@birch.djwong.org \
--to=darrick.wong@oracle.com \
--cc=JBottomley@parallels.com \
--cc=axboe@kernel.dk \
--cc=bcrl@kvack.org \
--cc=jmoyer@redhat.com \
--cc=linux-aio@kvack.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=viro@zeniv.linux.org.uk \
--cc=zab@redhat.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).