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 <wangww...@huawei.com> Looks fine.
Reviewed-by: Junxiao Bi <junxiao...@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); > _______________________________________________ Ocfs2-devel mailing list Ocfs2-devel@oss.oracle.com https://oss.oracle.com/mailman/listinfo/ocfs2-devel