Whamcloud - gitweb
LU-3963 osd-zfs: convert to linux list api
[fs/lustre-release.git] / lustre / osd-zfs / osd_handler.c
index 83b243d..66efdc9 100644 (file)
@@ -148,7 +148,7 @@ static void osd_trans_commit_cb(void *cb_data, int error)
        dt_txn_hook_commit(th);
 
        /* call per-transaction callbacks if any */
-       cfs_list_for_each_entry_safe(dcb, tmp, &oh->ot_dcb_list, dcb_linkage)
+       list_for_each_entry_safe(dcb, tmp, &oh->ot_dcb_list, dcb_linkage)
                dcb->dcb_func(NULL, th, dcb, error);
 
        /* Unlike ldiskfs, zfs updates space accounting at commit time.
@@ -173,7 +173,7 @@ static int osd_trans_cb_add(struct thandle *th, struct dt_txn_commit_cb *dcb)
        struct osd_thandle *oh;
 
        oh = container_of0(th, struct osd_thandle, ot_super);
-       cfs_list_add(&dcb->dcb_linkage, &oh->ot_dcb_list);
+       list_add(&dcb->dcb_linkage, &oh->ot_dcb_list);
 
        return 0;
 }
@@ -297,8 +297,8 @@ static struct thandle *osd_trans_create(const struct lu_env *env,
        }
 
        oh->ot_tx = tx;
-       CFS_INIT_LIST_HEAD(&oh->ot_dcb_list);
-       CFS_INIT_LIST_HEAD(&oh->ot_sa_list);
+       INIT_LIST_HEAD(&oh->ot_dcb_list);
+       INIT_LIST_HEAD(&oh->ot_sa_list);
        sema_init(&oh->ot_sa_lock, 1);
        memset(&oh->ot_quota_trans, 0, sizeof(oh->ot_quota_trans));
        th = &oh->ot_super;
@@ -516,7 +516,8 @@ static int osd_mount(const struct lu_env *env,
                     struct osd_device *o, struct lustre_cfg *cfg)
 {
        struct dsl_dataset      *ds;
-       char                    *dev  = lustre_cfg_string(cfg, 1);
+       char                    *mntdev = lustre_cfg_string(cfg, 1);
+       char                    *svname = lustre_cfg_string(cfg, 4);
        dmu_buf_t               *rootdb;
        dsl_pool_t              *dp;
        int                      rc;
@@ -525,12 +526,16 @@ static int osd_mount(const struct lu_env *env,
        if (o->od_objset.os != NULL)
                RETURN(0);
 
-       if (strlen(dev) >= sizeof(o->od_mntdev))
+       if (mntdev == NULL || svname == NULL)
+               RETURN(-EINVAL);
+
+       rc = strlcpy(o->od_mntdev, mntdev, sizeof(o->od_mntdev));
+       if (rc >= sizeof(o->od_mntdev))
                RETURN(-E2BIG);
 
-       strcpy(o->od_mntdev, dev);
-       strncpy(o->od_svname, lustre_cfg_string(cfg, 4),
-               sizeof(o->od_svname) - 1);
+       rc = strlcpy(o->od_svname, svname, sizeof(o->od_svname));
+       if (rc >= sizeof(o->od_svname))
+               RETURN(-E2BIG);
 
        if (server_name_is_ost(o->od_svname))
                o->od_is_ost = 1;
@@ -717,8 +722,10 @@ static struct lu_device *osd_device_fini(const struct lu_env *env,
                if (rc)
                        CERROR("%s: dsl_prop_unregister xattr error %d\n",
                                o->od_svname, rc);
-               arc_remove_prune_callback(o->arc_prune_cb);
-               o->arc_prune_cb = NULL;
+               if (o->arc_prune_cb != NULL) {
+                       arc_remove_prune_callback(o->arc_prune_cb);
+                       o->arc_prune_cb = NULL;
+               }
                osd_sync(env, lu2dt_dev(d));
                txg_wait_callbacks(spa_get_dsl(dmu_objset_spa(o->od_objset.os)));
        }