summaryrefslogtreecommitdiff
path: root/kernel/async.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-04-20 12:04:26 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-04-20 12:04:26 -0400
commitcfec36d75b460843403c9e1392fddedf08288c9f (patch)
treec2680c2627772aead51327fb3b21bf06ee66f72a /kernel/async.c
parent3b7c824e9330a640312fce1b04537c684c1d602c (diff)
parentb22a1fa1b34f17ef3a5cc6007e0705375de3d5dd (diff)
Merge remote-tracking branch 'linux-stable/linux-4.15.y' into bcachefs-buffered-io-2
Diffstat (limited to 'kernel/async.c')
-rw-r--r--kernel/async.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/kernel/async.c b/kernel/async.c
index 2cbd3dd5940d..a893d6170944 100644
--- a/kernel/async.c
+++ b/kernel/async.c
@@ -84,20 +84,24 @@ static atomic_t entry_count;
static async_cookie_t lowest_in_progress(struct async_domain *domain)
{
- struct list_head *pending;
+ struct async_entry *first = NULL;
async_cookie_t ret = ASYNC_COOKIE_MAX;
unsigned long flags;
spin_lock_irqsave(&async_lock, flags);
- if (domain)
- pending = &domain->pending;
- else
- pending = &async_global_pending;
+ if (domain) {
+ if (!list_empty(&domain->pending))
+ first = list_first_entry(&domain->pending,
+ struct async_entry, domain_list);
+ } else {
+ if (!list_empty(&async_global_pending))
+ first = list_first_entry(&async_global_pending,
+ struct async_entry, global_list);
+ }
- if (!list_empty(pending))
- ret = list_first_entry(pending, struct async_entry,
- domain_list)->cookie;
+ if (first)
+ ret = first->cookie;
spin_unlock_irqrestore(&async_lock, flags);
return ret;