summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/aggr/aggr_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/io/aggr/aggr_dev.c')
-rw-r--r--usr/src/uts/common/io/aggr/aggr_dev.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/usr/src/uts/common/io/aggr/aggr_dev.c b/usr/src/uts/common/io/aggr/aggr_dev.c
index f56b8f4f2f..2bdd97fc3f 100644
--- a/usr/src/uts/common/io/aggr/aggr_dev.c
+++ b/usr/src/uts/common/io/aggr/aggr_dev.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -160,6 +160,12 @@ aggr_open(queue_t *q, dev_t *devp, int flag, int sflag, cred_t *credp)
return (ENOSR);
/*
+ * The ioctl handling callback to process control ioctl
+ * messages; see comments above dld_ioctl() for details.
+ */
+ dsp->ds_ioctl = aggr_ioctl;
+
+ /*
* The aggr control node uses its own set of entry points.
*/
WR(q)->q_qinfo = &aggr_w_ctl_qinit;
@@ -177,6 +183,8 @@ aggr_close(queue_t *q)
if (dsp->ds_type == DLD_CONTROL) {
qprocsoff(q);
+ dld_finish_pending_task(dsp);
+ dsp->ds_ioctl = NULL;
dld_str_destroy(dsp);
return (0);
}
@@ -187,7 +195,7 @@ static void
aggr_wput(queue_t *q, mblk_t *mp)
{
if (DB_TYPE(mp) == M_IOCTL)
- aggr_ioctl(q, mp);
+ dld_ioctl(q, mp);
else
freemsg(mp);
}