Whamcloud - gitweb
LU-12355 llite: Lustre specific iov_for_each broken (removed)
[fs/lustre-release.git] / lustre / llite / vvp_io.c
index 3588d6a..294cfeb 100644 (file)
@@ -41,6 +41,7 @@
 #include <obd.h>
 #include "llite_internal.h"
 #include "vvp_internal.h"
+#include <libcfs/linux/linux-misc.h>
 
 static struct vvp_io *cl2vvp_io(const struct lu_env *env,
                                const struct cl_io_slice *slice)
@@ -439,6 +440,8 @@ static int vvp_mmap_locks(const struct lu_env *env,
        union ldlm_policy_data policy;
        struct iovec iov;
        struct iov_iter i;
+       unsigned long addr;
+       ssize_t count;
        int result = 0;
        ENTRY;
 
@@ -455,9 +458,15 @@ static int vvp_mmap_locks(const struct lu_env *env,
        if (mm == NULL)
                RETURN(0);
 
-       iov_for_each(iov, i, *(vio->vui_iter)) {
-               unsigned long addr = (unsigned long)iov.iov_base;
-               size_t count = iov.iov_len;
+       if (!iter_is_iovec(vio->vui_iter) && !iov_iter_is_kvec(vio->vui_iter))
+               RETURN(0);
+
+       for (i = *vio->vui_iter;
+            iov_iter_count(&i);
+            iov_iter_advance(&i, iov.iov_len)) {
+               iov = iov_iter_iovec(&i);
+               addr = (unsigned long)iov.iov_base;
+               count = iov.iov_len;
 
                 if (count == 0)
                         continue;