alistair23-linux/fs/btrfs
Li Zefan 581bb05094 Btrfs: Cache free inode numbers in memory
Currently btrfs stores the highest objectid of the fs tree, and it always
returns (highest+1) inode number when we create a file, so inode numbers
won't be reclaimed when we delete files, so we'll run out of inode numbers
as we keep create/delete files in 32bits machines.

This fixes it, and it works similarly to how we cache free space in block
cgroups.

We start a kernel thread to read the file tree. By scanning inode items,
we know which chunks of inode numbers are free, and we cache them in
an rb-tree.

Because we are searching the commit root, we have to carefully handle the
cross-transaction case.

The rb-tree is a hybrid extent+bitmap tree, so if we have too many small
chunks of inode numbers, we'll use bitmaps. Initially we allow 16K ram
of extents, and a bitmap will be used if we exceed this threshold. The
extents threshold is adjusted in runtime.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
2011-04-25 16:46:04 +08:00
..
acl.c Btrfs: Check validity before setting an acl 2011-04-13 14:25:35 +08:00
async-thread.c
async-thread.h
btrfs_inode.h Btrfs: change reserved_extents to an atomic_t 2011-03-17 14:21:18 -04:00
compat.h
compression.c Btrfs: check return value of btrfs_alloc_path() 2011-03-28 05:37:54 -04:00
compression.h btrfs: Extract duplicate decompress code 2010-12-22 23:15:50 +08:00
ctree.c Btrfs: check return value of read_tree_block() 2011-03-28 05:37:37 -04:00
ctree.h Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
delayed-ref.c Btrfs: add initial tracepoint support for btrfs 2011-03-28 05:37:33 -04:00
delayed-ref.h
dir-item.c Btrfs: check return value of btrfs_alloc_path() 2011-03-28 05:37:54 -04:00
disk-io.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
disk-io.h Btrfs: forced readonly mounts on errors 2011-01-17 15:13:08 -05:00
export.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable 2011-02-07 14:06:18 -08:00
export.h
extent-tree.c Btrfs: Make free space cache code generic 2011-04-25 16:46:03 +08:00
extent_io.c Btrfs end_bio_extent_readpage should look for locked bits 2011-04-16 06:55:39 -04:00
extent_io.h btrfs: using cached extent_state in set/unlock combinations 2011-04-11 20:45:36 -04:00
extent_map.c Btrfs: check return value of alloc_extent_map() 2011-02-14 16:21:37 -05:00
extent_map.h btrfs: Allow to add new compression algorithm 2010-12-22 23:15:45 +08:00
file-item.c Btrfs: check return value of btrfs_alloc_path() 2011-03-28 05:37:54 -04:00
file.c Btrfs: deal with the case that we run out of space in the cache 2011-04-08 13:00:27 -04:00
free-space-cache.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
free-space-cache.h Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
hash.h
inode-item.c
inode-map.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
inode-map.h Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
inode.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
ioctl.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
ioctl.h Merge branch 'lzo-support' of git://repo.or.cz/linux-btrfs-devel into btrfs-38 2011-01-16 11:25:54 -05:00
Kconfig btrfs: Add lzo compression support 2010-12-22 23:15:47 +08:00
locking.c
locking.h
lzo.c Btrfs: Avoid accessing unmapped kernel address 2011-02-16 15:37:58 -05:00
Makefile btrfs: Add lzo compression support 2010-12-22 23:15:47 +08:00
ordered-data.c Btrfs: add initial tracepoint support for btrfs 2011-03-28 05:37:33 -04:00
ordered-data.h btrfs: Allow to add new compression algorithm 2010-12-22 23:15:45 +08:00
orphan.c Btrfs: fixup return code for btrfs_del_orphan_item 2010-12-09 13:57:15 -05:00
print-tree.c btrfs: fix missing break in switch phrase 2011-01-28 16:40:37 -05:00
print-tree.h
ref-cache.c
ref-cache.h
relocation.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
root-tree.c Btrfs: Fix uninitialized root flags for subvolumes 2011-04-05 01:20:24 -04:00
struct-funcs.c
super.c Btrfs: fix subvolume mount by name problem when default mount subvolume is set 2011-04-11 20:26:50 -04:00
sysfs.c
transaction.c Btrfs: Cache free inode numbers in memory 2011-04-25 16:46:04 +08:00
transaction.h Btrfs: avoid taking the trans_mutex in btrfs_end_transaction 2011-04-11 20:43:52 -04:00
tree-defrag.c Btrfs: cleanup warnings from gcc 4.6 (nonbugs) 2010-10-29 15:14:37 -04:00
tree-log.c btrfs: make inode ref log recovery faster 2011-03-28 05:37:48 -04:00
tree-log.h
version.h
version.sh
volumes.c Btrfs: fix __btrfs_map_block on 32 bit machines 2011-03-28 05:37:59 -04:00
volumes.h Btrfs: make btrfs_map_block() return entire free extent for each device of RAID0/1/10/DUP 2011-03-28 05:37:45 -04:00
xattr.c Btrfs: Check if btrfs_next_leaf() returns error in btrfs_listxattr() 2011-04-13 14:25:28 +08:00
xattr.h
zlib.c btrfs: Extract duplicate decompress code 2010-12-22 23:15:50 +08:00