Date: Tue, 24 Sep 2013 18:24:02 +0000 (UTC) From: Edward Tomasz Napierala <trasz@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r255857 - head/sys/dev/iscsi Message-ID: <201309241824.r8OIO2fs059632@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: trasz Date: Tue Sep 24 18:24:01 2013 New Revision: 255857 URL: http://svnweb.freebsd.org/changeset/base/255857 Log: As it turns out, when MOD_LOAD handler returns error, kernel calls MOD_UNLOAD handler. Make the new iSCSI initiator not panic when this happens. Approved by: re (glebius) Sponsored by: FreeBSD Foundation Modified: head/sys/dev/iscsi/iscsi.c Modified: head/sys/dev/iscsi/iscsi.c ============================================================================== --- head/sys/dev/iscsi/iscsi.c Tue Sep 24 17:09:28 2013 (r255856) +++ head/sys/dev/iscsi/iscsi.c Tue Sep 24 18:24:01 2013 (r255857) @@ -2036,10 +2036,6 @@ iscsi_load(void) NULL, UID_ROOT, GID_WHEEL, 0600, "iscsi"); if (error != 0) { ISCSI_WARN("failed to create device node, error %d", error); - sx_destroy(&sc->sc_lock); - cv_destroy(&sc->sc_cv); - uma_zdestroy(iscsi_outstanding_zone); - free(sc, M_ISCSI); return (error); } sc->sc_cdev->si_drv1 = sc; @@ -2056,16 +2052,16 @@ iscsi_load(void) static int iscsi_unload(void) { - /* - * XXX: kldunload hangs on "devdrn". - */ struct iscsi_session *is, *tmp; - ISCSI_DEBUG("removing device node"); - destroy_dev(sc->sc_cdev); - ISCSI_DEBUG("device node removed"); + if (sc->sc_cdev != NULL) { + ISCSI_DEBUG("removing device node"); + destroy_dev(sc->sc_cdev); + ISCSI_DEBUG("device node removed"); + } - EVENTHANDLER_DEREGISTER(shutdown_post_sync, sc->sc_shutdown_eh); + if (sc->sc_shutdown_eh != NULL) + EVENTHANDLER_DEREGISTER(shutdown_post_sync, sc->sc_shutdown_eh); sx_slock(&sc->sc_lock); TAILQ_FOREACH_SAFE(is, &sc->sc_sessions, is_next, tmp)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309241824.r8OIO2fs059632>