diff options
author | rik <rik@FreeBSD.org> | 2008-06-30 21:18:27 +0000 |
---|---|---|
committer | rik <rik@FreeBSD.org> | 2008-06-30 21:18:27 +0000 |
commit | b49a85befd88be2728fef2765dde3ad4793511cc (patch) | |
tree | fc0d5f8df2864c985a23cc83800e237fc998a308 /sys/dev/ce/if_ce.c | |
parent | 8805d22e343f9c4b23897204b50dcd29aed7ca3f (diff) | |
download | FreeBSD-src-b49a85befd88be2728fef2765dde3ad4793511cc.zip FreeBSD-src-b49a85befd88be2728fef2765dde3ad4793511cc.tar.gz |
Do not set IFF_DEBUG directly from the driver.
MFC after: 1 month.
Diffstat (limited to 'sys/dev/ce/if_ce.c')
-rw-r--r-- | sys/dev/ce/if_ce.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/sys/dev/ce/if_ce.c b/sys/dev/ce/if_ce.c index 8f93667..396d670 100644 --- a/sys/dev/ce/if_ce.c +++ b/sys/dev/ce/if_ce.c @@ -962,8 +962,8 @@ static int ce_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data) if (! (ifp->if_flags & IFF_DEBUG)) d->chan->debug = 0; - else if (! d->chan->debug) - d->chan->debug = 1; + else + d->chan->debug = d->chan->debug_shadow; switch (cmd) { default: CE_DEBUG2 (d, ("ioctl 0x%lx\n", cmd)); return 0; @@ -1621,12 +1621,17 @@ static int ce_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struc #endif if (error) return error; - d->chan->debug = *(int*)data; #ifndef NETGRAPH - if (d->chan->debug) - d->ifp->if_flags |= IFF_DEBUG; - else - d->ifp->if_flags &= ~IFF_DEBUG; + /* + * The debug_shadow is always greater than zero for logic + * simplicity. For switching debug off the IFF_DEBUG is + * responsible. + */ + d->chan->debug_shadow = (*(int*)data) ? (*(int*)data) : 1; + if (d->ifp->if_flags & IFF_DEBUG) + d->chan->debug = d->chan->debug_shadow; +#else + d->chan->debug = *(int*)data; #endif return 0; |