Whamcloud - gitweb
LU-1030 clio: reimplement ll_fsync in clio way
[fs/lustre-release.git] / lustre / llite / file.c
index 0c6b792..5498217 100644 (file)
@@ -1,6 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
  * GPL HEADER START
  *
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -1253,7 +1251,7 @@ static int ll_lov_recreate(struct inode *inode, obd_id id, obd_seq seq,
                                    OBD_MD_FLMTIME | OBD_MD_FLCTIME);
         obdo_set_parent_fid(oa, &ll_i2info(inode)->lli_fid);
         memcpy(lsm2, lsm, lsm_size);
-        rc = obd_create(exp, oa, &lsm2, &oti);
+        rc = obd_create(NULL, exp, oa, &lsm2, &oti);
 
         OBD_FREE_LARGE(lsm2, lsm_size);
         GOTO(out, rc);
@@ -1652,7 +1650,8 @@ int ll_do_fiemap(struct inode *inode, struct ll_user_fiemap *fiemap,
 
         memcpy(&fm_key.fiemap, fiemap, sizeof(*fiemap));
 
-        rc = obd_get_info(exp, sizeof(fm_key), &fm_key, &vallen, fiemap, lsm);
+        rc = obd_get_info(NULL, exp, sizeof(fm_key), &fm_key, &vallen,
+                          fiemap, lsm);
         if (rc)
                 CERROR("obd_get_info failed: rc = %d\n", rc);
 
@@ -1789,15 +1788,9 @@ static int ll_data_version(struct inode *inode, __u64 *data_version,
         RETURN(rc);
 }
 
-#ifdef HAVE_UNLOCKED_IOCTL
 long ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
         struct inode *inode = file->f_dentry->d_inode;
-#else
-int ll_file_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
-                  unsigned long arg)
-{
-#endif
         struct ll_file_data *fd = LUSTRE_FPRIVATE(file);
         int flags;
 
@@ -1989,6 +1982,48 @@ int ll_flush(struct file *file)
         return rc ? -EIO : 0;
 }
 
+/**
+ * Called to make sure a portion of file has been written out.
+ * if @local_only is not true, it will send OST_SYNC RPCs to ost.
+ */
+int cl_sync_file_range(struct inode *inode, loff_t start, loff_t end)
+{
+       struct cl_env_nest nest;
+       struct lu_env *env;
+       struct cl_io *io;
+       struct obd_capa *capa = NULL;
+       struct cl_fsync_io *fio;
+       int result;
+       ENTRY;
+
+       env = cl_env_nested_get(&nest);
+       if (IS_ERR(env))
+               RETURN(PTR_ERR(env));
+
+       capa = ll_osscapa_get(inode, CAPA_OPC_OSS_WRITE);
+
+       io = ccc_env_thread_io(env);
+       io->ci_obj = cl_i2info(inode)->lli_clob;
+
+       /* initialize parameters for sync */
+       fio = &io->u.ci_fsync;
+       fio->fi_capa = capa;
+       fio->fi_start = start;
+       fio->fi_end = end;
+       fio->fi_fid = ll_inode2fid(inode);
+
+       if (cl_io_init(env, io, CIT_FSYNC, io->ci_obj) == 0)
+               result = cl_io_loop(env, io);
+       else
+               result = io->ci_result;
+       cl_io_fini(env, io);
+       cl_env_nested_put(&nest, env);
+
+       capa_put(capa);
+
+       RETURN(result);
+}
+
 #ifdef HAVE_FILE_FSYNC_4ARGS
 int ll_fsync(struct file *file, loff_t start, loff_t end, int data)
 #elif defined(HAVE_FILE_FSYNC_2ARGS)
@@ -2036,33 +2071,9 @@ int ll_fsync(struct file *file, struct dentry *dentry, int data)
                 ptlrpc_req_finished(req);
 
         if (data && lsm) {
-                struct obd_info *oinfo;
-
-                OBD_ALLOC_PTR(oinfo);
-                if (!oinfo)
-                        RETURN(rc ? rc : -ENOMEM);
-                OBDO_ALLOC(oinfo->oi_oa);
-                if (!oinfo->oi_oa) {
-                        OBD_FREE_PTR(oinfo);
-                        RETURN(rc ? rc : -ENOMEM);
-                }
-                oinfo->oi_oa->o_id = lsm->lsm_object_id;
-                oinfo->oi_oa->o_seq = lsm->lsm_object_seq;
-                oinfo->oi_oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP;
-                obdo_from_inode(oinfo->oi_oa, inode,
-                                OBD_MD_FLTYPE | OBD_MD_FLATIME |
-                                OBD_MD_FLMTIME | OBD_MD_FLCTIME |
-                                OBD_MD_FLGROUP);
-                obdo_set_parent_fid(oinfo->oi_oa, &ll_i2info(inode)->lli_fid);
-                oinfo->oi_md = lsm;
-                oinfo->oi_capa = ll_osscapa_get(inode, CAPA_OPC_OSS_WRITE);
-                err = obd_sync_rqset(ll_i2sbi(inode)->ll_dt_exp, oinfo, 0,
-                                     OBD_OBJECT_EOF);
-                capa_put(oinfo->oi_capa);
+               err = cl_sync_file_range(inode, 0, OBD_OBJECT_EOF);
                 if (!rc)
                         rc = err;
-                OBDO_FREE(oinfo->oi_oa);
-                OBD_FREE_PTR(oinfo);
                 lli->lli_write_rc = rc < 0 ? rc : 0;
         }
 
@@ -2587,11 +2598,7 @@ struct file_operations ll_file_operations = {
         .READ_METHOD    = READ_FUNCTION,
         .write          = ll_file_write,
         .WRITE_METHOD   = WRITE_FUNCTION,
-#ifdef HAVE_UNLOCKED_IOCTL
         .unlocked_ioctl = ll_file_ioctl,
-#else
-        .ioctl          = ll_file_ioctl,
-#endif
         .open           = ll_file_open,
         .release        = ll_file_release,
         .mmap           = ll_file_mmap,
@@ -2611,11 +2618,7 @@ struct file_operations ll_file_operations_flock = {
         .READ_METHOD    = READ_FUNCTION,
         .write          = ll_file_write,
         .WRITE_METHOD   = WRITE_FUNCTION,
-#ifdef HAVE_UNLOCKED_IOCTL
         .unlocked_ioctl = ll_file_ioctl,
-#else
-        .ioctl          = ll_file_ioctl,
-#endif
         .open           = ll_file_open,
         .release        = ll_file_release,
         .mmap           = ll_file_mmap,
@@ -2638,11 +2641,7 @@ struct file_operations ll_file_operations_noflock = {
         .READ_METHOD    = READ_FUNCTION,
         .write          = ll_file_write,
         .WRITE_METHOD   = WRITE_FUNCTION,
-#ifdef HAVE_UNLOCKED_IOCTL
         .unlocked_ioctl = ll_file_ioctl,
-#else
-        .ioctl          = ll_file_ioctl,
-#endif
         .open           = ll_file_open,
         .release        = ll_file_release,
         .mmap           = ll_file_mmap,