#include <linux/fs.h>
#include <linux/mutex.h>
#include <linux/user_namespace.h>
+#include <linux/uio.h>
#ifdef HAVE_SYSCTL_CTLNAME
#define INIT_CTL_NAME .ctl_name = CTL_UNNUMBERED,
#define INIT_STRATEGY
#endif
+#ifndef HAVE_IOV_ITER_TYPE
+#ifdef HAVE_IOV_ITER_HAS_TYPE_MEMBER
+#define iter_is_iovec(iter) ((iter)->type & ITER_IOVEC)
+#define iov_iter_is_kvec(iter) ((iter)->type & ITER_KVEC)
+#define iov_iter_is_bvec(iter) ((iter)->type & ITER_BVEC)
+#define iov_iter_is_pipe(iter) ((iter)->type & ITER_PIPE)
+#define iov_iter_is_discard(iter) ((iter)->type & ITER_DISCARD)
+#else
+#define iter_is_iovec(iter) 1
+#define iov_iter_is_kvec(iter) 0
+#define iov_iter_is_bvec(iter) 0
+#define iov_iter_is_pipe(iter) 0
+#define iov_iter_is_discard(iter) 0
+#endif
+#endif /* HAVE_IOV_ITER_TYPE */
+
#ifndef HAVE_MODULE_PARAM_LOCKING
static DEFINE_MUTEX(param_lock);
#endif
int cfs_get_environ(const char *key, char *value, int *val_len);
-#ifndef HAVE_WAIT_QUEUE_ENTRY
-#define wait_queue_entry_t wait_queue_t
-#endif
-
int cfs_kernel_write(struct file *filp, const void *buf, size_t count,
loff_t *pos);
+ssize_t cfs_kernel_read(struct file *file, void *buf, size_t count,
+ loff_t *pos);
/*
* For RHEL6 struct kernel_parm_ops doesn't exist. Also