|
@@ -1543,7 +1543,20 @@ static void aio_batch_add(struct address_space *mapping,
|
|
|
}
|
|
|
|
|
|
abe = mempool_alloc(abe_pool, GFP_KERNEL);
|
|
|
- BUG_ON(!igrab(mapping->host));
|
|
|
+
|
|
|
+ /*
|
|
|
+ * we should be using igrab here, but
|
|
|
+ * we don't want to hammer on the global
|
|
|
+ * inode spinlock just to take an extra
|
|
|
+ * reference on a file that we must already
|
|
|
+ * have a reference to.
|
|
|
+ *
|
|
|
+ * When we're called, we always have a reference
|
|
|
+ * on the file, so we must always have a reference
|
|
|
+ * on the inode, so igrab must always just
|
|
|
+ * bump the count and move on.
|
|
|
+ */
|
|
|
+ atomic_inc(&mapping->host->i_count);
|
|
|
abe->mapping = mapping;
|
|
|
hlist_add_head(&abe->list, &batch_hash[bucket]);
|
|
|
return;
|