Skip to content

Commit

Permalink
Replace usage of schedule_timeout with schedule_timeout_interruptible
Browse files Browse the repository at this point in the history
This commit replaces current usages of schedule_timeout() with
schedule_timeout_interruptible() in code paths that expect the running
task to sleep for a short period of time. When schedule_timeout() is
called without previously calling set_current_state(), the running
task never sleeps because the task state remains in TASK_RUNNING.

By calling schedule_timeout_interruptible() to set the task state to
TASK_INTERRUPTIBLE before calling schedule_timeout() we achieve the
intended/desired behavior of putting the task to sleep for the
specified timeout.

Signed-off-by: Daniel Perry <[email protected]>
  • Loading branch information
Dan-Perry committed May 3, 2024
1 parent 645b833 commit 6e695fd
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion module/os/linux/spl/spl-taskq.c
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ task_alloc(taskq_t *tq, uint_t flags, unsigned long *irqflags)
* throttling the task dispatch rate.
*/
spin_unlock_irqrestore(&tq->tq_lock, *irqflags);
schedule_timeout(HZ / 100);
schedule_timeout_interruptible(HZ / 100);
spin_lock_irqsave_nested(&tq->tq_lock, *irqflags,
tq->tq_lock_class);
if (count < 100) {
Expand Down
2 changes: 1 addition & 1 deletion module/os/linux/zfs/vdev_disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ vdev_disk_open(vdev_t *v, uint64_t *psize, uint64_t *max_psize,
if (v->vdev_removed)
break;

schedule_timeout(MSEC_TO_TICK(10));
schedule_timeout_interruptible(MSEC_TO_TICK(10));
} else if (unlikely(BDH_PTR_ERR(bdh) == -ERESTARTSYS)) {
timeout = MSEC2NSEC(zfs_vdev_open_timeout_ms * 10);
continue;
Expand Down
2 changes: 1 addition & 1 deletion module/os/linux/zfs/zvol_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -798,7 +798,7 @@ zvol_open(struct block_device *bdev, fmode_t flag)
if ((gethrtime() - start) > timeout)
return (SET_ERROR(-ERESTARTSYS));

schedule_timeout(MSEC_TO_TICK(10));
schedule_timeout_interruptible(MSEC_TO_TICK(10));

Check failure on line 801 in module/os/linux/zfs/zvol_os.c

View workflow job for this annotation

GitHub Actions / checkstyle

line > 80 characters
goto retry;
#endif
} else {
Expand Down

0 comments on commit 6e695fd

Please sign in to comment.