]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Linux 4.1: Don't define or use ->write directly
authorMarc Dionne <marc.dionne@your-file-system.com>
Mon, 20 Apr 2015 13:41:53 +0000 (10:41 -0300)
committerStephan Wiesand <stephan.wiesand@desy.de>
Thu, 28 May 2015 13:01:21 +0000 (09:01 -0400)
We no longer have to define a ->write operation, and we can't
expect the underlying disk cache filesystem to have one.  Use
the new __vfs_read/write helpers that will select the operation
to use based on what's available for that particular filesystem.

Reviewed-on: http://gerrit.openafs.org/11849
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Chas Williams <3chas3@gmail.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
(cherry picked from commit 5c1237432edf4600111845d175c92252430d5f76)

Change-Id: I21bca85637e07d0e03ef471896d0454eeef68a14
Reviewed-on: http://gerrit.openafs.org/11873
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Daria Brashear <shadow@your-file-system.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
acinclude.m4
src/afs/LINUX/osi_compat.h
src/afs/LINUX/osi_file.c
src/afs/LINUX/osi_vnodeops.c

index c9ada2cdd9b82b190a16b9e2de5fd0d53e4ea3f6..79df95afbe0b38ef9e156feabce2e0079af50b4c 100644 (file)
@@ -902,6 +902,9 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
 
                 dnl Function existence checks
 
+                AC_CHECK_LINUX_FUNC([__vfs_read],
+                                    [#include <linux/fs.h>],
+                                    [__vfs_read(NULL, NULL, 0, NULL);])
                  AC_CHECK_LINUX_FUNC([bdi_init],
                                     [#include <linux/backing-dev.h>],
                                     [bdi_init(NULL);])
index 97369a2b1bc6de77c4a7d4261b49d0ef5a16311b..47450e65abeb1d9602d77e8aaf19f65802675e59 100644 (file)
@@ -578,4 +578,24 @@ afs_d_invalidate(struct dentry *dp)
 #endif
 }
 
+static inline int
+afs_file_read(struct file *filp, char __user *buf, size_t len, loff_t *pos)
+{
+#if defined(HAVE_LINUX___VFS_READ)
+    return __vfs_read(filp, buf, len, pos);
+#else
+    return filp->f_op->read(filp, buf, len, pos);
+#endif
+}
+
+static inline int
+afs_file_write(struct file *filp, char __user *buf, size_t len, loff_t *pos)
+{
+#if defined(HAVE_LINUX___VFS_READ)
+    return __vfs_write(filp, buf, len, pos);
+#else
+    return filp->f_op->write(filp, buf, len, pos);
+#endif
+}
+
 #endif /* AFS_LINUX_OSI_COMPAT_H */
index 6261c93e71cabc2c631a6166944b783b2c3a8dbb..c1e52e3cbad796c5ba1b1fd2368699cda6fbb743 100644 (file)
@@ -376,9 +376,9 @@ osi_rdwr(struct osi_file *osifile, struct uio *uiop, int rw)
 
        pos = uiop->uio_offset;
        if (rw == UIO_READ)
-           code = filp->f_op->read(filp, iov->iov_base, count, &pos);
+           code = afs_file_read(filp, iov->iov_base, count, &pos);
        else
-           code = filp->f_op->write(filp, iov->iov_base, count, &pos);
+           code = afs_file_write(filp, iov->iov_base, count, &pos);
 
        if (code < 0) {
            code = -code;
index 0a898d9b0ffe7b34ec2c093d900307dc53439012..0aaad2d9c17bddbd6b8878de92f14e0b8f6f6f51 100644 (file)
@@ -807,8 +807,10 @@ struct file_operations afs_file_fops = {
 #ifdef STRUCT_FILE_OPERATIONS_HAS_READ_ITER
   .read_iter = afs_linux_read_iter,
   .write_iter =        afs_linux_write_iter,
+# if !defined(HAVE_LINUX___VFS_READ)
   .read =      new_sync_read,
   .write =     new_sync_write,
+# endif
 #elif defined(HAVE_LINUX_GENERIC_FILE_AIO_READ)
   .aio_read =  afs_linux_aio_read,
   .aio_write = afs_linux_aio_write,