Whamcloud - gitweb
LU-13799 llite: Adjust dio refcounting
[fs/lustre-release.git] / lustre / llite / lcommon_cl.c
index c8e4402..dfc7edf 100644 (file)
@@ -27,7 +27,6 @@
  */
 /*
  * This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
  *
  *   Author: Nikita Danilov <nikita.danilov@sun.com>
  */
@@ -70,16 +69,16 @@ static DEFINE_MUTEX(cl_inode_fini_guard);
 int cl_setattr_ost(struct cl_object *obj, const struct iattr *attr,
                   enum op_xvalid xvalid, unsigned int attr_flags)
 {
-        struct lu_env *env;
-        struct cl_io  *io;
-        int            result;
-       __u16          refcheck;
+       struct lu_env *env;
+       struct cl_io  *io;
+       int result;
+       __u16 refcheck;
 
-        ENTRY;
+       ENTRY;
 
-        env = cl_env_get(&refcheck);
-        if (IS_ERR(env))
-                RETURN(PTR_ERR(env));
+       env = cl_env_get(&refcheck);
+       if (IS_ERR(env))
+               RETURN(PTR_ERR(env));
 
        io = vvp_env_thread_io(env);
        io->ci_obj = obj;
@@ -93,24 +92,27 @@ int cl_setattr_ost(struct cl_object *obj, const struct iattr *attr,
        io->u.ci_setattr.sa_avalid = attr->ia_valid;
        io->u.ci_setattr.sa_xvalid = xvalid;
        io->u.ci_setattr.sa_parent_fid = lu_object_fid(&obj->co_lu);
-
+       if (attr->ia_valid & ATTR_SIZE)
+               io->u.ci_setattr.sa_subtype = CL_SETATTR_TRUNC;
 again:
        if (attr->ia_valid & ATTR_FILE)
                ll_io_set_mirror(io, attr->ia_file);
 
-        if (cl_io_init(env, io, CIT_SETATTR, io->ci_obj) == 0) {
+       if (cl_io_init(env, io, CIT_SETATTR, io->ci_obj) == 0) {
                struct vvp_io *vio = vvp_env_io(env);
 
                if (attr->ia_valid & ATTR_FILE)
-                       /* populate the file descriptor for ftruncate to honor
-                        * group lock - see LU-787 */
-                       vio->vui_fd = LUSTRE_FPRIVATE(attr->ia_file);
-
-                result = cl_io_loop(env, io);
-        } else {
-                result = io->ci_result;
-        }
-        cl_io_fini(env, io);
+                       /*
+                        * populate the file descriptor for ftruncate to honor
+                        * group lock - see LU-787
+                        */
+                       vio->vui_fd = attr->ia_file->private_data;
+
+               result = cl_io_loop(env, io);
+       } else {
+               result = io->ci_result;
+       }
+       cl_io_fini(env, io);
        if (unlikely(io->ci_need_restart))
                goto again;