From 631946647882638504869e99db65a9af8bf0690a Mon Sep 17 00:00:00 2001 From: Josef Bacik Date: Fri, 8 Jun 2012 15:16:12 -0400 Subject: [PATCH] --- yaml --- r: 310825 b: refs/heads/master c: 8180ef8894fa402443205cff1e23417e8d3434df h: refs/heads/master i: 310823: 84cbae864d368b7d374ef77cb8104a52febed06b v: v3 --- [refs] | 2 +- trunk/fs/btrfs/inode.c | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 02650681cd33..82064040b02d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9c5085c147989d48dfe74194b48affc23f376650 +refs/heads/master: 8180ef8894fa402443205cff1e23417e8d3434df diff --git a/trunk/fs/btrfs/inode.c b/trunk/fs/btrfs/inode.c index b7f398c36cb7..06075043da5d 100644 --- a/trunk/fs/btrfs/inode.c +++ b/trunk/fs/btrfs/inode.c @@ -986,8 +986,10 @@ static noinline void async_cow_start(struct btrfs_work *work) compress_file_range(async_cow->inode, async_cow->locked_page, async_cow->start, async_cow->end, async_cow, &num_added); - if (num_added == 0) + if (num_added == 0) { + iput(async_cow->inode); async_cow->inode = NULL; + } } /* @@ -1020,6 +1022,8 @@ static noinline void async_cow_free(struct btrfs_work *work) { struct async_cow *async_cow; async_cow = container_of(work, struct async_cow, work); + if (async_cow->inode) + iput(async_cow->inode); kfree(async_cow); } @@ -1038,7 +1042,7 @@ static int cow_file_range_async(struct inode *inode, struct page *locked_page, while (start < end) { async_cow = kmalloc(sizeof(*async_cow), GFP_NOFS); BUG_ON(!async_cow); /* -ENOMEM */ - async_cow->inode = inode; + async_cow->inode = igrab(inode); async_cow->root = root; async_cow->locked_page = locked_page; async_cow->start = start;