From: Junxiao Bi <junxiao.bi@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2: direct write will call ocfs2_rw_unlock() twice when doing aio+dio
Date: Mon, 24 Aug 2015 15:39:04 +0800 [thread overview]
Message-ID: <55DACA18.9020103@oracle.com> (raw)
In-Reply-To: <1440400995-6399-1-git-send-email-ryan.ding@oracle.com>
On 08/24/2015 03:23 PM, Ryan Ding wrote:
> Orabug: 21612107
>
> Use wrong return value in ocfs2_file_write_iter(). This will cause
> ocfs2_rw_unlock() be called both in write_iter & end_io, and trigger a BUG_ON.
>
> This issue exist since commit 7da839c475894ea872ec909a5d2e83dddccff5be.
Better say:
This issue is introduced by commit 7da839c47589 ("ocfs2: use
__generic_file_write_iter()") , or checkpatch will report a style error.
Other looks good.
Reviewed-by: Junxiao Bi <junxiao.bi@oracle.com>
Thanks,
Junxiao.
>
> Signed-off-by: Ryan Ding <ryan.ding@oracle.com>
> ---
> fs/ocfs2/file.c | 28 ++++++++++++++--------------
> 1 files changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index 719f7f4..33efa33 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -2372,6 +2372,20 @@ relock:
> /* buffered aio wouldn't have proper lock coverage today */
> BUG_ON(written == -EIOCBQUEUED && !(iocb->ki_flags & IOCB_DIRECT));
>
> + /*
> + * deep in g_f_a_w_n()->ocfs2_direct_IO we pass in a ocfs2_dio_end_io
> + * function pointer which is called when o_direct io completes so that
> + * it can unlock our rw lock.
> + * Unfortunately there are error cases which call end_io and others
> + * that don't. so we don't have to unlock the rw_lock if either an
> + * async dio is going to do it in the future or an end_io after an
> + * error has already done it.
> + */
> + if ((written == -EIOCBQUEUED) || (!ocfs2_iocb_is_rw_locked(iocb))) {
> + rw_level = -1;
> + unaligned_dio = 0;
> + }
> +
> if (unlikely(written <= 0))
> goto no_sync;
>
> @@ -2396,20 +2410,6 @@ relock:
> }
>
> no_sync:
> - /*
> - * deep in g_f_a_w_n()->ocfs2_direct_IO we pass in a ocfs2_dio_end_io
> - * function pointer which is called when o_direct io completes so that
> - * it can unlock our rw lock.
> - * Unfortunately there are error cases which call end_io and others
> - * that don't. so we don't have to unlock the rw_lock if either an
> - * async dio is going to do it in the future or an end_io after an
> - * error has already done it.
> - */
> - if ((ret == -EIOCBQUEUED) || (!ocfs2_iocb_is_rw_locked(iocb))) {
> - rw_level = -1;
> - unaligned_dio = 0;
> - }
> -
> if (unaligned_dio) {
> ocfs2_iocb_clear_unaligned_aio(iocb);
> mutex_unlock(&OCFS2_I(inode)->ip_unaligned_aio);
>
next prev parent reply other threads:[~2015-08-24 7:39 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-24 7:23 [Ocfs2-devel] [PATCH] ocfs2: direct write will call ocfs2_rw_unlock() twice when doing aio+dio Ryan Ding
2015-08-24 7:39 ` Junxiao Bi [this message]
2015-08-24 20:57 ` Andrew Morton
-- strict thread matches above, loose matches on Subject: below --
2015-08-24 7:09 Ryan Ding
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=55DACA18.9020103@oracle.com \
--to=junxiao.bi@oracle.com \
--cc=ocfs2-devel@oss.oracle.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 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.