diff options
Diffstat (limited to 'fs/ocfs2')
| -rw-r--r-- | fs/ocfs2/file.c | 11 | ||||
| -rw-r--r-- | fs/ocfs2/ioctl.c | 14 | ||||
| -rw-r--r-- | fs/ocfs2/journal.c | 7 | ||||
| -rw-r--r-- | fs/ocfs2/mmap.c | 2 |
4 files changed, 29 insertions, 5 deletions
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 7602783d7f4..46a1f6d7510 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
| @@ -1971,6 +1971,7 @@ int ocfs2_change_file_space(struct file *file, unsigned int cmd, | |||
| 1971 | { | 1971 | { |
| 1972 | struct inode *inode = file->f_path.dentry->d_inode; | 1972 | struct inode *inode = file->f_path.dentry->d_inode; |
| 1973 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); | 1973 | struct ocfs2_super *osb = OCFS2_SB(inode->i_sb); |
| 1974 | int ret; | ||
| 1974 | 1975 | ||
| 1975 | if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) && | 1976 | if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) && |
| 1976 | !ocfs2_writes_unwritten_extents(osb)) | 1977 | !ocfs2_writes_unwritten_extents(osb)) |
| @@ -1985,7 +1986,12 @@ int ocfs2_change_file_space(struct file *file, unsigned int cmd, | |||
| 1985 | if (!(file->f_mode & FMODE_WRITE)) | 1986 | if (!(file->f_mode & FMODE_WRITE)) |
| 1986 | return -EBADF; | 1987 | return -EBADF; |
| 1987 | 1988 | ||
| 1988 | return __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0); | 1989 | ret = mnt_want_write_file(file); |
| 1990 | if (ret) | ||
| 1991 | return ret; | ||
| 1992 | ret = __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0); | ||
| 1993 | mnt_drop_write_file(file); | ||
| 1994 | return ret; | ||
| 1989 | } | 1995 | } |
| 1990 | 1996 | ||
| 1991 | static long ocfs2_fallocate(struct file *file, int mode, loff_t offset, | 1997 | static long ocfs2_fallocate(struct file *file, int mode, loff_t offset, |
| @@ -2261,7 +2267,7 @@ static ssize_t ocfs2_file_aio_write(struct kiocb *iocb, | |||
| 2261 | if (iocb->ki_left == 0) | 2267 | if (iocb->ki_left == 0) |
| 2262 | return 0; | 2268 | return 0; |
| 2263 | 2269 | ||
| 2264 | vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE); | 2270 | sb_start_write(inode->i_sb); |
| 2265 | 2271 | ||
| 2266 | appending = file->f_flags & O_APPEND ? 1 : 0; | 2272 | appending = file->f_flags & O_APPEND ? 1 : 0; |
| 2267 | direct_io = file->f_flags & O_DIRECT ? 1 : 0; | 2273 | direct_io = file->f_flags & O_DIRECT ? 1 : 0; |
| @@ -2436,6 +2442,7 @@ out_sems: | |||
| 2436 | ocfs2_iocb_clear_sem_locked(iocb); | 2442 | ocfs2_iocb_clear_sem_locked(iocb); |
| 2437 | 2443 | ||
| 2438 | mutex_unlock(&inode->i_mutex); | 2444 | mutex_unlock(&inode->i_mutex); |
| 2445 | sb_end_write(inode->i_sb); | ||
| 2439 | 2446 | ||
| 2440 | if (written) | 2447 | if (written) |
| 2441 | ret = written; | 2448 | ret = written; |
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c index d96f7f81d8d..f20edcbfe70 100644 --- a/fs/ocfs2/ioctl.c +++ b/fs/ocfs2/ioctl.c | |||
| @@ -928,7 +928,12 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 928 | if (get_user(new_clusters, (int __user *)arg)) | 928 | if (get_user(new_clusters, (int __user *)arg)) |
| 929 | return -EFAULT; | 929 | return -EFAULT; |
| 930 | 930 | ||
| 931 | return ocfs2_group_extend(inode, new_clusters); | 931 | status = mnt_want_write_file(filp); |
| 932 | if (status) | ||
| 933 | return status; | ||
| 934 | status = ocfs2_group_extend(inode, new_clusters); | ||
| 935 | mnt_drop_write_file(filp); | ||
| 936 | return status; | ||
| 932 | case OCFS2_IOC_GROUP_ADD: | 937 | case OCFS2_IOC_GROUP_ADD: |
| 933 | case OCFS2_IOC_GROUP_ADD64: | 938 | case OCFS2_IOC_GROUP_ADD64: |
| 934 | if (!capable(CAP_SYS_RESOURCE)) | 939 | if (!capable(CAP_SYS_RESOURCE)) |
| @@ -937,7 +942,12 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 937 | if (copy_from_user(&input, (int __user *) arg, sizeof(input))) | 942 | if (copy_from_user(&input, (int __user *) arg, sizeof(input))) |
| 938 | return -EFAULT; | 943 | return -EFAULT; |
| 939 | 944 | ||
| 940 | return ocfs2_group_add(inode, &input); | 945 | status = mnt_want_write_file(filp); |
| 946 | if (status) | ||
| 947 | return status; | ||
| 948 | status = ocfs2_group_add(inode, &input); | ||
| 949 | mnt_drop_write_file(filp); | ||
| 950 | return status; | ||
| 941 | case OCFS2_IOC_REFLINK: | 951 | case OCFS2_IOC_REFLINK: |
| 942 | if (copy_from_user(&args, argp, sizeof(args))) | 952 | if (copy_from_user(&args, argp, sizeof(args))) |
| 943 | return -EFAULT; | 953 | return -EFAULT; |
diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c index 0a42ae96dca..2dd36af79e2 100644 --- a/fs/ocfs2/journal.c +++ b/fs/ocfs2/journal.c | |||
| @@ -355,11 +355,14 @@ handle_t *ocfs2_start_trans(struct ocfs2_super *osb, int max_buffs) | |||
| 355 | if (journal_current_handle()) | 355 | if (journal_current_handle()) |
| 356 | return jbd2_journal_start(journal, max_buffs); | 356 | return jbd2_journal_start(journal, max_buffs); |
| 357 | 357 | ||
| 358 | sb_start_intwrite(osb->sb); | ||
| 359 | |||
| 358 | down_read(&osb->journal->j_trans_barrier); | 360 | down_read(&osb->journal->j_trans_barrier); |
| 359 | 361 | ||
| 360 | handle = jbd2_journal_start(journal, max_buffs); | 362 | handle = jbd2_journal_start(journal, max_buffs); |
| 361 | if (IS_ERR(handle)) { | 363 | if (IS_ERR(handle)) { |
| 362 | up_read(&osb->journal->j_trans_barrier); | 364 | up_read(&osb->journal->j_trans_barrier); |
| 365 | sb_end_intwrite(osb->sb); | ||
| 363 | 366 | ||
| 364 | mlog_errno(PTR_ERR(handle)); | 367 | mlog_errno(PTR_ERR(handle)); |
| 365 | 368 | ||
| @@ -388,8 +391,10 @@ int ocfs2_commit_trans(struct ocfs2_super *osb, | |||
| 388 | if (ret < 0) | 391 | if (ret < 0) |
| 389 | mlog_errno(ret); | 392 | mlog_errno(ret); |
| 390 | 393 | ||
| 391 | if (!nested) | 394 | if (!nested) { |
| 392 | up_read(&journal->j_trans_barrier); | 395 | up_read(&journal->j_trans_barrier); |
| 396 | sb_end_intwrite(osb->sb); | ||
| 397 | } | ||
| 393 | 398 | ||
| 394 | return ret; | 399 | return ret; |
| 395 | } | 400 | } |
diff --git a/fs/ocfs2/mmap.c b/fs/ocfs2/mmap.c index 9cd41083e99..d150372fd81 100644 --- a/fs/ocfs2/mmap.c +++ b/fs/ocfs2/mmap.c | |||
| @@ -136,6 +136,7 @@ static int ocfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 136 | sigset_t oldset; | 136 | sigset_t oldset; |
| 137 | int ret; | 137 | int ret; |
| 138 | 138 | ||
| 139 | sb_start_pagefault(inode->i_sb); | ||
| 139 | ocfs2_block_signals(&oldset); | 140 | ocfs2_block_signals(&oldset); |
| 140 | 141 | ||
| 141 | /* | 142 | /* |
| @@ -165,6 +166,7 @@ static int ocfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
| 165 | 166 | ||
| 166 | out: | 167 | out: |
| 167 | ocfs2_unblock_signals(&oldset); | 168 | ocfs2_unblock_signals(&oldset); |
| 169 | sb_end_pagefault(inode->i_sb); | ||
| 168 | return ret; | 170 | return ret; |
| 169 | } | 171 | } |
| 170 | 172 | ||
