diff options
Diffstat (limited to 'fs/aio.c')
-rw-r--r-- | fs/aio.c | 15 |
1 files changed, 14 insertions, 1 deletions
@@ -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; |