]> git.openfabrics.org - ~shefty/rdma-dev.git/blobdiff - fs/btrfs/relocation.c
Btrfs: fix balancing oops when invalidate_inode_pages2 returns EBUSY
[~shefty/rdma-dev.git] / fs / btrfs / relocation.c
index e71264d1c2c93acc3e1f418b6362c231dd61ad5f..c04f7f212602c4bcb71e58db938fcd0d8a9128ad 100644 (file)
@@ -2553,8 +2553,13 @@ int relocate_inode_pages(struct inode *inode, u64 start, u64 len)
        last_index = (start + len - 1) >> PAGE_CACHE_SHIFT;
 
        /* make sure the dirty trick played by the caller work */
-       ret = invalidate_inode_pages2_range(inode->i_mapping,
-                                           first_index, last_index);
+       while (1) {
+               ret = invalidate_inode_pages2_range(inode->i_mapping,
+                                                   first_index, last_index);
+               if (ret != -EBUSY)
+                       break;
+               schedule_timeout(HZ/10);
+       }
        if (ret)
                goto out_unlock;