diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 4c7bb4b93e61427ccde26e5d20f49401a66d1b16..7f9673c0b6d47a2ad1c80101b5bd626ffff286f9 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -1438,10 +1438,17 @@ static ssize_t xps_rxqs_store(struct netdev_queue *queue, const char *buf, return err; } + if (!rtnl_trylock()) { + bitmap_free(mask); + return restart_syscall(); + } + cpus_read_lock(); err = __netif_set_xps_queue(dev, mask, index, true); cpus_read_unlock(); + rtnl_unlock(); + kfree(mask); return err ? : len; }