X-Git-Url: https://bbs.cooldavid.org/git/?p=net-next-2.6.git;a=blobdiff_plain;f=fs%2Faio.c;h=8c8f6c5b6d7930657f7a3aadf44fe4b4dc96b738;hp=250b0a73c8a8ca92b78c3a0282d2425ce7649dcf;hb=HEAD;hpb=c70b5296e775cde46cfcb2d860ba160108a5ec7a diff --git a/fs/aio.c b/fs/aio.c index 250b0a73c8a..8c8f6c5b6d7 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1543,7 +1543,19 @@ 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 ihold() is safe here. + */ + ihold(mapping->host); abe->mapping = mapping; hlist_add_head(&abe->list, &batch_hash[bucket]); return;