Whamcloud - gitweb
LU-5108 osc: Performance tune for LRU
[fs/lustre-release.git] / lustre / osc / osc_cache.c
index f4b3f96..a4ae79b 100644 (file)
@@ -916,7 +916,7 @@ static int osc_extent_wait(const struct lu_env *env, struct osc_extent *ext,
        if (rc == -ETIMEDOUT) {
                OSC_EXTENT_DUMP(D_ERROR, ext,
                        "%s: wait ext to %u timedout, recovery in progress?\n",
-                       osc_export(obj)->exp_obd->obd_name, state);
+                       cli_name(osc_cli(obj)), state);
 
                lwi = LWI_INTR(NULL, NULL);
                rc = l_wait_event(ext->oe_waitq, extent_wait_cb(ext, state),
@@ -1279,7 +1279,6 @@ static int osc_completion(const struct lu_env *env, struct osc_async_page *oap,
 {
        struct osc_page   *opg  = oap2osc_page(oap);
        struct cl_page    *page = oap2cl_page(oap);
-       struct osc_object *obj  = cl2osc(opg->ops_cl.cpl_obj);
        enum cl_req_type   crt;
        int srvlock;
 
@@ -1304,13 +1303,6 @@ static int osc_completion(const struct lu_env *env, struct osc_async_page *oap,
        /* Clear opg->ops_transfer_pinned before VM lock is released. */
        opg->ops_transfer_pinned = 0;
 
-       spin_lock(&obj->oo_seatbelt);
-       LASSERT(opg->ops_submitter != NULL);
-       LASSERT(!list_empty(&opg->ops_inflight));
-       list_del_init(&opg->ops_inflight);
-       opg->ops_submitter = NULL;
-       spin_unlock(&obj->oo_seatbelt);
-
        opg->ops_submit_time = 0;
        srvlock = oap->oap_brw_flags & OBD_BRW_SRVLOCK;
 
@@ -1340,10 +1332,10 @@ static int osc_completion(const struct lu_env *env, struct osc_async_page *oap,
 
 #define OSC_DUMP_GRANT(lvl, cli, fmt, args...) do {                    \
        struct client_obd *__tmp = (cli);                               \
-       CDEBUG(lvl, "%s: grant { dirty: %ld/%ld dirty_pages: %ld/%lu "  \
+       CDEBUG(lvl, "%s: grant { dirty: %lu/%lu dirty_pages: %ld/%lu "  \
               "dropped: %ld avail: %ld, reserved: %ld, flight: %d }"   \
               "lru {in list: %ld, left: %ld, waiters: %d }"fmt"\n",    \
-              __tmp->cl_import->imp_obd->obd_name,                     \
+              cli_name(__tmp),                                         \
               __tmp->cl_dirty_pages, __tmp->cl_dirty_max_pages,        \
               atomic_long_read(&obd_dirty_pages), obd_max_dirty_pages, \
               __tmp->cl_lost_grant, __tmp->cl_avail_grant,             \
@@ -1578,7 +1570,7 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli,
                osc_io_unplug_async(env, cli, NULL);
 
                CDEBUG(D_CACHE, "%s: sleeping for cache space @ %p for %p\n",
-                      cli->cl_import->imp_obd->obd_name, &ocw, oap);
+                      cli_name(cli), &ocw, oap);
 
                rc = l_wait_event(ocw.ocw_waitq, ocw_granted(cli, &ocw), &lwi);
 
@@ -1623,7 +1615,7 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli,
        default:
                CDEBUG(D_CACHE, "%s: event for cache space @ %p never arrived "
                       "due to %d, fall back to sync i/o\n",
-                      cli->cl_import->imp_obd->obd_name, &ocw, rc);
+                      cli_name(cli), &ocw, rc);
                break;
        }
        EXIT;
@@ -2214,13 +2206,9 @@ static int osc_io_unplug0(const struct lu_env *env, struct client_obd *cli,
                return 0;
 
        if (!async) {
-               /* disable osc_lru_shrink() temporarily to avoid
-                * potential stack overrun problem. LU-2859 */
-               atomic_inc(&cli->cl_lru_shrinkers);
                spin_lock(&cli->cl_loi_list_lock);
                osc_check_rpcs(env, cli);
                spin_unlock(&cli->cl_loi_list_lock);
-               atomic_dec(&cli->cl_lru_shrinkers);
        } else {
                CDEBUG(D_CACHE, "Queue writeback work for client %p.\n", cli);
                LASSERT(cli->cl_writeback_work != NULL);
@@ -2441,7 +2429,6 @@ int osc_teardown_async_page(const struct lu_env *env,
                            struct osc_object *obj, struct osc_page *ops)
 {
        struct osc_async_page *oap = &ops->ops_oap;
-       struct osc_extent     *ext = NULL;
        int rc = 0;
        ENTRY;
 
@@ -2450,12 +2437,15 @@ int osc_teardown_async_page(const struct lu_env *env,
        CDEBUG(D_INFO, "teardown oap %p page %p at index %lu.\n",
               oap, ops, osc_index(oap2osc(oap)));
 
-       osc_object_lock(obj);
        if (!list_empty(&oap->oap_rpc_item)) {
                CDEBUG(D_CACHE, "oap %p is not in cache.\n", oap);
                rc = -EBUSY;
        } else if (!list_empty(&oap->oap_pending_item)) {
+               struct osc_extent *ext = NULL;
+
+               osc_object_lock(obj);
                ext = osc_extent_lookup(obj, osc_index(oap2osc(oap)));
+               osc_object_unlock(obj);
                /* only truncated pages are allowed to be taken out.
                 * See osc_extent_truncate() and osc_cache_truncate_start()
                 * for details. */
@@ -2464,10 +2454,9 @@ int osc_teardown_async_page(const struct lu_env *env,
                                        osc_index(oap2osc(oap)));
                        rc = -EBUSY;
                }
+               if (ext != NULL)
+                       osc_extent_put(env, ext);
        }
-       osc_object_unlock(obj);
-       if (ext != NULL)
-               osc_extent_put(env, ext);
        RETURN(rc);
 }