{
struct obd_device *lwp;
struct lwp_register_item *lri;
+ bool cb = false;
ENTRY;
LASSERTF(strlen(lwpname) < MTI_NAME_MAXLEN, "lwpname is too long %s\n",
spin_lock(&lwp_register_list_lock);
list_add(&lri->lri_list, &lwp_register_list);
+ if (*exp != NULL)
+ cb = true;
spin_unlock(&lwp_register_list_lock);
- if (*exp != NULL && cb_func != NULL)
+ if (cb && cb_func != NULL)
cb_func(cb_data);
lustre_put_lwp_item(lri);
if (*lri->lri_exp != NULL)
continue;
*lri->lri_exp = class_export_get(exp);
+ if (lri->lri_cb_func == NULL)
+ continue;
atomic_inc(&lri->lri_ref);
spin_unlock(&lwp_register_list_lock);
- if (lri->lri_cb_func != NULL)
- lri->lri_cb_func(lri->lri_cb_data);
+ lri->lri_cb_func(lri->lri_cb_data);
lustre_put_lwp_item(lri);
/* Others may have changed the list after we unlock, we have
struct ptlrpc_thread *thread;
LASSERT(exp != NULL);
+ class_export_get(exp);
+
lwp = lu2lwp_dev(exp->exp_obd->obd_lu_dev);
thread = &lwp->lpd_notify_thread;
lustre_notify_lwp_list(exp);
+ class_export_put(exp);
thread_set_flags(thread, SVC_STOPPED);
wake_up(&thread->t_ctl_waitq);
return 0;