remarkable-linux/fs/btrfs
Josef Bacik 9ffba8cda9 Btrfs: fix heavy delalloc related deadlock
I added a patch where we started taking the ordered operations mutex when we
waited on ordered extents.  We need this because we splice the list and process
it, so if a flusher came in during this scenario it would think the list was
empty and we'd usually get an early ENOSPC.  The problem with this is that this
lock is used in transaction committing.  So we end up with something like this

Transaction commit
	-> wait on writers

Delalloc flusher
	-> run_ordered_operations (holds mutex)
		->wait for filemap-flush to do its thing

flush task
	-> cow_file_range
		->wait on btrfs_join_transaction because we're commiting

some other task
	-> commit_transaction because we notice trans->transaction->flush is set
		-> run_ordered_operations (hang on mutex)

We need to disentangle the ordered operations flushing from the delalloc
flushing, since they are separate things.  This solves the deadlock issue I was
seeing.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
2013-09-01 08:05:04 -04:00
..
acl.c Btrfs: skip adding an acl attribute if we don't have to 2012-12-16 20:46:15 -05:00
async-thread.c Btrfs: call the ordered free operation without any locks held 2012-07-25 16:15:07 -04:00
async-thread.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
backref.c Btrfs: fix possible memory leak in find_parent_nodes() 2013-09-01 08:04:56 -04:00
backref.h Btrfs: cleanup backref search commit root flag stuff 2013-07-01 08:52:29 -04:00
btrfs_inode.h Btrfs: don't cache the csum value into the extent state tree 2013-09-01 08:04:33 -04:00
check-integrity.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
check-integrity.h Btrfs: add optional integrity check code 2011-12-21 19:14:09 +01:00
compat.h Btrfs: drop remaining LINUX_KERNEL_VERSION checks and compat code 2009-01-06 09:38:55 -05:00
compression.c btrfs: Introduce extent_read_full_page_nolock() 2013-09-01 08:04:59 -04:00
compression.h btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
ctree.c Btrfs: stop using GFP_ATOMIC when allocating rewind ebs 2013-09-01 08:04:50 -04:00
ctree.h Btrfs: fix heavy delalloc related deadlock 2013-09-01 08:05:04 -04:00
delayed-inode.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
delayed-inode.h [readdir] convert btrfs 2013-06-29 12:57:00 +04:00
delayed-ref.c Btrfs/tracepoint: update delayed ref tracepoints 2013-09-01 07:57:39 -04:00
delayed-ref.h Btrfs: handle running extent ops with skinny metadata 2013-05-17 21:40:15 -04:00
dev-replace.c Btrfs: introduce per-subvolume ordered extent list 2013-06-14 11:29:41 -04:00
dev-replace.h Btrfs: add new sources for device replace code 2012-12-12 17:15:41 -05:00
dir-item.c btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
disk-io.c Btrfs: fix heavy delalloc related deadlock 2013-09-01 08:05:04 -04:00
disk-io.h Btrfs: introduce grab/put functions for the root of the fs/file tree 2013-06-14 11:29:38 -04:00
export.c Btrfs: cleanup: don't check the same thing twice 2013-06-14 11:29:30 -04:00
export.h NFS support for btrfs - v3 2008-09-25 11:04:06 -04:00
extent-tree.c Btrfs: return ENOSPC when target space is full 2013-09-01 08:04:55 -04:00
extent_io.c btrfs: Introduce extent_read_full_page_nolock() 2013-09-01 08:04:59 -04:00
extent_io.h btrfs: Introduce extent_read_full_page_nolock() 2013-09-01 08:04:59 -04:00
extent_map.c btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
extent_map.h Btrfs: fix bad extent logging 2013-05-06 15:54:34 -04:00
file-item.c Btrfs: don't cache the csum value into the extent state tree 2013-09-01 08:04:33 -04:00
file.c Btrfs: don't bother autodefragging if our root is going away 2013-09-01 08:04:25 -04:00
free-space-cache.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2013-07-09 12:33:09 -07:00
free-space-cache.h btrfs: move ifdef around sanity checks out of init_btrfs_fs 2013-06-14 11:29:18 -04:00
hash.h btrfs: extended inode refs 2012-10-09 09:14:45 -04:00
inode-item.c btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
inode-map.c Btrfs: don't use global block reservation for inode cache truncation 2013-05-17 21:40:22 -04:00
inode-map.h Btrfs: Support reading/writing on disk free ino cache 2011-04-25 16:46:11 +08:00
inode.c Btrfs: fix the error handling wrt orphan items 2013-09-01 08:05:03 -04:00
ioctl.c Btrfs: don't allow a subvol to be deleted if it is the default subovl 2013-09-01 08:05:02 -04:00
Kconfig btrfs: move leak debug code to functions 2013-05-06 15:55:16 -04:00
locking.c btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
locking.h Btrfs: remove btrfs_try_spin_lock 2013-03-14 14:57:10 -04:00
lzo.c Btrfs: return -1 when lzo compression makes data bigger 2013-09-01 07:57:19 -04:00
Makefile Btrfs: RAID5 and RAID6 2013-02-01 14:24:23 -05:00
math.h Btrfs: cleanup duplicated division functions 2012-12-11 13:31:30 -05:00
ordered-data.c Btrfs: fix heavy delalloc related deadlock 2013-09-01 08:05:04 -04:00
ordered-data.h Btrfs: remove btrfs_sector_sum structure 2013-07-02 11:50:47 -04:00
orphan.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
print-tree.c Btrfs: Print key type in decimal everywhere 2013-09-01 07:57:40 -04:00
print-tree.h btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
qgroup.c Btrfs: set qgroup_ulist to be null after calling ulist_free() 2013-09-01 07:57:36 -04:00
raid56.c Btrfs, raid56: fix memory leak when allocating pages for p/q stripes failed 2013-09-01 08:04:27 -04:00
raid56.h Btrfs: RAID5 and RAID6 2013-02-01 14:24:23 -05:00
rcu-string.h Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
reada.c Btrfs: fix reada debug code compilation 2013-05-06 15:54:55 -04:00
relocation.c Btrfs: change how we queue blocks for backref checking 2013-09-01 08:04:41 -04:00
root-tree.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
scrub.c btrfs: Cleanup for using BTRFS_SETGET_STACK instead of raw convert 2013-09-01 07:57:37 -04:00
send.c Btrfs: skip subvol entries when checking if we've created a dir already 2013-09-01 08:05:01 -04:00
send.h btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
struct-funcs.c Btrfs: rewrite BTRFS_SETGET_FUNCS 2012-07-23 16:28:06 -04:00
super.c btrfs: add mount option to set commit interval 2013-09-01 08:04:51 -04:00
sysfs.c btrfs: fixup/remove module.h usage as required 2013-03-01 15:01:01 -05:00
transaction.c Btrfs: don't bug_on when we fail when cleaning up transactions 2013-09-01 08:04:42 -04:00
transaction.h Btrfs: check to see if root_list is empty before adding it to dead roots 2013-08-09 19:30:23 -04:00
tree-defrag.c btrfs: remove cache only arguments from defrag path 2013-02-20 12:59:36 -05:00
tree-log.c Btrfs: don't ignore errors from btrfs_run_delayed_items 2013-09-01 08:04:54 -04:00
tree-log.h btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
ulist.c Btrfs: fix crash regarding to ulist_add_merge 2013-07-02 11:50:59 -04:00
ulist.h Btrfs: add a rb_tree to improve performance of ulist search 2013-05-06 15:54:44 -04:00
volumes.c Fix leak in __btrfs_map_block error path 2013-09-01 08:04:45 -04:00
volumes.h Btrfs: don't cache the csum value into the extent state tree 2013-09-01 08:04:33 -04:00
xattr.c btrfs: make static code static & remove dead code 2013-05-06 15:55:23 -04:00
xattr.h fs/vfs/security: pass last path component to LSM on inode creation 2011-02-01 11:12:29 -05:00
zlib.c btrfs: fix message printing 2012-10-09 09:19:57 -04:00