Synchronization: rtnl_lock() semaphore.
        Context: process
 
+        This is only called by network subsystems internally,
+        not by user space calling ioctl as it was in before
+        linux-5.14.
+
+ndo_siocbond:
+        Synchronization: rtnl_lock() semaphore.
+        Context: process
+
+        Used by the bonding driver for the SIOCBOND family of
+        ioctl commands.
+
 ndo_siocwandev:
        Synchronization: rtnl_lock() semaphore.
        Context: process
 
        .ndo_select_queue       = bond_select_queue,
        .ndo_get_stats64        = bond_get_stats,
        .ndo_eth_ioctl          = bond_eth_ioctl,
-       .ndo_do_ioctl           = bond_do_ioctl,
+       .ndo_siocbond           = bond_do_ioctl,
        .ndo_siocdevprivate     = bond_siocdevprivate,
        .ndo_change_rx_flags    = bond_change_rx_flags,
        .ndo_set_rx_mode        = bond_set_rx_mode,
 
  *     Test if Media Access Control address is valid for the device.
  *
  * int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
- *     Called when a user requests an ioctl which can't be handled by
- *     the generic interface code. If not defined ioctls return
- *     not supported error code.
+ *     Old-style ioctl entry point. This is used internally by the
+ *     appletalk and ieee802154 subsystems but is no longer called by
+ *     the device ioctl handler.
+ *
+ * int (*ndo_siocbond)(struct net_device *dev, struct ifreq *ifr, int cmd);
+ *     Used by the bonding driver for its device specific ioctls:
+ *     SIOCBONDENSLAVE, SIOCBONDRELEASE, SIOCBONDSETHWADDR, SIOCBONDCHANGEACTIVE,
+ *     SIOCBONDSLAVEINFOQUERY, and SIOCBONDINFOQUERY
  *
  * * int (*ndo_eth_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
  *     Called for ethernet specific ioctls: SIOCGMIIPHY, SIOCGMIIREG,
                                                struct ifreq *ifr, int cmd);
        int                     (*ndo_eth_ioctl)(struct net_device *dev,
                                                 struct ifreq *ifr, int cmd);
+       int                     (*ndo_siocbond)(struct net_device *dev,
+                                               struct ifreq *ifr, int cmd);
        int                     (*ndo_siocwandev)(struct net_device *dev,
                                                  struct if_settings *ifs);
        int                     (*ndo_siocdevprivate)(struct net_device *dev,
 
        return err;
 }
 
-static int dev_do_ioctl(struct net_device *dev,
+static int dev_siocbond(struct net_device *dev,
                        struct ifreq *ifr, unsigned int cmd)
 {
        const struct net_device_ops *ops = dev->netdev_ops;
 
-       if (ops->ndo_do_ioctl) {
+       if (ops->ndo_siocbond) {
                if (netif_device_present(dev))
-                       return ops->ndo_do_ioctl(dev, ifr, cmd);
+                       return ops->ndo_siocbond(dev, ifr, cmd);
                else
                        return -ENODEV;
        }
                    cmd == SIOCBONDSLAVEINFOQUERY ||
                    cmd == SIOCBONDINFOQUERY ||
                    cmd == SIOCBONDCHANGEACTIVE) {
-                       err = dev_do_ioctl(dev, ifr, cmd);
+                       err = dev_siocbond(dev, ifr, cmd);
                } else
                        err = -EINVAL;