lift sb_start_write() out of ->write()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
72ec35163f
commit
03d95eb2f2
8 changed files with 26 additions and 13 deletions
|
@ -230,9 +230,11 @@ static int __do_lo_send_write(struct file *file,
|
||||||
ssize_t bw;
|
ssize_t bw;
|
||||||
mm_segment_t old_fs = get_fs();
|
mm_segment_t old_fs = get_fs();
|
||||||
|
|
||||||
|
file_start_write(file);
|
||||||
set_fs(get_ds());
|
set_fs(get_ds());
|
||||||
bw = file->f_op->write(file, buf, len, &pos);
|
bw = file->f_op->write(file, buf, len, &pos);
|
||||||
set_fs(old_fs);
|
set_fs(old_fs);
|
||||||
|
file_end_write(file);
|
||||||
if (likely(bw == len))
|
if (likely(bw == len))
|
||||||
return 0;
|
return 0;
|
||||||
printk(KERN_ERR "loop: Write error at byte offset %llu, length %i.\n",
|
printk(KERN_ERR "loop: Write error at byte offset %llu, length %i.\n",
|
||||||
|
|
|
@ -962,12 +962,14 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
|
||||||
}
|
}
|
||||||
|
|
||||||
data = kmap(page);
|
data = kmap(page);
|
||||||
|
file_start_write(file);
|
||||||
old_fs = get_fs();
|
old_fs = get_fs();
|
||||||
set_fs(KERNEL_DS);
|
set_fs(KERNEL_DS);
|
||||||
ret = file->f_op->write(
|
ret = file->f_op->write(
|
||||||
file, (const void __user *) data, len, &pos);
|
file, (const void __user *) data, len, &pos);
|
||||||
set_fs(old_fs);
|
set_fs(old_fs);
|
||||||
kunmap(page);
|
kunmap(page);
|
||||||
|
file_end_write(file);
|
||||||
if (ret != len)
|
if (ret != len)
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,7 @@ coda_file_write(struct file *coda_file, const char __user *buf, size_t count, lo
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
host_inode = file_inode(host_file);
|
host_inode = file_inode(host_file);
|
||||||
|
file_start_write(host_file);
|
||||||
mutex_lock(&coda_inode->i_mutex);
|
mutex_lock(&coda_inode->i_mutex);
|
||||||
|
|
||||||
ret = host_file->f_op->write(host_file, buf, count, ppos);
|
ret = host_file->f_op->write(host_file, buf, count, ppos);
|
||||||
|
@ -87,6 +88,7 @@ coda_file_write(struct file *coda_file, const char __user *buf, size_t count, lo
|
||||||
coda_inode->i_blocks = (coda_inode->i_size + 511) >> 9;
|
coda_inode->i_blocks = (coda_inode->i_size + 511) >> 9;
|
||||||
coda_inode->i_mtime = coda_inode->i_ctime = CURRENT_TIME_SEC;
|
coda_inode->i_mtime = coda_inode->i_ctime = CURRENT_TIME_SEC;
|
||||||
mutex_unlock(&coda_inode->i_mutex);
|
mutex_unlock(&coda_inode->i_mutex);
|
||||||
|
file_end_write(host_file);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -629,9 +629,11 @@ void do_coredump(siginfo_t *siginfo)
|
||||||
goto close_fail;
|
goto close_fail;
|
||||||
if (displaced)
|
if (displaced)
|
||||||
put_files_struct(displaced);
|
put_files_struct(displaced);
|
||||||
|
file_start_write(cprm.file);
|
||||||
retval = binfmt->core_dump(&cprm);
|
retval = binfmt->core_dump(&cprm);
|
||||||
if (retval)
|
if (retval)
|
||||||
current->signal->group_exit_code |= 0x80;
|
current->signal->group_exit_code |= 0x80;
|
||||||
|
file_end_write(cprm.file);
|
||||||
|
|
||||||
if (ispipe && core_pipe_limit)
|
if (ispipe && core_pipe_limit)
|
||||||
wait_for_dump_helpers(cprm.file);
|
wait_for_dump_helpers(cprm.file);
|
||||||
|
|
|
@ -398,7 +398,6 @@ ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, lof
|
||||||
struct kiocb kiocb;
|
struct kiocb kiocb;
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
file_start_write(filp);
|
|
||||||
init_sync_kiocb(&kiocb, filp);
|
init_sync_kiocb(&kiocb, filp);
|
||||||
kiocb.ki_pos = *ppos;
|
kiocb.ki_pos = *ppos;
|
||||||
kiocb.ki_left = len;
|
kiocb.ki_left = len;
|
||||||
|
@ -414,7 +413,6 @@ ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, lof
|
||||||
if (-EIOCBQUEUED == ret)
|
if (-EIOCBQUEUED == ret)
|
||||||
ret = wait_on_sync_kiocb(&kiocb);
|
ret = wait_on_sync_kiocb(&kiocb);
|
||||||
*ppos = kiocb.ki_pos;
|
*ppos = kiocb.ki_pos;
|
||||||
file_end_write(filp);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,6 +456,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
|
||||||
ret = rw_verify_area(WRITE, file, pos, count);
|
ret = rw_verify_area(WRITE, file, pos, count);
|
||||||
if (ret >= 0) {
|
if (ret >= 0) {
|
||||||
count = ret;
|
count = ret;
|
||||||
|
file_start_write(file);
|
||||||
if (file->f_op->write)
|
if (file->f_op->write)
|
||||||
ret = file->f_op->write(file, buf, count, pos);
|
ret = file->f_op->write(file, buf, count, pos);
|
||||||
else
|
else
|
||||||
|
@ -467,6 +466,7 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
|
||||||
add_wchar(current, ret);
|
add_wchar(current, ret);
|
||||||
}
|
}
|
||||||
inc_syscw(current);
|
inc_syscw(current);
|
||||||
|
file_end_write(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -758,16 +758,18 @@ static ssize_t do_readv_writev(int type, struct file *file,
|
||||||
} else {
|
} else {
|
||||||
fn = (io_fn_t)file->f_op->write;
|
fn = (io_fn_t)file->f_op->write;
|
||||||
fnv = file->f_op->aio_write;
|
fnv = file->f_op->aio_write;
|
||||||
|
file_start_write(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fnv) {
|
if (fnv)
|
||||||
file_start_write(file);
|
|
||||||
ret = do_sync_readv_writev(file, iov, nr_segs, tot_len,
|
ret = do_sync_readv_writev(file, iov, nr_segs, tot_len,
|
||||||
pos, fnv);
|
pos, fnv);
|
||||||
file_end_write(file);
|
else
|
||||||
} else
|
|
||||||
ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn);
|
ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn);
|
||||||
|
|
||||||
|
if (type != READ)
|
||||||
|
file_end_write(file);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (iov != iovstack)
|
if (iov != iovstack)
|
||||||
kfree(iov);
|
kfree(iov);
|
||||||
|
@ -936,16 +938,18 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
|
||||||
} else {
|
} else {
|
||||||
fn = (io_fn_t)file->f_op->write;
|
fn = (io_fn_t)file->f_op->write;
|
||||||
fnv = file->f_op->aio_write;
|
fnv = file->f_op->aio_write;
|
||||||
|
file_start_write(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fnv) {
|
if (fnv)
|
||||||
file_start_write(file);
|
|
||||||
ret = do_sync_readv_writev(file, iov, nr_segs, tot_len,
|
ret = do_sync_readv_writev(file, iov, nr_segs, tot_len,
|
||||||
pos, fnv);
|
pos, fnv);
|
||||||
file_end_write(file);
|
else
|
||||||
} else
|
|
||||||
ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn);
|
ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn);
|
||||||
|
|
||||||
|
if (type != READ)
|
||||||
|
file_end_write(file);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (iov != iovstack)
|
if (iov != iovstack)
|
||||||
kfree(iov);
|
kfree(iov);
|
||||||
|
|
|
@ -1052,7 +1052,9 @@ static int write_pipe_buf(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
|
||||||
loff_t tmp = sd->pos;
|
loff_t tmp = sd->pos;
|
||||||
|
|
||||||
data = buf->ops->map(pipe, buf, 0);
|
data = buf->ops->map(pipe, buf, 0);
|
||||||
|
file_start_write(sd->u.file);
|
||||||
ret = __kernel_write(sd->u.file, data + buf->offset, sd->len, &tmp);
|
ret = __kernel_write(sd->u.file, data + buf->offset, sd->len, &tmp);
|
||||||
|
file_end_write(sd->u.file);
|
||||||
buf->ops->unmap(pipe, buf, data);
|
buf->ops->unmap(pipe, buf, data);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -543,6 +543,7 @@ static void do_acct_process(struct bsd_acct_struct *acct,
|
||||||
* Kernel segment override to datasegment and write it
|
* Kernel segment override to datasegment and write it
|
||||||
* to the accounting file.
|
* to the accounting file.
|
||||||
*/
|
*/
|
||||||
|
file_start_write(file);
|
||||||
fs = get_fs();
|
fs = get_fs();
|
||||||
set_fs(KERNEL_DS);
|
set_fs(KERNEL_DS);
|
||||||
/*
|
/*
|
||||||
|
@ -554,6 +555,7 @@ static void do_acct_process(struct bsd_acct_struct *acct,
|
||||||
sizeof(acct_t), &file->f_pos);
|
sizeof(acct_t), &file->f_pos);
|
||||||
current->signal->rlim[RLIMIT_FSIZE].rlim_cur = flim;
|
current->signal->rlim[RLIMIT_FSIZE].rlim_cur = flim;
|
||||||
set_fs(fs);
|
set_fs(fs);
|
||||||
|
file_end_write(file);
|
||||||
out:
|
out:
|
||||||
revert_creds(orig_cred);
|
revert_creds(orig_cred);
|
||||||
}
|
}
|
||||||
|
|
|
@ -404,8 +404,6 @@ xip_file_write(struct file *filp, const char __user *buf, size_t len,
|
||||||
loff_t pos;
|
loff_t pos;
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
sb_start_write(inode->i_sb);
|
|
||||||
|
|
||||||
mutex_lock(&inode->i_mutex);
|
mutex_lock(&inode->i_mutex);
|
||||||
|
|
||||||
if (!access_ok(VERIFY_READ, buf, len)) {
|
if (!access_ok(VERIFY_READ, buf, len)) {
|
||||||
|
@ -439,7 +437,6 @@ xip_file_write(struct file *filp, const char __user *buf, size_t len,
|
||||||
current->backing_dev_info = NULL;
|
current->backing_dev_info = NULL;
|
||||||
out_up:
|
out_up:
|
||||||
mutex_unlock(&inode->i_mutex);
|
mutex_unlock(&inode->i_mutex);
|
||||||
sb_end_write(inode->i_sb);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(xip_file_write);
|
EXPORT_SYMBOL_GPL(xip_file_write);
|
||||||
|
|
Loading…
Reference in a new issue