|
@@ -1971,6 +1971,7 @@ int ocfs2_change_file_space(struct file *file, unsigned int cmd,
|
|
|
{
|
|
|
struct inode *inode = file->f_path.dentry->d_inode;
|
|
|
struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
|
|
|
+ int ret;
|
|
|
|
|
|
if ((cmd == OCFS2_IOC_RESVSP || cmd == OCFS2_IOC_RESVSP64) &&
|
|
|
!ocfs2_writes_unwritten_extents(osb))
|
|
@@ -1985,7 +1986,12 @@ int ocfs2_change_file_space(struct file *file, unsigned int cmd,
|
|
|
if (!(file->f_mode & FMODE_WRITE))
|
|
|
return -EBADF;
|
|
|
|
|
|
- return __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0);
|
|
|
+ ret = mnt_want_write_file(file);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ ret = __ocfs2_change_file_space(file, inode, file->f_pos, cmd, sr, 0);
|
|
|
+ mnt_drop_write_file(file);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
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,
|
|
|
if (iocb->ki_left == 0)
|
|
|
return 0;
|
|
|
|
|
|
- vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE);
|
|
|
+ sb_start_write(inode->i_sb);
|
|
|
|
|
|
appending = file->f_flags & O_APPEND ? 1 : 0;
|
|
|
direct_io = file->f_flags & O_DIRECT ? 1 : 0;
|
|
@@ -2436,6 +2442,7 @@ out_sems:
|
|
|
ocfs2_iocb_clear_sem_locked(iocb);
|
|
|
|
|
|
mutex_unlock(&inode->i_mutex);
|
|
|
+ sb_end_write(inode->i_sb);
|
|
|
|
|
|
if (written)
|
|
|
ret = written;
|