|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] xen3.3.x on modern kernel / fs/aio.c / SUSE patches.xen/xen3-auto-common.diff
>>> On 17.05.12 at 23:05, Alex Bligh <alex@xxxxxxxxxxx> wrote:
> I am busy trying to forward-port xen3.3.x onto an Ubuntu Precise kernel.
> My route of attack is to apply all the patches.xen/ files that were
> in the SUSE 3.3.2 kernel release.
>
> I appear to have been reasonably successful with this bar one change
> I don't understand.
>
> In fs/aio.c, patches.xen/xen3-autocommon.diff has the following patch hunk
> listed at the end of this email. The first hunk applies fine. The later
> hunk does not. This is because the ioctx handling appears to have changed.
> I am not sure how this works or what it is trying to do.
>
> The Ubuntu version had:
> ioctx = ioctx_alloc(nr_events);
> ret = PTR_ERR(ioctx);
> if (!IS_ERR(ioctx)) {
> ret = put_user(ioctx->user_id, ctxp);
> if (!ret) {
> put_ioctx(ioctx);
> return 0;
> }
> io_destroy(ioctx);
> }
>
> out:
> return ret;
>
> Note the put_ioctx, ioctx_alloc, and lack of get_ioctx.
>
> I /think/ the right solution here is as follows. Any ideas?
>
> ioctx = ioctx_alloc(nr_events);
> ret = PTR_ERR(ioctx);
> if (!IS_ERR(ioctx)) {
> ret = put_user(ioctx->user_id, ctxp);
> #ifdef CONFIG_EPOLL
> if (make_fd && ret >= 0)
> ret = make_aio_fd(ioctx);
> #endif
> if (!ret) {
> put_ioctx(ioctx);
> return 0;
> }
> io_destroy(ioctx);
> }
>
> out:
> return ret;
Our code (3.4-rc6) looks like this
if (!IS_ERR(ioctx)) {
ret = put_user(ioctx->user_id, ctxp);
#ifdef CONFIG_EPOLL
if (make_fd && !ret)
ret = make_aio_fd(ioctx);
#endif
if (ret < 0)
io_destroy(ioctx);
put_ioctx(ioctx);
}
The patch apply failure and other confusion are presumably due
to a backport of a first attempt to address the issue someone
spotted in the AIO code - I would assume/hope that the full
3.4 solution got/will get backported to a later 3.3.x.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |