Whamcloud - gitweb
LU-12616 obclass: fix MDS start/stop race
[fs/lustre-release.git] / lustre / ofd / ofd_dev.c
index 8eead96..843abca 100644 (file)
@@ -82,8 +82,6 @@
 
 /* Slab for OFD object allocation */
 static struct kmem_cache *ofd_object_kmem;
-struct kmem_cache *tgt_fmd_kmem;
-
 static struct lu_kmem_descr ofd_caches[] = {
        {
                .ckd_cache = &ofd_object_kmem,
@@ -91,11 +89,6 @@ static struct lu_kmem_descr ofd_caches[] = {
                .ckd_size  = sizeof(struct ofd_object)
        },
        {
-               .ckd_cache = &tgt_fmd_kmem,
-               .ckd_name  = "ll_fmd_cache",
-               .ckd_size  = sizeof(struct tgt_fmd_data)
-       },
-       {
                .ckd_cache = NULL
        }
 };
@@ -640,6 +633,8 @@ static int ofd_prepare(const struct lu_env *env, struct lu_device *pdev,
        LASSERTF(rc == 0, "register namespace failed: rc = %d\n", rc);
 
        target_recovery_init(&ofd->ofd_lut, tgt_request_handle);
+       OBD_FAIL_TIMEOUT_ORSET(OBD_FAIL_OST_PREPARE_DELAY, OBD_FAIL_ONCE,
+                              (OBD_TIMEOUT_DEFAULT + 1) / 4);
        LASSERT(obd->obd_no_conn);
        spin_lock(&obd->obd_dev_lock);
        obd->obd_no_conn = 0;
@@ -759,6 +754,7 @@ static void ofd_procfs_fini(struct ofd_device *ofd)
 {
        struct obd_device *obd = ofd_obd(ofd);
 
+       tgt_tunables_fini(&ofd->ofd_lut);
        lprocfs_free_per_client_stats(obd);
        lprocfs_obd_cleanup(obd);
        lprocfs_free_obd_stats(obd);
@@ -1359,7 +1355,7 @@ out:
                res = ldlm_resource_get(ofd->ofd_namespace, NULL,
                                        &tsi->tsi_resid, LDLM_EXTENT, 0);
                if (!IS_ERR(res)) {
-                       ldlm_res_lvbo_update(tsi->tsi_env, res, NULL, 0);
+                       ldlm_res_lvbo_update(res, NULL, 0);
                        ldlm_resource_putref(res);
                }
        }
@@ -2032,7 +2028,7 @@ out:
                if (!IS_ERR(res)) {
                        struct ost_lvb *res_lvb;
 
-                       ldlm_res_lvbo_update(tsi->tsi_env, res, NULL, 0);
+                       ldlm_res_lvbo_update(res, NULL, 0);
                        res_lvb = res->lr_lvb_data;
                        repbody->oa.o_valid |= OBD_MD_FLBLOCKS;
                        repbody->oa.o_blocks = res_lvb->lvb_blocks;
@@ -2715,26 +2711,25 @@ TGT_RPC_HANDLER(OST_FIRST_OPC,
                0,                      OST_SET_INFO,   ofd_set_info_hdl,
                &RQF_OBD_SET_INFO, LUSTRE_OST_VERSION),
 TGT_OST_HDL(0,                         OST_GET_INFO,   ofd_get_info_hdl),
-TGT_OST_HDL(HABEO_CORPUS| HABEO_REFERO,        OST_GETATTR,    ofd_getattr_hdl),
-TGT_OST_HDL(HABEO_CORPUS| HABEO_REFERO | MUTABOR,
+TGT_OST_HDL(HAS_BODY | HAS_REPLY,      OST_GETATTR,    ofd_getattr_hdl),
+TGT_OST_HDL(HAS_BODY | HAS_REPLY | IS_MUTABLE,
                                        OST_SETATTR,    ofd_setattr_hdl),
-TGT_OST_HDL(0          | HABEO_REFERO | MUTABOR,
+TGT_OST_HDL(HAS_REPLY | IS_MUTABLE,
                                        OST_CREATE,     ofd_create_hdl),
-TGT_OST_HDL(0          | HABEO_REFERO | MUTABOR,
+TGT_OST_HDL(HAS_REPLY | IS_MUTABLE,
                                        OST_DESTROY,    ofd_destroy_hdl),
-TGT_OST_HDL(0          | HABEO_REFERO, OST_STATFS,     ofd_statfs_hdl),
-TGT_OST_HDL_HP(HABEO_CORPUS| HABEO_REFERO,
-                                       OST_BRW_READ,   tgt_brw_read,
+TGT_OST_HDL(HAS_REPLY, OST_STATFS,     ofd_statfs_hdl),
+TGT_OST_HDL_HP(HAS_BODY | HAS_REPLY,   OST_BRW_READ,   tgt_brw_read,
                                                        ofd_hp_brw),
 /* don't set CORPUS flag for brw_write because -ENOENT may be valid case */
-TGT_OST_HDL_HP(HABEO_CORPUS| MUTABOR,  OST_BRW_WRITE,  tgt_brw_write,
+TGT_OST_HDL_HP(HAS_BODY | IS_MUTABLE,  OST_BRW_WRITE,  tgt_brw_write,
                                                        ofd_hp_brw),
-TGT_OST_HDL_HP(HABEO_CORPUS| HABEO_REFERO | MUTABOR,
+TGT_OST_HDL_HP(HAS_BODY | HAS_REPLY | IS_MUTABLE,
                                        OST_PUNCH,      ofd_punch_hdl,
                                                        ofd_hp_punch),
-TGT_OST_HDL(HABEO_CORPUS| HABEO_REFERO,        OST_SYNC,       ofd_sync_hdl),
-TGT_OST_HDL(0          | HABEO_REFERO, OST_QUOTACTL,   ofd_quotactl),
-TGT_OST_HDL(HABEO_CORPUS | HABEO_REFERO, OST_LADVISE,  ofd_ladvise_hdl),
+TGT_OST_HDL(HAS_BODY | HAS_REPLY,      OST_SYNC,       ofd_sync_hdl),
+TGT_OST_HDL(HAS_REPLY, OST_QUOTACTL,   ofd_quotactl),
+TGT_OST_HDL(HAS_BODY | HAS_REPLY, OST_LADVISE, ofd_ladvise_hdl),
 };
 
 static struct tgt_opc_slice ofd_common_slice[] = {
@@ -2876,12 +2871,6 @@ static int ofd_init0(const struct lu_env *env, struct ofd_device *m,
        /* set this lu_device to obd, because error handling need it */
        obd->obd_lu_dev = &m->ofd_dt_dev.dd_lu_dev;
 
-       rc = ofd_tunables_init(m);
-       if (rc) {
-               CERROR("Can't init ofd lprocfs, rc %d\n", rc);
-               RETURN(rc);
-       }
-
        /* No connection accepted until configurations will finish */
        spin_lock(&obd->obd_dev_lock);
        obd->obd_no_conn = 1;
@@ -2898,12 +2887,13 @@ static int ofd_init0(const struct lu_env *env, struct ofd_device *m,
 
        info = ofd_info_init(env, NULL);
        if (info == NULL)
-               GOTO(err_fini_proc, rc = -EFAULT);
+               RETURN(-EFAULT);
 
        rc = ofd_stack_init(env, m, cfg);
        if (rc) {
-               CERROR("Can't init device stack, rc %d\n", rc);
-               GOTO(err_fini_proc, rc);
+               CERROR("%s: can't init device stack, rc %d\n",
+                      obd->obd_name, rc);
+               RETURN(rc);
        }
 
 #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 14, 53, 0)
@@ -2933,6 +2923,10 @@ static int ofd_init0(const struct lu_env *env, struct ofd_device *m,
        if (rc)
                GOTO(err_free_ns, rc);
 
+       rc = ofd_tunables_init(m);
+       if (rc)
+               GOTO(err_fini_lut, rc);
+
        tgd->tgd_reserved_pcnt = 0;
 
        m->ofd_brw_size = m->ofd_lut.lut_dt_conf.ddp_brw_size;
@@ -2945,7 +2939,7 @@ static int ofd_init0(const struct lu_env *env, struct ofd_device *m,
 
        rc = ofd_fs_setup(env, m, obd);
        if (rc)
-               GOTO(err_fini_lut, rc);
+               GOTO(err_fini_proc, rc);
 
        fid.f_seq = FID_SEQ_LOCAL_NAME;
        fid.f_oid = 1;
@@ -2981,6 +2975,8 @@ err_fini_los:
        m->ofd_los = NULL;
 err_fini_fs:
        ofd_fs_cleanup(env, m);
+err_fini_proc:
+       ofd_procfs_fini(m);
 err_fini_lut:
        tgt_fini(env, &m->ofd_lut);
 err_free_ns:
@@ -2988,8 +2984,6 @@ err_free_ns:
        obd->obd_namespace = m->ofd_namespace = NULL;
 err_fini_stack:
        ofd_stack_fini(env, m, &m->ofd_osd->dd_lu_dev);
-err_fini_proc:
-       ofd_procfs_fini(m);
        return rc;
 }
 
@@ -3020,6 +3014,7 @@ static void ofd_fini(const struct lu_env *env, struct ofd_device *m)
        obd_exports_barrier(obd);
        obd_zombie_barrier();
 
+       ofd_procfs_fini(m);
        tgt_fini(env, &m->ofd_lut);
        ofd_stop_inconsistency_verification_thread(m);
        lfsck_degister(env, m->ofd_osd);
@@ -3033,7 +3028,7 @@ static void ofd_fini(const struct lu_env *env, struct ofd_device *m)
        }
 
        ofd_stack_fini(env, m, &m->ofd_dt_dev.dd_lu_dev);
-       ofd_procfs_fini(m);
+
        LASSERT(atomic_read(&d->ld_ref) == 0);
        server_put_mount(obd->obd_name, true);
        EXIT;