svn commit: r255855 - head/sys/dev/iscsi_initiator
Edward Tomasz Napierala
trasz at FreeBSD.org
Tue Sep 24 17:01:30 UTC 2013
Author: trasz
Date: Tue Sep 24 17:01:29 2013
New Revision: 255855
URL: http://svnweb.freebsd.org/changeset/base/255855
Log:
Improve error handling in the old initiator, preventing panic on attempt
to load iscsi_initiator.ko when iscsi.ko is already loaded.
Approved by: re (glebius)
Sponsored by: FreeBSD Foundation
Modified:
head/sys/dev/iscsi_initiator/iscsi.c
Modified: head/sys/dev/iscsi_initiator/iscsi.c
==============================================================================
--- head/sys/dev/iscsi_initiator/iscsi.c Tue Sep 24 16:59:28 2013 (r255854)
+++ head/sys/dev/iscsi_initiator/iscsi.c Tue Sep 24 17:01:29 2013 (r255855)
@@ -706,7 +706,7 @@ free_pdus(struct isc_softc *sc)
}
}
-static void
+static int
iscsi_start(void)
{
debug_called(8);
@@ -715,8 +715,6 @@ iscsi_start(void)
TUNABLE_INT_FETCH("net.iscsi_initiator.max_pdus", &max_pdus);
isc = malloc(sizeof(struct isc_softc), M_ISCSI, M_ZERO|M_WAITOK);
- isc->dev = make_dev(&iscsi_cdevsw, max_sessions, UID_ROOT, GID_WHEEL, 0600, "iscsi");
- isc->dev->si_drv1 = isc;
mtx_init(&isc->isc_mtx, "iscsi-isc", NULL, MTX_DEF);
TAILQ_INIT(&isc->isc_sess);
@@ -726,10 +724,6 @@ iscsi_start(void)
isc->pdu_zone = uma_zcreate("pdu", sizeof(pduq_t),
NULL, NULL, NULL, NULL,
0, 0);
- if(isc->pdu_zone == NULL) {
- xdebug("iscsi_initiator: uma_zcreate failed");
- // XXX: should fail...
- }
uma_zone_set_max(isc->pdu_zone, max_pdus);
isc->unit = new_unrhdr(0, max_sessions-1, NULL);
sx_init(&isc->unit_sx, "iscsi sx");
@@ -782,7 +776,16 @@ iscsi_start(void)
mtx_init(&iscsi_dbg_mtx, "iscsi_dbg", NULL, MTX_DEF);
#endif
+ isc->dev = make_dev_credf(MAKEDEV_CHECKNAME, &iscsi_cdevsw, max_sessions,
+ NULL, UID_ROOT, GID_WHEEL, 0600, "iscsi");
+ if (isc->dev == NULL) {
+ xdebug("iscsi_initiator: make_dev_credf failed");
+ return (EEXIST);
+ }
+ isc->dev->si_drv1 = isc;
+
printf("iscsi: version %s\n", iscsi_driver_version);
+ return (0);
}
/*
@@ -830,11 +833,13 @@ iscsi_stop(void)
static int
iscsi_modevent(module_t mod, int what, void *arg)
{
+ int error = 0;
+
debug_called(8);
switch(what) {
case MOD_LOAD:
- iscsi_start();
+ error = iscsi_start();
break;
case MOD_QUIESCE:
@@ -854,7 +859,7 @@ iscsi_modevent(module_t mod, int what, v
default:
break;
}
- return 0;
+ return (error);
}
moduledata_t iscsi_mod = {
More information about the svn-src-head
mailing list