diff options
-rw-r--r-- | drivers/net/can/dev/netlink.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 549a2247d847..c212c7ff26cd 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -255,6 +255,10 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[], if ((maskedflags & ctrlstatic) != ctrlstatic) return -EOPNOTSUPP; + /* If a top dependency flag is provided, reset all its dependencies */ + if (cm->mask & CAN_CTRLMODE_FD) + priv->ctrlmode &= ~CAN_CTRLMODE_FD_TDC_MASK; + /* clear bits to be modified and copy the flag values */ priv->ctrlmode &= ~cm->mask; priv->ctrlmode |= maskedflags; @@ -270,11 +274,6 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[], can_set_default_mtu(dev); fd_tdc_flag_provided = cm->mask & CAN_CTRLMODE_FD_TDC_MASK; - /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually - * exclusive: make sure to turn the other one off - */ - if (fd_tdc_flag_provided) - priv->ctrlmode &= cm->flags | ~CAN_CTRLMODE_FD_TDC_MASK; } if (data[IFLA_CAN_BITTIMING]) { |