summaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2016-01-22 15:40:57 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2016-01-22 18:04:28 -0500
commit5955102c9984fa081b2d570cfac75c97eecf8f3b (patch)
treea4744386eac4b916e847eb4eedfada158f6527b4 /fs/ext4
parent57b8f112cfe6622ddddb8c2641206bb5fa8a112d (diff)
wrappers for ->i_mutex access
parallel to mutex_{lock,unlock,trylock,is_locked,lock_nested}, inode_foo(inode) being mutex_foo(&inode->i_mutex). Please, use those for access to ->i_mutex; over the coming cycle ->i_mutex will become rwsem, with ->lookup() done with it held only shared. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/ext4.h2
-rw-r--r--fs/ext4/extents.c20
-rw-r--r--fs/ext4/file.c18
-rw-r--r--fs/ext4/inode.c12
-rw-r--r--fs/ext4/ioctl.c20
-rw-r--r--fs/ext4/namei.c4
-rw-r--r--fs/ext4/super.c4
7 files changed, 40 insertions, 40 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 1c127213363a..0662b285dc8a 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -2896,7 +2896,7 @@ do { \
2896static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize) 2896static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize)
2897{ 2897{
2898 WARN_ON_ONCE(S_ISREG(inode->i_mode) && 2898 WARN_ON_ONCE(S_ISREG(inode->i_mode) &&
2899 !mutex_is_locked(&inode->i_mutex)); 2899 !inode_is_locked(inode));
2900 down_write(&EXT4_I(inode)->i_data_sem); 2900 down_write(&EXT4_I(inode)->i_data_sem);
2901 if (newsize > EXT4_I(inode)->i_disksize) 2901 if (newsize > EXT4_I(inode)->i_disksize)
2902 EXT4_I(inode)->i_disksize = newsize; 2902 EXT4_I(inode)->i_disksize = newsize;
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index b52fea3b7219..0ffabaf90aa5 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -4799,7 +4799,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
4799 else 4799 else
4800 max_blocks -= lblk; 4800 max_blocks -= lblk;
4801 4801
4802 mutex_lock(&inode->i_mutex); 4802 inode_lock(inode);
4803 4803
4804 /* 4804 /*
4805 * Indirect files do not support unwritten extnets 4805 * Indirect files do not support unwritten extnets
@@ -4902,7 +4902,7 @@ static long ext4_zero_range(struct file *file, loff_t offset,
4902out_dio: 4902out_dio:
4903 ext4_inode_resume_unlocked_dio(inode); 4903 ext4_inode_resume_unlocked_dio(inode);
4904out_mutex: 4904out_mutex:
4905 mutex_unlock(&inode->i_mutex); 4905 inode_unlock(inode);
4906 return ret; 4906 return ret;
4907} 4907}
4908 4908
@@ -4973,7 +4973,7 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
4973 if (mode & FALLOC_FL_KEEP_SIZE) 4973 if (mode & FALLOC_FL_KEEP_SIZE)
4974 flags |= EXT4_GET_BLOCKS_KEEP_SIZE; 4974 flags |= EXT4_GET_BLOCKS_KEEP_SIZE;
4975 4975
4976 mutex_lock(&inode->i_mutex); 4976 inode_lock(inode);
4977 4977
4978 /* 4978 /*
4979 * We only support preallocation for extent-based files only 4979 * We only support preallocation for extent-based files only
@@ -5006,7 +5006,7 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
5006 EXT4_I(inode)->i_sync_tid); 5006 EXT4_I(inode)->i_sync_tid);
5007 } 5007 }
5008out: 5008out:
5009 mutex_unlock(&inode->i_mutex); 5009 inode_unlock(inode);
5010 trace_ext4_fallocate_exit(inode, offset, max_blocks, ret); 5010 trace_ext4_fallocate_exit(inode, offset, max_blocks, ret);
5011 return ret; 5011 return ret;
5012} 5012}
@@ -5492,7 +5492,7 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len)
5492 return ret; 5492 return ret;
5493 } 5493 }
5494 5494
5495 mutex_lock(&inode->i_mutex); 5495 inode_lock(inode);
5496 /* 5496 /*
5497 * There is no need to overlap collapse range with EOF, in which case 5497 * There is no need to overlap collapse range with EOF, in which case
5498 * it is effectively a truncate operation 5498 * it is effectively a truncate operation
@@ -5587,7 +5587,7 @@ out_mmap:
5587 up_write(&EXT4_I(inode)->i_mmap_sem); 5587 up_write(&EXT4_I(inode)->i_mmap_sem);
5588 ext4_inode_resume_unlocked_dio(inode); 5588 ext4_inode_resume_unlocked_dio(inode);
5589out_mutex: 5589out_mutex:
5590 mutex_unlock(&inode->i_mutex); 5590 inode_unlock(inode);
5591 return ret; 5591 return ret;
5592} 5592}
5593 5593
@@ -5638,7 +5638,7 @@ int ext4_insert_range(struct inode *inode, loff_t offset, loff_t len)
5638 return ret; 5638 return ret;
5639 } 5639 }
5640 5640
5641 mutex_lock(&inode->i_mutex); 5641 inode_lock(inode);
5642 /* Currently just for extent based files */ 5642 /* Currently just for extent based files */
5643 if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) { 5643 if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) {
5644 ret = -EOPNOTSUPP; 5644 ret = -EOPNOTSUPP;
@@ -5757,7 +5757,7 @@ out_mmap:
5757 up_write(&EXT4_I(inode)->i_mmap_sem); 5757 up_write(&EXT4_I(inode)->i_mmap_sem);
5758 ext4_inode_resume_unlocked_dio(inode); 5758 ext4_inode_resume_unlocked_dio(inode);
5759out_mutex: 5759out_mutex:
5760 mutex_unlock(&inode->i_mutex); 5760 inode_unlock(inode);
5761 return ret; 5761 return ret;
5762} 5762}
5763 5763
@@ -5792,8 +5792,8 @@ ext4_swap_extents(handle_t *handle, struct inode *inode1,
5792 5792
5793 BUG_ON(!rwsem_is_locked(&EXT4_I(inode1)->i_data_sem)); 5793 BUG_ON(!rwsem_is_locked(&EXT4_I(inode1)->i_data_sem));
5794 BUG_ON(!rwsem_is_locked(&EXT4_I(inode2)->i_data_sem)); 5794 BUG_ON(!rwsem_is_locked(&EXT4_I(inode2)->i_data_sem));
5795 BUG_ON(!mutex_is_locked(&inode1->i_mutex)); 5795 BUG_ON(!inode_is_locked(inode1));
5796 BUG_ON(!mutex_is_locked(&inode2->i_mutex)); 5796 BUG_ON(!inode_is_locked(inode2));
5797 5797
5798 *erp = ext4_es_remove_extent(inode1, lblk1, count); 5798 *erp = ext4_es_remove_extent(inode1, lblk1, count);
5799 if (unlikely(*erp)) 5799 if (unlikely(*erp))
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 749b222e6498..8eb87e3e2752 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -113,7 +113,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
113 ext4_unwritten_wait(inode); 113 ext4_unwritten_wait(inode);
114 } 114 }
115 115
116 mutex_lock(&inode->i_mutex); 116 inode_lock(inode);
117 ret = generic_write_checks(iocb, from); 117 ret = generic_write_checks(iocb, from);
118 if (ret <= 0) 118 if (ret <= 0)
119 goto out; 119 goto out;
@@ -169,7 +169,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
169 } 169 }
170 170
171 ret = __generic_file_write_iter(iocb, from); 171 ret = __generic_file_write_iter(iocb, from);
172 mutex_unlock(&inode->i_mutex); 172 inode_unlock(inode);
173 173
174 if (ret > 0) { 174 if (ret > 0) {
175 ssize_t err; 175 ssize_t err;
@@ -186,7 +186,7 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
186 return ret; 186 return ret;
187 187
188out: 188out:
189 mutex_unlock(&inode->i_mutex); 189 inode_unlock(inode);
190 if (aio_mutex) 190 if (aio_mutex)
191 mutex_unlock(aio_mutex); 191 mutex_unlock(aio_mutex);
192 return ret; 192 return ret;
@@ -561,11 +561,11 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize)
561 int blkbits; 561 int blkbits;
562 int ret = 0; 562 int ret = 0;
563 563
564 mutex_lock(&inode->i_mutex); 564 inode_lock(inode);
565 565
566 isize = i_size_read(inode); 566 isize = i_size_read(inode);
567 if (offset >= isize) { 567 if (offset >= isize) {
568 mutex_unlock(&inode->i_mutex); 568 inode_unlock(inode);
569 return -ENXIO; 569 return -ENXIO;
570 } 570 }
571 571
@@ -613,7 +613,7 @@ static loff_t ext4_seek_data(struct file *file, loff_t offset, loff_t maxsize)
613 dataoff = (loff_t)last << blkbits; 613 dataoff = (loff_t)last << blkbits;
614 } while (last <= end); 614 } while (last <= end);
615 615
616 mutex_unlock(&inode->i_mutex); 616 inode_unlock(inode);
617 617
618 if (dataoff > isize) 618 if (dataoff > isize)
619 return -ENXIO; 619 return -ENXIO;
@@ -634,11 +634,11 @@ static loff_t ext4_seek_hole(struct file *file, loff_t offset, loff_t maxsize)
634 int blkbits; 634 int blkbits;
635 int ret = 0; 635 int ret = 0;
636 636
637 mutex_lock(&inode->i_mutex); 637 inode_lock(inode);
638 638
639 isize = i_size_read(inode); 639 isize = i_size_read(inode);
640 if (offset >= isize) { 640 if (offset >= isize) {
641 mutex_unlock(&inode->i_mutex); 641 inode_unlock(inode);
642 return -ENXIO; 642 return -ENXIO;
643 } 643 }
644 644
@@ -689,7 +689,7 @@ static loff_t ext4_seek_hole(struct file *file, loff_t offset, loff_t maxsize)
689 break; 689 break;
690 } while (last <= end); 690 } while (last <= end);
691 691
692 mutex_unlock(&inode->i_mutex); 692 inode_unlock(inode);
693 693
694 if (holeoff > isize) 694 if (holeoff > isize)
695 holeoff = isize; 695 holeoff = isize;
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index d964195ea0e2..83bc8bfb3bea 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -3231,7 +3231,7 @@ static ssize_t ext4_ext_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
3231 overwrite = *((int *)iocb->private); 3231 overwrite = *((int *)iocb->private);
3232 3232
3233 if (overwrite) 3233 if (overwrite)
3234 mutex_unlock(&inode->i_mutex); 3234 inode_unlock(inode);
3235 3235
3236 /* 3236 /*
3237 * We could direct write to holes and fallocate. 3237 * We could direct write to holes and fallocate.
@@ -3331,7 +3331,7 @@ retake_lock:
3331 inode_dio_end(inode); 3331 inode_dio_end(inode);
3332 /* take i_mutex locking again if we do a ovewrite dio */ 3332 /* take i_mutex locking again if we do a ovewrite dio */
3333 if (overwrite) 3333 if (overwrite)
3334 mutex_lock(&inode->i_mutex); 3334 inode_lock(inode);
3335 3335
3336 return ret; 3336 return ret;
3337} 3337}
@@ -3653,7 +3653,7 @@ int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
3653 handle_t *handle; 3653 handle_t *handle;
3654 loff_t size = i_size_read(inode); 3654 loff_t size = i_size_read(inode);
3655 3655
3656 WARN_ON(!mutex_is_locked(&inode->i_mutex)); 3656 WARN_ON(!inode_is_locked(inode));
3657 if (offset > size || offset + len < size) 3657 if (offset > size || offset + len < size)
3658 return 0; 3658 return 0;
3659 3659
@@ -3707,7 +3707,7 @@ int ext4_punch_hole(struct inode *inode, loff_t offset, loff_t length)
3707 return ret; 3707 return ret;
3708 } 3708 }
3709 3709
3710 mutex_lock(&inode->i_mutex); 3710 inode_lock(inode);
3711 3711
3712 /* No need to punch hole beyond i_size */ 3712 /* No need to punch hole beyond i_size */
3713 if (offset >= inode->i_size) 3713 if (offset >= inode->i_size)
@@ -3809,7 +3809,7 @@ out_dio:
3809 up_write(&EXT4_I(inode)->i_mmap_sem); 3809 up_write(&EXT4_I(inode)->i_mmap_sem);
3810 ext4_inode_resume_unlocked_dio(inode); 3810 ext4_inode_resume_unlocked_dio(inode);
3811out_mutex: 3811out_mutex:
3812 mutex_unlock(&inode->i_mutex); 3812 inode_unlock(inode);
3813 return ret; 3813 return ret;
3814} 3814}
3815 3815
@@ -3879,7 +3879,7 @@ void ext4_truncate(struct inode *inode)
3879 * have i_mutex locked because it's not necessary. 3879 * have i_mutex locked because it's not necessary.
3880 */ 3880 */
3881 if (!(inode->i_state & (I_NEW|I_FREEING))) 3881 if (!(inode->i_state & (I_NEW|I_FREEING)))
3882 WARN_ON(!mutex_is_locked(&inode->i_mutex)); 3882 WARN_ON(!inode_is_locked(inode));
3883 trace_ext4_truncate_enter(inode); 3883 trace_ext4_truncate_enter(inode);
3884 3884
3885 if (!ext4_can_truncate(inode)) 3885 if (!ext4_can_truncate(inode))
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index 2b0cb84255eb..0f6c36922c24 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -330,7 +330,7 @@ static int ext4_ioctl_setproject(struct file *filp, __u32 projid)
330 return err; 330 return err;
331 331
332 err = -EPERM; 332 err = -EPERM;
333 mutex_lock(&inode->i_mutex); 333 inode_lock(inode);
334 /* Is it quota file? Do not allow user to mess with it */ 334 /* Is it quota file? Do not allow user to mess with it */
335 if (IS_NOQUOTA(inode)) 335 if (IS_NOQUOTA(inode))
336 goto out_unlock; 336 goto out_unlock;
@@ -381,7 +381,7 @@ out_dirty:
381out_stop: 381out_stop:
382 ext4_journal_stop(handle); 382 ext4_journal_stop(handle);
383out_unlock: 383out_unlock:
384 mutex_unlock(&inode->i_mutex); 384 inode_unlock(inode);
385 mnt_drop_write_file(filp); 385 mnt_drop_write_file(filp);
386 return err; 386 return err;
387} 387}
@@ -464,9 +464,9 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
464 464
465 flags = ext4_mask_flags(inode->i_mode, flags); 465 flags = ext4_mask_flags(inode->i_mode, flags);
466 466
467 mutex_lock(&inode->i_mutex); 467 inode_lock(inode);
468 err = ext4_ioctl_setflags(inode, flags); 468 err = ext4_ioctl_setflags(inode, flags);
469 mutex_unlock(&inode->i_mutex); 469 inode_unlock(inode);
470 mnt_drop_write_file(filp); 470 mnt_drop_write_file(filp);
471 return err; 471 return err;
472 } 472 }
@@ -497,7 +497,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
497 goto setversion_out; 497 goto setversion_out;
498 } 498 }
499 499
500 mutex_lock(&inode->i_mutex); 500 inode_lock(inode);
501 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1); 501 handle = ext4_journal_start(inode, EXT4_HT_INODE, 1);
502 if (IS_ERR(handle)) { 502 if (IS_ERR(handle)) {
503 err = PTR_ERR(handle); 503 err = PTR_ERR(handle);
@@ -512,7 +512,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
512 ext4_journal_stop(handle); 512 ext4_journal_stop(handle);
513 513
514unlock_out: 514unlock_out:
515 mutex_unlock(&inode->i_mutex); 515 inode_unlock(inode);
516setversion_out: 516setversion_out:
517 mnt_drop_write_file(filp); 517 mnt_drop_write_file(filp);
518 return err; 518 return err;
@@ -658,9 +658,9 @@ group_add_out:
658 * ext4_ext_swap_inode_data before we switch the 658 * ext4_ext_swap_inode_data before we switch the
659 * inode format to prevent read. 659 * inode format to prevent read.
660 */ 660 */
661 mutex_lock(&(inode->i_mutex)); 661 inode_lock((inode));
662 err = ext4_ext_migrate(inode); 662 err = ext4_ext_migrate(inode);
663 mutex_unlock(&(inode->i_mutex)); 663 inode_unlock((inode));
664 mnt_drop_write_file(filp); 664 mnt_drop_write_file(filp);
665 return err; 665 return err;
666 } 666 }
@@ -876,11 +876,11 @@ encryption_policy_out:
876 flags = ext4_xflags_to_iflags(fa.fsx_xflags); 876 flags = ext4_xflags_to_iflags(fa.fsx_xflags);
877 flags = ext4_mask_flags(inode->i_mode, flags); 877 flags = ext4_mask_flags(inode->i_mode, flags);
878 878
879 mutex_lock(&inode->i_mutex); 879 inode_lock(inode);
880 flags = (ei->i_flags & ~EXT4_FL_XFLAG_VISIBLE) | 880 flags = (ei->i_flags & ~EXT4_FL_XFLAG_VISIBLE) |
881 (flags & EXT4_FL_XFLAG_VISIBLE); 881 (flags & EXT4_FL_XFLAG_VISIBLE);
882 err = ext4_ioctl_setflags(inode, flags); 882 err = ext4_ioctl_setflags(inode, flags);
883 mutex_unlock(&inode->i_mutex); 883 inode_unlock(inode);
884 mnt_drop_write_file(filp); 884 mnt_drop_write_file(filp);
885 if (err) 885 if (err)
886 return err; 886 return err;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 854f75de4599..06574dd77614 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -2753,7 +2753,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode)
2753 return 0; 2753 return 0;
2754 2754
2755 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && 2755 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) &&
2756 !mutex_is_locked(&inode->i_mutex)); 2756 !inode_is_locked(inode));
2757 /* 2757 /*
2758 * Exit early if inode already is on orphan list. This is a big speedup 2758 * Exit early if inode already is on orphan list. This is a big speedup
2759 * since we don't have to contend on the global s_orphan_lock. 2759 * since we don't have to contend on the global s_orphan_lock.
@@ -2835,7 +2835,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode)
2835 return 0; 2835 return 0;
2836 2836
2837 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) && 2837 WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) &&
2838 !mutex_is_locked(&inode->i_mutex)); 2838 !inode_is_locked(inode));
2839 /* Do this quick check before taking global s_orphan_lock. */ 2839 /* Do this quick check before taking global s_orphan_lock. */
2840 if (list_empty(&ei->i_orphan)) 2840 if (list_empty(&ei->i_orphan))
2841 return 0; 2841 return 0;
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 00c98fab6333..3ed01ec011d7 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -2286,10 +2286,10 @@ static void ext4_orphan_cleanup(struct super_block *sb,
2286 __func__, inode->i_ino, inode->i_size); 2286 __func__, inode->i_ino, inode->i_size);
2287 jbd_debug(2, "truncating inode %lu to %lld bytes\n", 2287 jbd_debug(2, "truncating inode %lu to %lld bytes\n",
2288 inode->i_ino, inode->i_size); 2288 inode->i_ino, inode->i_size);
2289 mutex_lock(&inode->i_mutex); 2289 inode_lock(inode);
2290 truncate_inode_pages(inode->i_mapping, inode->i_size); 2290 truncate_inode_pages(inode->i_mapping, inode->i_size);
2291 ext4_truncate(inode); 2291 ext4_truncate(inode);
2292 mutex_unlock(&inode->i_mutex); 2292 inode_unlock(inode);
2293 nr_truncates++; 2293 nr_truncates++;
2294 } else { 2294 } else {
2295 if (test_opt(sb, DEBUG)) 2295 if (test_opt(sb, DEBUG))