cachefiles_write_page(): switch to __kernel_write()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
594822918d
commit
2ec3a12a66
|
@ -880,7 +880,6 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
|
||||||
{
|
{
|
||||||
struct cachefiles_object *object;
|
struct cachefiles_object *object;
|
||||||
struct cachefiles_cache *cache;
|
struct cachefiles_cache *cache;
|
||||||
mm_segment_t old_fs;
|
|
||||||
struct file *file;
|
struct file *file;
|
||||||
struct path path;
|
struct path path;
|
||||||
loff_t pos, eof;
|
loff_t pos, eof;
|
||||||
|
@ -914,36 +913,27 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
|
||||||
if (IS_ERR(file)) {
|
if (IS_ERR(file)) {
|
||||||
ret = PTR_ERR(file);
|
ret = PTR_ERR(file);
|
||||||
} else {
|
} else {
|
||||||
ret = -EIO;
|
pos = (loff_t) page->index << PAGE_SHIFT;
|
||||||
if (file->f_op->write) {
|
|
||||||
pos = (loff_t) page->index << PAGE_SHIFT;
|
|
||||||
|
|
||||||
/* we mustn't write more data than we have, so we have
|
/* we mustn't write more data than we have, so we have
|
||||||
* to beware of a partial page at EOF */
|
* to beware of a partial page at EOF */
|
||||||
eof = object->fscache.store_limit_l;
|
eof = object->fscache.store_limit_l;
|
||||||
len = PAGE_SIZE;
|
len = PAGE_SIZE;
|
||||||
if (eof & ~PAGE_MASK) {
|
if (eof & ~PAGE_MASK) {
|
||||||
ASSERTCMP(pos, <, eof);
|
ASSERTCMP(pos, <, eof);
|
||||||
if (eof - pos < PAGE_SIZE) {
|
if (eof - pos < PAGE_SIZE) {
|
||||||
_debug("cut short %llx to %llx",
|
_debug("cut short %llx to %llx",
|
||||||
pos, eof);
|
pos, eof);
|
||||||
len = eof - pos;
|
len = eof - pos;
|
||||||
ASSERTCMP(pos + len, ==, eof);
|
ASSERTCMP(pos + len, ==, eof);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
data = kmap(page);
|
|
||||||
file_start_write(file);
|
|
||||||
old_fs = get_fs();
|
|
||||||
set_fs(KERNEL_DS);
|
|
||||||
ret = file->f_op->write(
|
|
||||||
file, (const void __user *) data, len, &pos);
|
|
||||||
set_fs(old_fs);
|
|
||||||
kunmap(page);
|
|
||||||
file_end_write(file);
|
|
||||||
if (ret != len)
|
|
||||||
ret = -EIO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data = kmap(page);
|
||||||
|
ret = __kernel_write(file, data, len, &pos);
|
||||||
|
kunmap(page);
|
||||||
|
if (ret != len)
|
||||||
|
ret = -EIO;
|
||||||
fput(file);
|
fput(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -513,6 +513,8 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(__kernel_write);
|
||||||
|
|
||||||
ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
|
ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
|
||||||
{
|
{
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
Loading…
Reference in New Issue