cachefiles_write_page(): switch to __kernel_write()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 19 Aug 2014 15:48:09 +0000 (11:48 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 9 Oct 2014 06:39:05 +0000 (02:39 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/cachefiles/rdwr.c
fs/read_write.c

index 25e745b8eb1b5fe127be7fb20998444432ca9263..616db0e77b44bd8481782047829dfd06605700ae 100644 (file)
@@ -880,7 +880,6 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
 {
        struct cachefiles_object *object;
        struct cachefiles_cache *cache;
-       mm_segment_t old_fs;
        struct file *file;
        struct path path;
        loff_t pos, eof;
@@ -914,36 +913,27 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
        if (IS_ERR(file)) {
                ret = PTR_ERR(file);
        } else {
-               ret = -EIO;
-               if (file->f_op->write) {
-                       pos = (loff_t) page->index << PAGE_SHIFT;
-
-                       /* we mustn't write more data than we have, so we have
-                        * to beware of a partial page at EOF */
-                       eof = object->fscache.store_limit_l;
-                       len = PAGE_SIZE;
-                       if (eof & ~PAGE_MASK) {
-                               ASSERTCMP(pos, <, eof);
-                               if (eof - pos < PAGE_SIZE) {
-                                       _debug("cut short %llx to %llx",
-                                              pos, eof);
-                                       len = eof - pos;
-                                       ASSERTCMP(pos + len, ==, eof);
-                               }
+               pos = (loff_t) page->index << PAGE_SHIFT;
+
+               /* we mustn't write more data than we have, so we have
+                * to beware of a partial page at EOF */
+               eof = object->fscache.store_limit_l;
+               len = PAGE_SIZE;
+               if (eof & ~PAGE_MASK) {
+                       ASSERTCMP(pos, <, eof);
+                       if (eof - pos < PAGE_SIZE) {
+                               _debug("cut short %llx to %llx",
+                                      pos, eof);
+                               len = eof - pos;
+                               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);
        }
 
index 009d8542a889c7d2b4b98334f0c4868d36076739..7d9318c3d43c70bc16f8939b04e7dfd75389971e 100644 (file)
@@ -513,6 +513,8 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
        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 ret;