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.
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;
}
}
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;
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;
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;
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)));
}