staging/lustre/libcfs: remove filp_write
authorPeng Tao <bergwolf@gmail.com>
Thu, 21 Nov 2013 14:28:25 +0000 (22:28 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Nov 2013 20:35:03 +0000 (12:35 -0800)
Use vfs_write instead and call kmap/kunmap to ensure
that we can access high memory zone.

Cc: Andreas Dilger <andreas.dilger@intel.com>
Signed-off-by: Peng Tao <bergwolf@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/include/linux/libcfs/linux/linux-fs.h
drivers/staging/lustre/lustre/libcfs/tracefile.c

index 573ab08..102afa2 100644 (file)
@@ -52,9 +52,6 @@
 #include <linux/backing-dev.h>
 #include <linux/posix_acl_xattr.h>
 
-#define filp_write(fp, buf, size, pos)                 \
-       ((fp)->f_op->write((fp), (buf), (size), pos))
-
 #define flock_type(fl)                 ((fl)->fl_type)
 #define flock_set_type(fl, type)       do { (fl)->fl_type = (type); } while (0)
 #define flock_pid(fl)                  ((fl)->fl_pid)
index 4c3dad6..54290ce 100644 (file)
@@ -678,6 +678,7 @@ int cfs_tracefile_dump_all_pages(char *filename)
        struct file             *filp;
        struct cfs_trace_page   *tage;
        struct cfs_trace_page   *tmp;
+       char                    *buf;
        int rc;
 
        DECL_MMSPACE;
@@ -708,8 +709,11 @@ int cfs_tracefile_dump_all_pages(char *filename)
 
                __LASSERT_TAGE_INVARIANT(tage);
 
-               rc = filp_write(filp, page_address(tage->page),
-                               tage->used, &filp->f_pos);
+               buf = kmap(tage->page);
+               rc = vfs_write(filp, (__force const char __user *)buf,
+                              tage->used, &filp->f_pos);
+               kunmap(tage->page);
+
                if (rc != (int)tage->used) {
                        printk(KERN_WARNING "wanted to write %u but wrote "
                               "%d\n", tage->used, rc);
@@ -971,6 +975,7 @@ static int tracefiled(void *arg)
        struct cfs_trace_page *tage;
        struct cfs_trace_page *tmp;
        struct file *filp;
+       char *buf;
        int last_loop = 0;
        int rc;
 
@@ -1023,8 +1028,11 @@ static int tracefiled(void *arg)
                        else if (f_pos > i_size_read(filp->f_dentry->d_inode))
                                f_pos = i_size_read(filp->f_dentry->d_inode);
 
-                       rc = filp_write(filp, page_address(tage->page),
-                                       tage->used, &f_pos);
+                       buf = kmap(tage->page);
+                       rc = vfs_write(filp, (__force const char __user *)buf,
+                                      tage->used, &f_pos);
+                       kunmap(tage->page);
+
                        if (rc != (int)tage->used) {
                                printk(KERN_WARNING "wanted to write %u "
                                       "but wrote %d\n", tage->used, rc);