Whamcloud - gitweb
LU-12616 obclass: fix MDS start/stop race
[fs/lustre-release.git] / lustre / osc / osc_page.c
index ff64374..caa9f59 100644 (file)
@@ -84,8 +84,6 @@ static void osc_page_transfer_add(const struct lu_env *env,
 {
        struct osc_object *obj = cl2osc(opg->ops_cl.cpl_obj);
 
-       /* ops_lru and ops_inflight share the same field, so take it from LRU
-        * first and then use it as inflight. */
        osc_lru_use(osc_cli(obj), opg);
 }
 
@@ -327,6 +325,7 @@ EXPORT_SYMBOL(osc_page_init);
 void osc_page_submit(const struct lu_env *env, struct osc_page *opg,
                     enum cl_req_type crt, int brw_flags)
 {
+       struct osc_io *oio = osc_env_io(env);
        struct osc_async_page *oap = &opg->ops_oap;
 
        LASSERTF(oap->oap_magic == OAP_MAGIC, "Bad oap magic: oap %p, "
@@ -339,7 +338,7 @@ void osc_page_submit(const struct lu_env *env, struct osc_page *opg,
        oap->oap_count     = opg->ops_to - opg->ops_from;
        oap->oap_brw_flags = OBD_BRW_SYNC | brw_flags;
 
-       if (cfs_capable(CFS_CAP_SYS_RESOURCE)) {
+       if (oio->oi_cap_sys_resource) {
                oap->oap_brw_flags |= OBD_BRW_NOQUOTA;
                oap->oap_cmd |= OBD_BRW_NOQUOTA;
        }
@@ -516,6 +515,8 @@ static void osc_lru_use(struct client_obd *cli, struct osc_page *opg)
        /* If page is being transferred for the first time,
         * ops_lru should be empty */
        if (opg->ops_in_lru) {
+               if (list_empty(&opg->ops_lru))
+                       return;
                spin_lock(&cli->cl_lru_list_lock);
                if (!list_empty(&opg->ops_lru)) {
                        __osc_lru_del(cli, opg);