On Sun, Apr 21, 2019 at 01:02:39PM +1000, Jonathan Matthew wrote:
> 
> On Mon, Apr 15, 2019 at 04:48:02PM +0200, Stefan Sperling wrote:
> > ieee80211_media_change() will return ENETRESET if the interface is
> > switched into 11a/b/g/n mode from any other mode.
> > ifmedia_ioctl() considers this an error and reverts ifmedia's state
> > to the previous setting, even though net80211 has actually succeeded.
> > The result is that if_media and net80211 have conflicting ideas about the
> > current media mode of the interface, which can be observed with ifconfig.
> 
> Diff makes sense to me.  Currently we have some drivers with media_change
> functions returning the errno from ieee80211_media_change (iwn, iwm) and some
> just returning 0 at the end (run, rtwn, ral).  The ones returning 0 are mostly
> ignoring possible errors from x_init() so I'm leaning towards making them more
> like iwn/m.

Agreed.  Here's a follow-up diff which returns the errno from
ieee80211_media_change().

Index: sys/dev/ic/bwfm.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/bwfm.c,v
retrieving revision 1.59
diff -u -p -u -p -r1.59 bwfm.c
--- sys/dev/ic/bwfm.c   1 Apr 2019 15:19:56 -0000       1.59
+++ sys/dev/ic/bwfm.c   21 Apr 2019 13:26:12 -0000
@@ -757,7 +757,7 @@ bwfm_media_change(struct ifnet *ifp)
                bwfm_stop(ifp);
                bwfm_init(ifp);
        }
-       return 0;
+       return error;
 }
 
 /* Chip initialization (SDIO, PCIe) */
Index: sys/dev/ic/rtwn.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/rtwn.c,v
retrieving revision 1.45
diff -u -p -u -p -r1.45 rtwn.c
--- sys/dev/ic/rtwn.c   11 Mar 2019 06:19:33 -0000      1.45
+++ sys/dev/ic/rtwn.c   21 Apr 2019 13:26:12 -0000
@@ -745,9 +745,9 @@ rtwn_media_change(struct ifnet *ifp)
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
            (IFF_UP | IFF_RUNNING)) {
                rtwn_stop(ifp);
-               rtwn_init(ifp);
+               error = rtwn_init(ifp);
        }
-       return (0);
+       return (error);
 }
 
 /*
Index: sys/dev/pci/if_iwi.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_iwi.c,v
retrieving revision 1.138
diff -u -p -u -p -r1.138 if_iwi.c
--- sys/dev/pci/if_iwi.c        26 Apr 2018 12:50:07 -0000      1.138
+++ sys/dev/pci/if_iwi.c        21 Apr 2019 13:26:12 -0000
@@ -647,9 +647,9 @@ iwi_media_change(struct ifnet *ifp)
                return error;
 
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
-               iwi_init(ifp);
+               error = iwi_init(ifp);
 
-       return 0;
+       return error;
 }
 
 void
Index: sys/dev/usb/if_ral.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_ral.c,v
retrieving revision 1.145
diff -u -p -u -p -r1.145 if_ral.c
--- sys/dev/usb/if_ral.c        13 Jan 2019 14:27:15 -0000      1.145
+++ sys/dev/usb/if_ral.c        21 Apr 2019 13:26:12 -0000
@@ -497,9 +497,9 @@ ural_media_change(struct ifnet *ifp)
                return error;
 
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
-               ural_init(ifp);
+               error = ural_init(ifp);
 
-       return 0;
+       return error;
 }
 
 /*
Index: sys/dev/usb/if_rsu.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rsu.c,v
retrieving revision 1.43
diff -u -p -u -p -r1.43 if_rsu.c
--- sys/dev/usb/if_rsu.c        26 Apr 2018 12:50:07 -0000      1.43
+++ sys/dev/usb/if_rsu.c        21 Apr 2019 13:26:12 -0000
@@ -749,9 +749,9 @@ rsu_media_change(struct ifnet *ifp)
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
            (IFF_UP | IFF_RUNNING)) {
                rsu_stop(ifp);
-               rsu_init(ifp);
+               error = rsu_init(ifp);
        }
-       return (0);
+       return (error);
 }
 
 void
Index: sys/dev/usb/if_rum.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_rum.c,v
retrieving revision 1.123
diff -u -p -u -p -r1.123 if_rum.c
--- sys/dev/usb/if_rum.c        26 Oct 2017 15:00:28 -0000      1.123
+++ sys/dev/usb/if_rum.c        21 Apr 2019 13:26:12 -0000
@@ -591,9 +591,9 @@ rum_media_change(struct ifnet *ifp)
                return error;
 
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
-               rum_init(ifp);
+               error = rum_init(ifp);
 
-       return 0;
+       return error;
 }
 
 /*
Index: sys/dev/usb/if_run.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_run.c,v
retrieving revision 1.125
diff -u -p -u -p -r1.125 if_run.c
--- sys/dev/usb/if_run.c        30 Jan 2018 20:56:38 -0000      1.125
+++ sys/dev/usb/if_run.c        21 Apr 2019 13:26:12 -0000
@@ -1693,10 +1693,10 @@ run_media_change(struct ifnet *ifp)
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) ==
            (IFF_UP | IFF_RUNNING)) {
                run_stop(ifp, 0);
-               run_init(ifp);
+               error = run_init(ifp);
        }
 
-       return 0;
+       return error;
 }
 
 void
Index: sys/dev/usb/if_uath.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_uath.c,v
retrieving revision 1.82
diff -u -p -u -p -r1.82 if_uath.c
--- sys/dev/usb/if_uath.c       26 Oct 2017 15:00:28 -0000      1.82
+++ sys/dev/usb/if_uath.c       21 Apr 2019 13:26:12 -0000
@@ -719,9 +719,9 @@ uath_media_change(struct ifnet *ifp)
                return error;
 
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
-               uath_init(ifp);
+               error = uath_init(ifp);
 
-       return 0;
+       return error;
 }
 
 /*
Index: sys/dev/usb/if_upgt.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_upgt.c,v
retrieving revision 1.82
diff -u -p -u -p -r1.82 if_upgt.c
--- sys/dev/usb/if_upgt.c       25 Aug 2018 17:07:20 -0000      1.82
+++ sys/dev/usb/if_upgt.c       21 Apr 2019 13:26:13 -0000
@@ -1242,7 +1242,7 @@ upgt_media_change(struct ifnet *ifp)
                upgt_init(ifp);
        }
 
-       return (0);
+       return (error);
 }
 
 void
Index: sys/dev/usb/if_zyd.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_zyd.c,v
retrieving revision 1.119
diff -u -p -u -p -r1.119 if_zyd.c
--- sys/dev/usb/if_zyd.c        27 Nov 2018 14:53:56 -0000      1.119
+++ sys/dev/usb/if_zyd.c        21 Apr 2019 13:26:13 -0000
@@ -646,9 +646,9 @@ zyd_media_change(struct ifnet *ifp)
                return error;
 
        if ((ifp->if_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING))
-               zyd_init(ifp);
+               error = zyd_init(ifp);
 
-       return 0;
+       return error;
 }
 
 /*

Reply via email to