diff options
author | Arkadiusz Bubała <[email protected]> | 2017-07-06 17:38:24 +0200 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2017-07-06 08:38:24 -0700 |
commit | 94b25662c51696ec081494e69efb5896566dede2 (patch) | |
tree | 741d3a4cfa91aac34c8fe4a29a483b38987e6008 | |
parent | 9c3dcab5e229723ba41c67926223e942794a9ab2 (diff) |
Reschedule processes on -ERESTARTSYS
On the single core machine the system may hang when the
spa_namespare_lock acquisition fails in the zvol_first_open
function. It returns -ERESTARTSYS error what causes the
endless loop in __blkdev_get function.
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: George Melikov <[email protected]>
Signed-off-by: Arkadiusz Bubała <[email protected]>
Closes #6283
Closes #6312
-rw-r--r-- | module/zfs/zvol.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 3e9f004ef..4f1601ec6 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -1358,6 +1358,8 @@ out_mutex: mutex_exit(&zv->zv_state_lock); if (drop_suspend) rw_exit(&zv->zv_suspend_lock); + if (error == -ERESTARTSYS) + schedule(); return (SET_ERROR(error)); } |