diff options
-rw-r--r-- | fs/cifs/inode.c | 6 | ||||
-rw-r--r-- | fs/nfs/inode.c | 6 | ||||
-rw-r--r-- | fs/nfs/internal.h | 2 | ||||
-rw-r--r-- | fs/nfs/pagelist.c | 2 | ||||
-rw-r--r-- | fs/nfs/pnfs.c | 4 | ||||
-rw-r--r-- | include/linux/wait.h | 10 | ||||
-rw-r--r-- | kernel/sched/wait.c | 20 | ||||
-rw-r--r-- | net/sunrpc/sched.c | 6 |
8 files changed, 28 insertions, 28 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 6b66dd5d1540..a329f5ba35aa 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -1831,11 +1831,11 @@ cifs_invalidate_mapping(struct inode *inode) | |||
1831 | * @word: long word containing the bit lock | 1831 | * @word: long word containing the bit lock |
1832 | */ | 1832 | */ |
1833 | static int | 1833 | static int |
1834 | cifs_wait_bit_killable(struct wait_bit_key *key) | 1834 | cifs_wait_bit_killable(struct wait_bit_key *key, int mode) |
1835 | { | 1835 | { |
1836 | if (fatal_signal_pending(current)) | ||
1837 | return -ERESTARTSYS; | ||
1838 | freezable_schedule_unsafe(); | 1836 | freezable_schedule_unsafe(); |
1837 | if (signal_pending_state(mode, current)) | ||
1838 | return -ERESTARTSYS; | ||
1839 | return 0; | 1839 | return 0; |
1840 | } | 1840 | } |
1841 | 1841 | ||
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c index 31b0a52223a7..c7e8b87da5b2 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c | |||
@@ -75,11 +75,11 @@ nfs_fattr_to_ino_t(struct nfs_fattr *fattr) | |||
75 | * nfs_wait_bit_killable - helper for functions that are sleeping on bit locks | 75 | * nfs_wait_bit_killable - helper for functions that are sleeping on bit locks |
76 | * @word: long word containing the bit lock | 76 | * @word: long word containing the bit lock |
77 | */ | 77 | */ |
78 | int nfs_wait_bit_killable(struct wait_bit_key *key) | 78 | int nfs_wait_bit_killable(struct wait_bit_key *key, int mode) |
79 | { | 79 | { |
80 | if (fatal_signal_pending(current)) | ||
81 | return -ERESTARTSYS; | ||
82 | freezable_schedule_unsafe(); | 80 | freezable_schedule_unsafe(); |
81 | if (signal_pending_state(mode, current)) | ||
82 | return -ERESTARTSYS; | ||
83 | return 0; | 83 | return 0; |
84 | } | 84 | } |
85 | EXPORT_SYMBOL_GPL(nfs_wait_bit_killable); | 85 | EXPORT_SYMBOL_GPL(nfs_wait_bit_killable); |
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h index 56cfde26fb9c..9dea85f7f918 100644 --- a/fs/nfs/internal.h +++ b/fs/nfs/internal.h | |||
@@ -379,7 +379,7 @@ extern int nfs_drop_inode(struct inode *); | |||
379 | extern void nfs_clear_inode(struct inode *); | 379 | extern void nfs_clear_inode(struct inode *); |
380 | extern void nfs_evict_inode(struct inode *); | 380 | extern void nfs_evict_inode(struct inode *); |
381 | void nfs_zap_acl_cache(struct inode *inode); | 381 | void nfs_zap_acl_cache(struct inode *inode); |
382 | extern int nfs_wait_bit_killable(struct wait_bit_key *key); | 382 | extern int nfs_wait_bit_killable(struct wait_bit_key *key, int mode); |
383 | 383 | ||
384 | /* super.c */ | 384 | /* super.c */ |
385 | extern const struct super_operations nfs_sops; | 385 | extern const struct super_operations nfs_sops; |
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c index fe3ddd20ff89..452a011ba0d8 100644 --- a/fs/nfs/pagelist.c +++ b/fs/nfs/pagelist.c | |||
@@ -129,7 +129,7 @@ __nfs_iocounter_wait(struct nfs_io_counter *c) | |||
129 | set_bit(NFS_IO_INPROGRESS, &c->flags); | 129 | set_bit(NFS_IO_INPROGRESS, &c->flags); |
130 | if (atomic_read(&c->io_count) == 0) | 130 | if (atomic_read(&c->io_count) == 0) |
131 | break; | 131 | break; |
132 | ret = nfs_wait_bit_killable(&q.key); | 132 | ret = nfs_wait_bit_killable(&q.key, TASK_KILLABLE); |
133 | } while (atomic_read(&c->io_count) != 0 && !ret); | 133 | } while (atomic_read(&c->io_count) != 0 && !ret); |
134 | finish_wait(wq, &q.wait); | 134 | finish_wait(wq, &q.wait); |
135 | return ret; | 135 | return ret; |
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c index 5a8ae2125b50..bec0384499f7 100644 --- a/fs/nfs/pnfs.c +++ b/fs/nfs/pnfs.c | |||
@@ -1466,11 +1466,11 @@ static bool pnfs_within_mdsthreshold(struct nfs_open_context *ctx, | |||
1466 | } | 1466 | } |
1467 | 1467 | ||
1468 | /* stop waiting if someone clears NFS_LAYOUT_RETRY_LAYOUTGET bit. */ | 1468 | /* stop waiting if someone clears NFS_LAYOUT_RETRY_LAYOUTGET bit. */ |
1469 | static int pnfs_layoutget_retry_bit_wait(struct wait_bit_key *key) | 1469 | static int pnfs_layoutget_retry_bit_wait(struct wait_bit_key *key, int mode) |
1470 | { | 1470 | { |
1471 | if (!test_bit(NFS_LAYOUT_RETRY_LAYOUTGET, key->flags)) | 1471 | if (!test_bit(NFS_LAYOUT_RETRY_LAYOUTGET, key->flags)) |
1472 | return 1; | 1472 | return 1; |
1473 | return nfs_wait_bit_killable(key); | 1473 | return nfs_wait_bit_killable(key, mode); |
1474 | } | 1474 | } |
1475 | 1475 | ||
1476 | static bool pnfs_prepare_to_retry_layoutget(struct pnfs_layout_hdr *lo) | 1476 | static bool pnfs_prepare_to_retry_layoutget(struct pnfs_layout_hdr *lo) |
diff --git a/include/linux/wait.h b/include/linux/wait.h index 1e1bf9f963a9..513b36f04dfd 100644 --- a/include/linux/wait.h +++ b/include/linux/wait.h | |||
@@ -145,7 +145,7 @@ __remove_wait_queue(wait_queue_head_t *head, wait_queue_t *old) | |||
145 | list_del(&old->task_list); | 145 | list_del(&old->task_list); |
146 | } | 146 | } |
147 | 147 | ||
148 | typedef int wait_bit_action_f(struct wait_bit_key *); | 148 | typedef int wait_bit_action_f(struct wait_bit_key *, int mode); |
149 | void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); | 149 | void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key); |
150 | void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); | 150 | void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key); |
151 | void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key); | 151 | void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr, void *key); |
@@ -960,10 +960,10 @@ int wake_bit_function(wait_queue_t *wait, unsigned mode, int sync, void *key); | |||
960 | } while (0) | 960 | } while (0) |
961 | 961 | ||
962 | 962 | ||
963 | extern int bit_wait(struct wait_bit_key *); | 963 | extern int bit_wait(struct wait_bit_key *, int); |
964 | extern int bit_wait_io(struct wait_bit_key *); | 964 | extern int bit_wait_io(struct wait_bit_key *, int); |
965 | extern int bit_wait_timeout(struct wait_bit_key *); | 965 | extern int bit_wait_timeout(struct wait_bit_key *, int); |
966 | extern int bit_wait_io_timeout(struct wait_bit_key *); | 966 | extern int bit_wait_io_timeout(struct wait_bit_key *, int); |
967 | 967 | ||
968 | /** | 968 | /** |
969 | * wait_on_bit - wait for a bit to be cleared | 969 | * wait_on_bit - wait for a bit to be cleared |
diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c index f10bd873e684..f15d6b6a538a 100644 --- a/kernel/sched/wait.c +++ b/kernel/sched/wait.c | |||
@@ -392,7 +392,7 @@ __wait_on_bit(wait_queue_head_t *wq, struct wait_bit_queue *q, | |||
392 | do { | 392 | do { |
393 | prepare_to_wait(wq, &q->wait, mode); | 393 | prepare_to_wait(wq, &q->wait, mode); |
394 | if (test_bit(q->key.bit_nr, q->key.flags)) | 394 | if (test_bit(q->key.bit_nr, q->key.flags)) |
395 | ret = (*action)(&q->key); | 395 | ret = (*action)(&q->key, mode); |
396 | } while (test_bit(q->key.bit_nr, q->key.flags) && !ret); | 396 | } while (test_bit(q->key.bit_nr, q->key.flags) && !ret); |
397 | finish_wait(wq, &q->wait); | 397 | finish_wait(wq, &q->wait); |
398 | return ret; | 398 | return ret; |
@@ -431,7 +431,7 @@ __wait_on_bit_lock(wait_queue_head_t *wq, struct wait_bit_queue *q, | |||
431 | prepare_to_wait_exclusive(wq, &q->wait, mode); | 431 | prepare_to_wait_exclusive(wq, &q->wait, mode); |
432 | if (!test_bit(q->key.bit_nr, q->key.flags)) | 432 | if (!test_bit(q->key.bit_nr, q->key.flags)) |
433 | continue; | 433 | continue; |
434 | ret = action(&q->key); | 434 | ret = action(&q->key, mode); |
435 | if (!ret) | 435 | if (!ret) |
436 | continue; | 436 | continue; |
437 | abort_exclusive_wait(wq, &q->wait, mode, &q->key); | 437 | abort_exclusive_wait(wq, &q->wait, mode, &q->key); |
@@ -581,43 +581,43 @@ void wake_up_atomic_t(atomic_t *p) | |||
581 | } | 581 | } |
582 | EXPORT_SYMBOL(wake_up_atomic_t); | 582 | EXPORT_SYMBOL(wake_up_atomic_t); |
583 | 583 | ||
584 | __sched int bit_wait(struct wait_bit_key *word) | 584 | __sched int bit_wait(struct wait_bit_key *word, int mode) |
585 | { | 585 | { |
586 | schedule(); | 586 | schedule(); |
587 | if (signal_pending(current)) | 587 | if (signal_pending_state(mode, current)) |
588 | return -EINTR; | 588 | return -EINTR; |
589 | return 0; | 589 | return 0; |
590 | } | 590 | } |
591 | EXPORT_SYMBOL(bit_wait); | 591 | EXPORT_SYMBOL(bit_wait); |
592 | 592 | ||
593 | __sched int bit_wait_io(struct wait_bit_key *word) | 593 | __sched int bit_wait_io(struct wait_bit_key *word, int mode) |
594 | { | 594 | { |
595 | io_schedule(); | 595 | io_schedule(); |
596 | if (signal_pending(current)) | 596 | if (signal_pending_state(mode, current)) |
597 | return -EINTR; | 597 | return -EINTR; |
598 | return 0; | 598 | return 0; |
599 | } | 599 | } |
600 | EXPORT_SYMBOL(bit_wait_io); | 600 | EXPORT_SYMBOL(bit_wait_io); |
601 | 601 | ||
602 | __sched int bit_wait_timeout(struct wait_bit_key *word) | 602 | __sched int bit_wait_timeout(struct wait_bit_key *word, int mode) |
603 | { | 603 | { |
604 | unsigned long now = READ_ONCE(jiffies); | 604 | unsigned long now = READ_ONCE(jiffies); |
605 | if (time_after_eq(now, word->timeout)) | 605 | if (time_after_eq(now, word->timeout)) |
606 | return -EAGAIN; | 606 | return -EAGAIN; |
607 | schedule_timeout(word->timeout - now); | 607 | schedule_timeout(word->timeout - now); |
608 | if (signal_pending(current)) | 608 | if (signal_pending_state(mode, current)) |
609 | return -EINTR; | 609 | return -EINTR; |
610 | return 0; | 610 | return 0; |
611 | } | 611 | } |
612 | EXPORT_SYMBOL_GPL(bit_wait_timeout); | 612 | EXPORT_SYMBOL_GPL(bit_wait_timeout); |
613 | 613 | ||
614 | __sched int bit_wait_io_timeout(struct wait_bit_key *word) | 614 | __sched int bit_wait_io_timeout(struct wait_bit_key *word, int mode) |
615 | { | 615 | { |
616 | unsigned long now = READ_ONCE(jiffies); | 616 | unsigned long now = READ_ONCE(jiffies); |
617 | if (time_after_eq(now, word->timeout)) | 617 | if (time_after_eq(now, word->timeout)) |
618 | return -EAGAIN; | 618 | return -EAGAIN; |
619 | io_schedule_timeout(word->timeout - now); | 619 | io_schedule_timeout(word->timeout - now); |
620 | if (signal_pending(current)) | 620 | if (signal_pending_state(mode, current)) |
621 | return -EINTR; | 621 | return -EINTR; |
622 | return 0; | 622 | return 0; |
623 | } | 623 | } |
diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c index f14f24ee9983..73ad57a59989 100644 --- a/net/sunrpc/sched.c +++ b/net/sunrpc/sched.c | |||
@@ -250,11 +250,11 @@ void rpc_destroy_wait_queue(struct rpc_wait_queue *queue) | |||
250 | } | 250 | } |
251 | EXPORT_SYMBOL_GPL(rpc_destroy_wait_queue); | 251 | EXPORT_SYMBOL_GPL(rpc_destroy_wait_queue); |
252 | 252 | ||
253 | static int rpc_wait_bit_killable(struct wait_bit_key *key) | 253 | static int rpc_wait_bit_killable(struct wait_bit_key *key, int mode) |
254 | { | 254 | { |
255 | if (fatal_signal_pending(current)) | ||
256 | return -ERESTARTSYS; | ||
257 | freezable_schedule_unsafe(); | 255 | freezable_schedule_unsafe(); |
256 | if (signal_pending_state(mode, current)) | ||
257 | return -ERESTARTSYS; | ||
258 | return 0; | 258 | return 0; |
259 | } | 259 | } |
260 | 260 | ||