diff options
author | Josef Bacik <josef@redhat.com> | 2012-01-13 12:09:22 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2012-01-16 15:29:43 -0500 |
commit | f248679e86fead40cc78e724c7181d6bec1a2046 (patch) | |
tree | 88abeee0b2a87c0f0377509525c92d3c9ec15a15 /fs/btrfs/inode.c | |
parent | 8c2a3ca20f6233677ac3222c6506174010eb414f (diff) |
Btrfs: add a delalloc mutex to inodes for delalloc reservations
I was using i_mutex for this, but we're getting bogus lockdep warnings by doing
that and theres no real way to get rid of those, so just stop using i_mutex to
protect delalloc metadata reservations and use a delalloc mutex instead. This
shouldn't be contended often at all, only if you are writing and mmap writing to
the file at the same time. Thanks,
Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 11 |
1 files changed, 1 insertions, 10 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 619742d37166..5977987abdb1 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -2239,14 +2239,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root) | |||
2239 | continue; | 2239 | continue; |
2240 | } | 2240 | } |
2241 | nr_truncate++; | 2241 | nr_truncate++; |
2242 | /* | ||
2243 | * Need to hold the imutex for reservation purposes, not | ||
2244 | * a huge deal here but I have a WARN_ON in | ||
2245 | * btrfs_delalloc_reserve_space to catch offenders. | ||
2246 | */ | ||
2247 | mutex_lock(&inode->i_mutex); | ||
2248 | ret = btrfs_truncate(inode); | 2242 | ret = btrfs_truncate(inode); |
2249 | mutex_unlock(&inode->i_mutex); | ||
2250 | } else { | 2243 | } else { |
2251 | nr_unlink++; | 2244 | nr_unlink++; |
2252 | } | 2245 | } |
@@ -6411,10 +6404,7 @@ int btrfs_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
6411 | u64 page_start; | 6404 | u64 page_start; |
6412 | u64 page_end; | 6405 | u64 page_end; |
6413 | 6406 | ||
6414 | /* Need this to keep space reservations serialized */ | ||
6415 | mutex_lock(&inode->i_mutex); | ||
6416 | ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); | 6407 | ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); |
6417 | mutex_unlock(&inode->i_mutex); | ||
6418 | if (!ret) | 6408 | if (!ret) |
6419 | ret = btrfs_update_time(vma->vm_file); | 6409 | ret = btrfs_update_time(vma->vm_file); |
6420 | if (ret) { | 6410 | if (ret) { |
@@ -6758,6 +6748,7 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) | |||
6758 | extent_io_tree_init(&ei->io_tree, &inode->i_data); | 6748 | extent_io_tree_init(&ei->io_tree, &inode->i_data); |
6759 | extent_io_tree_init(&ei->io_failure_tree, &inode->i_data); | 6749 | extent_io_tree_init(&ei->io_failure_tree, &inode->i_data); |
6760 | mutex_init(&ei->log_mutex); | 6750 | mutex_init(&ei->log_mutex); |
6751 | mutex_init(&ei->delalloc_mutex); | ||
6761 | btrfs_ordered_inode_tree_init(&ei->ordered_tree); | 6752 | btrfs_ordered_inode_tree_init(&ei->ordered_tree); |
6762 | INIT_LIST_HEAD(&ei->i_orphan); | 6753 | INIT_LIST_HEAD(&ei->i_orphan); |
6763 | INIT_LIST_HEAD(&ei->delalloc_inodes); | 6754 | INIT_LIST_HEAD(&ei->delalloc_inodes); |