remarkable-linux/fs/btrfs
Josef Bacik 8180ef8894 Btrfs: keep inode pinned when compressing writes
A user reported lots of problems using compression on the new code and it
turns out part of the problem was that igrab() was failing when we added a
new ordered extent.  This is because when writing out an inode under
compression we immediately return without actually doing anything to the
pages, and then in another thread at some point down the line actually do
the ordered dance.  The problem is between the point that we start writeback
and we actually add the ordered extent we could be trying to reclaim the
inode, which makes igrab() return NULL.  So we need to do an igrab() when we
create the async extent and then drop it when we are done with it.  This
makes sure we stay pinned in memory until the ordered extent can get a
reference on it and we are good to go.  With this patch we no longer panic
in btrfs_finish_ordered_io().  Thanks,

Signed-off-by: Josef Bacik <josef@redhat.com>
2012-06-14 21:30:53 -04:00
..
acl.c Btrfs: cache no acl on new inodes 2012-05-30 10:23:27 -04:00
async-thread.c btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
async-thread.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
backref.c Btrfs: add inodes before dropping the extent lock in find_all_leafs 2012-05-31 19:53:08 +02:00
backref.h Btrfs: use the tree modification log for backref resolving 2012-05-30 15:17:34 +02:00
btrfs_inode.h Btrfs: check to see if the inode is in the log before fsyncing 2012-05-30 10:23:42 -04:00
check-integrity.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -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 Merge branch 'for-linus-min' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2012-04-13 19:41:27 -07:00
compression.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
ctree.c Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
ctree.h Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
delayed-inode.c Btrfs: convert the inode bit field to use the actual bit operations 2012-05-30 10:23:36 -04:00
delayed-inode.h atomic: use <linux/atomic.h> 2011-07-26 16:49:47 -07:00
delayed-ref.c Btrfs: use delayed ref sequence numbers for all fs-tree updates 2012-05-30 18:18:21 +02:00
delayed-ref.h Btrfs: use delayed ref sequence numbers for all fs-tree updates 2012-05-30 18:18:21 +02:00
dir-item.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
disk-io.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
disk-io.h btrfs: Drop unused function btrfs_abort_devices() 2012-05-30 10:23:39 -04:00
export.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
export.h
extent-tree.c Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
extent_io.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
extent_io.h Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
extent_map.c Btrfs: clean up code for merging extent maps 2011-08-01 14:30:50 -04:00
extent_map.h btrfs: fix structs where bitfields and spinlock/atomic share 8B word 2012-02-15 16:40:25 +01:00
file-item.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2012-03-30 12:44:29 -07:00
file.c Btrfs: check to see if the inode is in the log before fsyncing 2012-05-30 10:23:42 -04:00
free-space-cache.c Btrfs: merge contigous regions when loading free space cache 2012-05-30 10:23:36 -04:00
free-space-cache.h btrfs: remove all unused functions 2011-05-06 12:34:03 +02:00
hash.h Btrfs: remove crc32c.h and use libcrc32c directly. 2009-06-10 11:29:53 -04:00
inode-item.c Merge branch 'error-handling' into for-linus 2012-03-28 20:31:37 -04:00
inode-map.c Btrfs: show useful info in space reservation tracepoint 2012-03-29 09:57:44 -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: keep inode pinned when compressing writes 2012-06-14 21:30:53 -04:00
ioctl.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
ioctl.h Btrfs: add ioctl to get and reset the device stats 2012-05-30 10:23:40 -04:00
Kconfig Btrfs: add config option to enable btrfs integrity check 2011-12-21 19:14:16 +01:00
locking.c btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
locking.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
lzo.c btrfs: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:21 +08:00
Makefile Merge branch 'integrity-check-patch-v2' of git://btrfs.giantdisaster.de/git/btrfs into integration 2012-01-16 15:27:58 -05:00
ordered-data.c Btrfs: finish ordered extents in their own thread 2012-05-30 10:23:33 -04:00
ordered-data.h Btrfs: finish ordered extents in their own thread 2012-05-30 10:23:33 -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: read device stats on mount, write modified ones during commit 2012-05-30 10:23:41 -04:00
print-tree.h
rcu-string.h Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
reada.c Btrfs: set ioprio of scrub readahead to idle 2012-05-30 10:23:43 -04:00
relocation.c Btrfs: Fix space checking during fs resize 2012-04-27 13:55:14 -04:00
root-tree.c btrfs: replace many BUG_ONs with proper error handling 2012-03-22 11:52:54 +01:00
scrub.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
struct-funcs.c Btrfs: add the ability to cache a pointer into the eb 2012-03-26 17:04:23 -04:00
super.c Btrfs: implement ->show_devname 2012-06-14 21:30:37 -04:00
sysfs.c btrfs: Remove unused sysfs code 2011-06-17 14:54:18 -04:00
transaction.c Btrfs: abort the transaction if the commit fails 2012-06-14 21:29:13 -04:00
transaction.h btrfs: enhance transaction abort infrastructure 2012-03-22 01:45:40 +01:00
tree-defrag.c btrfs: drop unused parameter from btrfs_release_path 2011-05-02 13:57:22 +02:00
tree-log.c Btrfs: fix return code in drop_objectid_items 2012-05-30 10:23:42 -04:00
tree-log.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
ulist.c Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
ulist.h Merge branch 'for-chris' of git://git.jan-o-sch.net/btrfs-unstable into for-linus 2012-05-31 16:49:53 -04:00
version.h Update Btrfs files for in-kernel usage 2008-09-25 15:41:59 -04:00
volumes.c Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
volumes.h Btrfs: use rcu to protect device->name 2012-06-14 21:29:16 -04:00
xattr.c Btrfs: use i_version instead of our own sequence 2012-05-30 10:23:27 -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: remove the second argument of k[un]map_atomic() 2012-03-20 21:48:21 +08:00