Whamcloud - gitweb
LU-12616 obclass: fix MDS start/stop race
[fs/lustre-release.git] / lustre / osc / osc_io.c
index a1cb094..68cc041 100644 (file)
@@ -357,24 +357,26 @@ int osc_io_iter_init(const struct lu_env *env, const struct cl_io_slice *ios)
 {
        struct osc_object *osc = cl2osc(ios->cis_obj);
        struct obd_import *imp = osc_cli(osc)->cl_import;
+       struct osc_io *oio = osc_env_io(env);
        int rc = -EIO;
 
        spin_lock(&imp->imp_lock);
        if (likely(!imp->imp_invalid)) {
-               struct osc_io *oio = osc_env_io(env);
-
                atomic_inc(&osc->oo_nr_ios);
                oio->oi_is_active = 1;
                rc = 0;
        }
        spin_unlock(&imp->imp_lock);
 
+       if (cfs_capable(CFS_CAP_SYS_RESOURCE))
+               oio->oi_cap_sys_resource = 1;
+
        return rc;
 }
 EXPORT_SYMBOL(osc_io_iter_init);
 
-int osc_io_write_iter_init(const struct lu_env *env,
-                          const struct cl_io_slice *ios)
+int osc_io_rw_iter_init(const struct lu_env *env,
+                       const struct cl_io_slice *ios)
 {
        struct cl_io *io = ios->cis_io;
        struct osc_io *oio = osc_env_io(env);
@@ -385,15 +387,15 @@ int osc_io_write_iter_init(const struct lu_env *env,
        if (cl_io_is_append(io))
                RETURN(osc_io_iter_init(env, ios));
 
-       npages = io->u.ci_rw.rw_range.cir_count >> PAGE_SHIFT;
-       if (io->u.ci_rw.rw_range.cir_pos & ~PAGE_MASK)
+       npages = io->u.ci_rw.crw_count >> PAGE_SHIFT;
+       if (io->u.ci_rw.crw_pos & ~PAGE_MASK)
                ++npages;
 
        oio->oi_lru_reserved = osc_lru_reserve(osc_cli(osc), npages);
 
        RETURN(osc_io_iter_init(env, ios));
 }
-EXPORT_SYMBOL(osc_io_write_iter_init);
+EXPORT_SYMBOL(osc_io_rw_iter_init);
 
 void osc_io_iter_fini(const struct lu_env *env,
                      const struct cl_io_slice *ios)
@@ -411,8 +413,8 @@ void osc_io_iter_fini(const struct lu_env *env,
 }
 EXPORT_SYMBOL(osc_io_iter_fini);
 
-void osc_io_write_iter_fini(const struct lu_env *env,
-                           const struct cl_io_slice *ios)
+void osc_io_rw_iter_fini(const struct lu_env *env,
+                        const struct cl_io_slice *ios)
 {
        struct osc_io *oio = osc_env_io(env);
        struct osc_object *osc = cl2osc(ios->cis_obj);
@@ -425,7 +427,7 @@ void osc_io_write_iter_fini(const struct lu_env *env,
 
        osc_io_iter_fini(env, ios);
 }
-EXPORT_SYMBOL(osc_io_write_iter_fini);
+EXPORT_SYMBOL(osc_io_rw_iter_fini);
 
 int osc_io_fault_start(const struct lu_env *env, const struct cl_io_slice *ios)
 {
@@ -978,14 +980,14 @@ EXPORT_SYMBOL(osc_io_end);
 static const struct cl_io_operations osc_io_ops = {
        .op = {
                [CIT_READ] = {
-                       .cio_iter_init = osc_io_iter_init,
-                       .cio_iter_fini = osc_io_iter_fini,
+                       .cio_iter_init = osc_io_rw_iter_init,
+                       .cio_iter_fini = osc_io_rw_iter_fini,
                        .cio_start  = osc_io_read_start,
                        .cio_fini   = osc_io_fini
                },
                [CIT_WRITE] = {
-                       .cio_iter_init = osc_io_write_iter_init,
-                       .cio_iter_fini = osc_io_write_iter_fini,
+                       .cio_iter_init = osc_io_rw_iter_init,
+                       .cio_iter_fini = osc_io_rw_iter_fini,
                        .cio_start  = osc_io_write_start,
                        .cio_end    = osc_io_end,
                        .cio_fini   = osc_io_fini