]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/btrfs/ordered-data.c
Btrfs: wake up the tasks that wait for the io earlier
[karo-tx-linux.git] / fs / btrfs / ordered-data.c
index 73de19c37f5aac5a366c655366861204fcc8eb47..a75eaa286b8a91bdad4e26de0ed02b08df62e3b8 100644 (file)
@@ -349,10 +349,13 @@ int btrfs_dec_test_first_ordered_pending(struct inode *inode,
        if (!uptodate)
                set_bit(BTRFS_ORDERED_IOERR, &entry->flags);
 
-       if (entry->bytes_left == 0)
+       if (entry->bytes_left == 0) {
                ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
-       else
+               if (waitqueue_active(&entry->wait))
+                       wake_up(&entry->wait);
+       } else {
                ret = 1;
+       }
 out:
        if (!ret && cached && entry) {
                *cached = entry;
@@ -410,10 +413,13 @@ have_entry:
        if (!uptodate)
                set_bit(BTRFS_ORDERED_IOERR, &entry->flags);
 
-       if (entry->bytes_left == 0)
+       if (entry->bytes_left == 0) {
                ret = test_and_set_bit(BTRFS_ORDERED_IO_DONE, &entry->flags);
-       else
+               if (waitqueue_active(&entry->wait))
+                       wake_up(&entry->wait);
+       } else {
                ret = 1;
+       }
 out:
        if (!ret && cached && entry) {
                *cached = entry;