From: Junxiao Bi <junxiao.bi@oracle.com>
To: ocfs2-devel@oss.oracle.com
Subject: [Ocfs2-devel] [PATCH] ocfs2: remove OCFS2_IOCB_SEM lock type in direct io
Date: Wed, 20 May 2015 12:04:14 +0800 [thread overview]
Message-ID: <555C07BE.2040701@oracle.com> (raw)
In-Reply-To: <55556992.6040002@huawei.com>
On 05/15/2015 11:35 AM, WeiWei Wang wrote:
> Hi all,
>
> In ocfs2 direct read/write, OCFS2_IOCB_SEM lock type is used to protect
> inode->i_alloc_sem rw semaphore lock in the earlier kernel version.
> However, in the latest kernel, inode->i_alloc_sem rw semaphore lock
> is not used at all, so OCFS2_IOCB_SEM lock type needs to be removed.
>
> Any comments are appreciated, thanks!
> -- Weiwei Wang
>
>
> Signed-off-by: Weiwei Wang <wangww631@huawei.com>
Looks fine.
Reviewed-by: Junxiao Bi <junxiao.bi@oracle.com>
Thanks,
Junxiao.
> ---
> fs/ocfs2/aops.c | 3 ---
> fs/ocfs2/aops.h | 7 -------
> fs/ocfs2/file.c | 31 ++++---------------------------
> 3 files changed, 4 insertions(+), 37 deletions(-)
>
> diff --git a/fs/ocfs2/aops.c b/fs/ocfs2/aops.c
> index f906a25..d3eccc0 100644
> --- a/fs/ocfs2/aops.c
> +++ b/fs/ocfs2/aops.c
> @@ -619,9 +619,6 @@ static void ocfs2_dio_end_io(struct kiocb *iocb,
> /* this io's submitter should not have unlocked this before we could */
> BUG_ON(!ocfs2_iocb_is_rw_locked(iocb));
>
> - if (ocfs2_iocb_is_sem_locked(iocb))
> - ocfs2_iocb_clear_sem_locked(iocb);
> -
> if (ocfs2_iocb_is_unaligned_aio(iocb)) {
> ocfs2_iocb_clear_unaligned_aio(iocb);
>
> diff --git a/fs/ocfs2/aops.h b/fs/ocfs2/aops.h
> index dd59599..24e496d 100644
> --- a/fs/ocfs2/aops.h
> +++ b/fs/ocfs2/aops.h
> @@ -79,7 +79,6 @@ static inline void ocfs2_iocb_set_rw_locked(struct kiocb *iocb, int level)
> enum ocfs2_iocb_lock_bits {
> OCFS2_IOCB_RW_LOCK = 0,
> OCFS2_IOCB_RW_LOCK_LEVEL,
> - OCFS2_IOCB_SEM,
> OCFS2_IOCB_UNALIGNED_IO,
> OCFS2_IOCB_NUM_LOCKS
> };
> @@ -88,12 +87,6 @@ enum ocfs2_iocb_lock_bits {
> clear_bit(OCFS2_IOCB_RW_LOCK, (unsigned long *)&iocb->private)
> #define ocfs2_iocb_rw_locked_level(iocb) \
> test_bit(OCFS2_IOCB_RW_LOCK_LEVEL, (unsigned long *)&iocb->private)
> -#define ocfs2_iocb_set_sem_locked(iocb) \
> - set_bit(OCFS2_IOCB_SEM, (unsigned long *)&iocb->private)
> -#define ocfs2_iocb_clear_sem_locked(iocb) \
> - clear_bit(OCFS2_IOCB_SEM, (unsigned long *)&iocb->private)
> -#define ocfs2_iocb_is_sem_locked(iocb) \
> - test_bit(OCFS2_IOCB_SEM, (unsigned long *)&iocb->private)
>
> #define ocfs2_iocb_set_unaligned_aio(iocb) \
> set_bit(OCFS2_IOCB_UNALIGNED_IO, (unsigned long *)&iocb->private)
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index d8b670c..fbfadb2 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -2250,7 +2250,7 @@ out:
> static ssize_t ocfs2_file_write_iter(struct kiocb *iocb,
> struct iov_iter *from)
> {
> - int direct_io, appending, rw_level, have_alloc_sem = 0;
> + int direct_io, appending, rw_level;
> int can_do_direct, has_refcount = 0;
> ssize_t written = 0;
> ssize_t ret;
> @@ -2279,16 +2279,7 @@ static ssize_t ocfs2_file_write_iter(struct kiocb *iocb,
>
> mutex_lock(&inode->i_mutex);
>
> - ocfs2_iocb_clear_sem_locked(iocb);
> -
> relock:
> - /* to match setattr's i_mutex -> rw_lock ordering */
> - if (direct_io) {
> - have_alloc_sem = 1;
> - /* communicate with ocfs2_dio_end_io */
> - ocfs2_iocb_set_sem_locked(iocb);
> - }
> -
> /*
> * Concurrent O_DIRECT writes are allowed with
> * mount_option "coherency=buffered".
> @@ -2298,7 +2289,7 @@ relock:
> ret = ocfs2_rw_lock(inode, rw_level);
> if (ret < 0) {
> mlog_errno(ret);
> - goto out_sems;
> + goto out_mutex;
> }
>
> /*
> @@ -2347,7 +2338,6 @@ relock:
> if (direct_io && !can_do_direct) {
> ocfs2_rw_unlock(inode, rw_level);
>
> - have_alloc_sem = 0;
> rw_level = -1;
>
> direct_io = 0;
> @@ -2416,7 +2406,6 @@ no_sync:
> */
> if ((ret == -EIOCBQUEUED) || (!ocfs2_iocb_is_rw_locked(iocb))) {
> rw_level = -1;
> - have_alloc_sem = 0;
> unaligned_dio = 0;
> }
>
> @@ -2429,10 +2418,7 @@ out:
> if (rw_level != -1)
> ocfs2_rw_unlock(inode, rw_level);
>
> -out_sems:
> - if (have_alloc_sem)
> - ocfs2_iocb_clear_sem_locked(iocb);
> -
> +out_mutex:
> mutex_unlock(&inode->i_mutex);
>
> if (written)
> @@ -2473,7 +2459,7 @@ bail:
> static ssize_t ocfs2_file_read_iter(struct kiocb *iocb,
> struct iov_iter *to)
> {
> - int ret = 0, rw_level = -1, have_alloc_sem = 0, lock_level = 0;
> + int ret = 0, rw_level = -1, lock_level = 0;
> struct file *filp = iocb->ki_filp;
> struct inode *inode = file_inode(filp);
>
> @@ -2490,16 +2476,11 @@ static ssize_t ocfs2_file_read_iter(struct kiocb *iocb,
> goto bail;
> }
>
> - ocfs2_iocb_clear_sem_locked(iocb);
> -
> /*
> * buffered reads protect themselves in ->readpage(). O_DIRECT reads
> * need locks to protect pending reads from racing with truncate.
> */
> if (iocb->ki_flags & IOCB_DIRECT) {
> - have_alloc_sem = 1;
> - ocfs2_iocb_set_sem_locked(iocb);
> -
> ret = ocfs2_rw_lock(inode, 0);
> if (ret < 0) {
> mlog_errno(ret);
> @@ -2535,13 +2516,9 @@ static ssize_t ocfs2_file_read_iter(struct kiocb *iocb,
> /* see ocfs2_file_write_iter */
> if (ret == -EIOCBQUEUED || !ocfs2_iocb_is_rw_locked(iocb)) {
> rw_level = -1;
> - have_alloc_sem = 0;
> }
>
> bail:
> - if (have_alloc_sem)
> - ocfs2_iocb_clear_sem_locked(iocb);
> -
> if (rw_level != -1)
> ocfs2_rw_unlock(inode, rw_level);
>
prev parent reply other threads:[~2015-05-20 4:04 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-15 3:35 [Ocfs2-devel] [PATCH] ocfs2: remove OCFS2_IOCB_SEM lock type in direct io WeiWei Wang
2015-05-16 13:20 ` [Ocfs2-devel] 答复: " Shichangkuo
2015-05-20 4:04 ` Junxiao Bi [this message]
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=555C07BE.2040701@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox