X-Git-Url: https://bbs.cooldavid.org/git/?a=blobdiff_plain;f=fs%2Faio.c;h=8c8f6c5b6d7930657f7a3aadf44fe4b4dc96b738;hb=HEAD;hp=250b0a73c8a8ca92b78c3a0282d2425ce7649dcf;hpb=b10c4d40b3e413a908072acc53dea13e90c39aff;p=net-next-2.6.git 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;