diff options
author | Milton Miller <miltonm@us.ibm.com> | 2021-03-29 10:20:39 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-03-30 13:16:23 -0700 |
commit | 03cb4d05b4ea9a3491674ca40952adb708d549fa (patch) | |
tree | 11878971da567ed502e09de27539da61a45a77d3 /fs/btrfs/dir-item.c | |
parent | 6e5a03bcba44e080a6bf300194a68ce9bb1e5184 (diff) |
net/ncsi: Avoid channel_monitor hrtimer deadlock
Calling ncsi_stop_channel_monitor from channel_monitor is a guaranteed
deadlock on SMP because stop calls del_timer_sync on the timer that
invoked channel_monitor as its timer function.
Recognise the inherent race of marking the monitor disabled before
deleting the timer by just returning if enable was cleared. After
a timeout (the default case -- reset to START when response received)
just mark the monitor.enabled false.
If the channel has an entry on the channel_queue list, or if the
state is not ACTIVE or INACTIVE, then warn and mark the timer stopped
and don't restart, as the locking is broken somehow.
Fixes: 0795fb2021f0 ("net/ncsi: Stop monitor if channel times out or is inactive")
Signed-off-by: Milton Miller <miltonm@us.ibm.com>
Signed-off-by: Eddie James <eajames@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs/btrfs/dir-item.c')
0 files changed, 0 insertions, 0 deletions