Whamcloud - gitweb
LU-613 clio: Client dead-lock during binary exec
[fs/lustre-release.git] / lustre / liblustre / llite_cl.c
index 98ae334..5e43db8 100644 (file)
 # include <sys/statfs.h>
 #endif
 
-#include <sysio.h>
-#ifdef HAVE_XTIO_H
-#include <xtio.h>
-#endif
-#include <fs.h>
-#include <mount.h>
-#include <inode.h>
-#ifdef HAVE_FILE_H
-#include <file.h>
-#endif
 #include <liblustre.h>
 
 #include <obd.h>
@@ -451,14 +441,14 @@ static int slp_io_rw_lock(const struct lu_env *env,
 
 }
 
-static int slp_io_trunc_iter_init(const struct lu_env *env,
-                                  const struct cl_io_slice *ios)
+static int slp_io_setattr_iter_init(const struct lu_env *env,
+                                    const struct cl_io_slice *ios)
 {
         return 0;
 }
 
-static int slp_io_trunc_start(const struct lu_env *env,
-                              const struct cl_io_slice *ios)
+static int slp_io_setattr_start(const struct lu_env *env,
+                                const struct cl_io_slice *ios)
 {
         return 0;
 }
@@ -487,6 +477,7 @@ static void llu_free_user_page(struct page *page)
         OBD_FREE_PTR(page);
 }
 
+
 static int llu_queue_pio(const struct lu_env *env, struct cl_io *io,
                          struct llu_io_group *group,
                          char *buf, size_t count, loff_t pos)
@@ -497,7 +488,6 @@ static int llu_queue_pio(const struct lu_env *env, struct cl_io *io,
         struct obd_export *exp = llu_i2obdexp(inode);
         struct page *page;
         int  rc = 0, ret_bytes = 0;
-        int local_lock;
         struct cl_page *clp;
         struct cl_2queue *queue;
         ENTRY;
@@ -505,8 +495,6 @@ static int llu_queue_pio(const struct lu_env *env, struct cl_io *io,
         if (!exp)
                 RETURN(-EINVAL);
 
-        local_lock = group->lig_params->lrp_lock_mode != LCK_NL;
-
         queue = &io->ci_queue;
         cl_2queue_init(queue);
 
@@ -609,15 +597,23 @@ void put_io_group(struct llu_io_group *group)
         OBD_FREE_PTR(group);
 }
 
+/**
+ * True, if \a io is a normal io, False for sendfile() / splice_{read|write}
+ */
+int cl_is_normalio(const struct lu_env *env, const struct cl_io *io)
+{
+        return 1;
+}
+
 static int slp_io_start(const struct lu_env *env, const struct cl_io_slice *ios)
 {
         struct ccc_io     *cio   = cl2ccc_io(env, ios);
         struct cl_io      *io    = ios->cis_io;
         struct cl_object  *obj   = io->ci_obj;
         struct inode      *inode = ccc_object_inode(obj);
-        int     err, ret;
-        loff_t  pos;
-        size_t  cnt;
+        int    err, ret;
+        loff_t pos;
+        long   cnt;
         struct llu_io_group *iogroup;
         struct lustre_rw_params p = {0};
         int iovidx;
@@ -647,13 +643,13 @@ static int slp_io_start(const struct lu_env *env, const struct cl_io_slice *ios)
         if (IS_ERR(iogroup))
                 RETURN(PTR_ERR(iogroup));
 
-        err = ccc_prep_size(env, obj, io, pos, cnt, 0, &exceed);
+        err = ccc_prep_size(env, obj, io, pos, cnt, &exceed);
         if (err != 0 || (write == 0 && exceed != 0))
                 GOTO(out, err);
 
         CDEBUG(D_INODE,
-               "%s ino %lu, "LPSZ" bytes, offset %lld, i_size %llu\n",
-               write?"Write":"Read", (unsigned long)st->st_ino,
+               "%s ino %lu, %lu bytes, offset "LPU64", i_size "LPU64"\n",
+               write ? "Write" : "Read", (unsigned long)st->st_ino,
                cnt, (__u64)pos, (__u64)st->st_size);
 
         if (write && io->u.ci_wr.wr_append)
@@ -662,7 +658,7 @@ static int slp_io_start(const struct lu_env *env, const struct cl_io_slice *ios)
 
         for (iovidx = 0; iovidx < cio->cui_nrsegs; iovidx++) {
                 char *buf = (char *) cio->cui_iov[iovidx].iov_base;
-                size_t count = cio->cui_iov[iovidx].iov_len;
+                long count = cio->cui_iov[iovidx].iov_len;
 
                 if (!count)
                         continue;
@@ -730,10 +726,10 @@ static const struct cl_io_operations ccc_io_ops = {
                         .cio_end       = ccc_io_end,
                         .cio_advance   = ccc_io_advance
                 },
-                [CIT_TRUNC] = {
+                [CIT_SETATTR] = {
                         .cio_fini       = ccc_io_fini,
-                        .cio_iter_init  = slp_io_trunc_iter_init,
-                        .cio_start      = slp_io_trunc_start
+                        .cio_iter_init  = slp_io_setattr_iter_init,
+                        .cio_start      = slp_io_setattr_start
                 },
                 [CIT_MISC] = {
                         .cio_fini   = ccc_io_fini