On Tue, Mar 1, 2011 at 5:56 AM, Zhong, Xin <xin.zhong@xxxxxxxxx> wrote:
> Hi Mitch,
>
> I suspect there's a lock contention between flush-btrfs (lock_dellalloc_pages) and btrfs_file_aio_write. However I can not recreate it locally. Could you please try below patch? Thanks!
>
> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index 65338a1..b9d0929 100644
> --- a/fs/btrfs/file.c
> +++ b/fs/btrfs/file.c
> @@ -1007,17 +1007,16 @@ static ssize_t btrfs_file_aio_write(struct kiocb *iocb,
> goto out;
> }
>
> - ret = btrfs_delalloc_reserve_space(inode,
> - num_pages << PAGE_CACHE_SHIFT);
> - if (ret)
> - goto out;
> -
> ret = prepare_pages(root, file, pages, num_pages,
> pos, first_index, last_index,
> write_bytes);
> - if (ret) {
> - btrfs_delalloc_release_space(inode,
> + if (ret)
> + goto out;
> +
> + ret = btrfs_delalloc_reserve_space(inode,
> num_pages << PAGE_CACHE_SHIFT);
> + if (ret) {
> + btrfs_drop_pages(pages, num_pages);
> goto out;
> }
>
>
Thanks.
I've tested this patch, but the build is still failing at the same
point as before.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html