linux-kernel-test/fs/btrfs
Miao Xie 42874b3db7 Btrfs: fix the snapshot that should not exist
The snapshot should be the image of the fs tree before it was created,
so the metadata of the snapshot should not exist in the its tree. But now, we
found the directory item and directory name index is in both the snapshot tree
and the fs tree. It introduces some problems and makes the users feel strange:

 # mkfs.btrfs /dev/sda1
 # mount /dev/sda1 /mnt
 # mkdir /mnt/1
 # cd /mnt/1
 # btrfs subvolume snapshot /mnt snap0
 # ls -a /mnt/1/snap0/1
 .	..	[no other file/dir]

 # ll /mnt/1/snap0/
 total 0
 drwxr-xr-x 1 root root 10 Ju1 24 12:11 1
			^^^
			There is no file/dir in it, but it's size is 10

 # cd /mnt/1/snap0/1/snap0
 [Enter a unexisted directory successfully...]

There is nothing in the directory 1 in snap0, but btrfs told the length of
this directory is 10. Beside that, we can enter an unexisted directory, it is
very strange to the users.

 # btrfs subvolume snapshot /mnt/1/snap0 /mnt/snap1
 # ll /mnt/1/snap0/1/
 total 0
 [None]
 # ll /mnt/snap1/1/
 total 0
 drwxr-xr-x 1 root root 0 Ju1 24 12:14 snap0

And the source of snap1 did have any directory in Directory 1, but snap1 have
a snap0, it is different between the source and the snapshot.

So I think we should insert directory item and directory name index and update
the parent inode as the last step of snapshot creation, and do not leave the
useless metadata in the file tree.

Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
2012-10-01 15:19:12 -04:00
..
acl.c Btrfs: cache no acl on new inodes 2012-05-30 10:23:27 -04: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 gcc warnings for 32bit compiles 2012-10-01 15:19:01 -04:00
backref.h Merge branch 'send-v2' of git://github.com/ablock84/linux-btrfs into for-linus 2012-07-25 19:19:10 -04:00
btrfs_inode.h Btrfs: fix a bug in checking whether a inode is already in log 2012-10-01 15:19:06 -04:00
check-integrity.c Btrfs: introduce subvol uuids and times 2012-07-25 23:28:38 +02:00
check-integrity.h Btrfs: add optional integrity check code 2011-12-21 19:14:09 +01:00
compat.h
compression.c Btrfs: barrier before waitqueue_active 2012-08-28 16:53:33 -04:00
compression.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
ctree.c Btrfs: fix btrfs send for inline items and compression 2012-10-01 15:19:00 -04:00
ctree.h Btrfs: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
delayed-inode.c Btrfs: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
delayed-inode.h Btrfs: flush delayed inodes if we're short on space 2012-07-23 15:41:40 -04:00
delayed-ref.c Btrfs: allow delayed refs to be merged 2012-08-28 16:53:38 -04:00
delayed-ref.h Btrfs: allow delayed refs to be merged 2012-08-28 16:53:38 -04: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: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
disk-io.h Btrfs: remove superblock writing after fatal error 2012-08-28 16:53:38 -04:00
export.c ->encode_fh() API change 2012-05-29 23:28:33 -04:00
export.h
extent_io.c Btrfs: fix btrfs send for inline items and compression 2012-10-01 15:19:00 -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: improve fsync by filtering extents that we want 2012-10-01 15:19:05 -04:00
extent_map.h Btrfs: improve fsync by filtering extents that we want 2012-10-01 15:19:05 -04:00
extent-tree.c Btrfs: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
file-item.c Btrfs: fix gcc warnings for 32bit compiles 2012-10-01 15:19:01 -04:00
file.c Btrfs: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
free-space-cache.c Btrfs: do not count in readonly bytes 2012-07-23 16:28:03 -04:00
free-space-cache.h btrfs: remove all unused functions 2011-05-06 12:34:03 +02:00
hash.h
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: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
ioctl.c Btrfs: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
ioctl.h Merge branch 'send-v2' of git://github.com/ablock84/linux-btrfs into for-linus 2012-07-25 19:19:10 -04:00
Kconfig Btrfs: add config option to enable btrfs integrity check 2011-12-21 19:14:16 +01:00
locking.c Btrfs: fix a misplaced address operator in a condition 2012-08-28 16:53:23 -04: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 'send-v2' of git://github.com/ablock84/linux-btrfs into for-linus 2012-07-25 19:19:10 -04:00
ordered-data.c Btrfs: use a slab for ordered extents allocation 2012-10-01 15:19:11 -04:00
ordered-data.h Btrfs: use a slab for ordered extents allocation 2012-10-01 15:19:11 -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
qgroup.c Btrfs: fix gcc warnings for 32bit compiles 2012-10-01 15:19:01 -04:00
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: add a new "type" field into the block reservation structure 2012-10-01 15:19:11 -04:00
root-tree.c Btrfs: fix some endian bugs handling the root times 2012-08-28 16:53:26 -04:00
scrub.c Btrfs: fix possible memory leak in scrub_setup_recheck_block() 2012-10-01 15:19:09 -04:00
send.c Btrfs: fix gcc warnings for 32bit compiles 2012-10-01 15:19:01 -04:00
send.h Btrfs: introduce BTRFS_IOC_SEND for btrfs send/receive 2012-07-25 23:30:19 +02:00
struct-funcs.c Btrfs: rewrite BTRFS_SETGET_FUNCS 2012-07-23 16:28:06 -04:00
super.c Btrfs: use a slab for ordered extents allocation 2012-10-01 15:19:11 -04:00
sysfs.c btrfs: Remove unused sysfs code 2011-06-17 14:54:18 -04:00
transaction.c Btrfs: fix the snapshot that should not exist 2012-10-01 15:19:12 -04:00
transaction.h Btrfs: fix a bug in checking whether a inode is already in log 2012-10-01 15:19:06 -04:00
tree-defrag.c btrfs: drop unused parameter from btrfs_release_path 2011-05-02 13:57:22 +02:00
tree-log.c Btrfs: add hole punching 2012-10-01 15:19:07 -04:00
tree-log.h btrfs: return void in functions without error conditions 2012-03-22 01:45:34 +01:00
ulist.c Btrfs: make aux field of ulist 64 bit 2012-10-01 15:18:53 -04:00
ulist.h Btrfs: make aux field of ulist 64 bit 2012-10-01 15:18:53 -04:00
version.h
volumes.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs 2012-08-29 11:36:22 -07:00
volumes.h Btrfs: revert checksum error statistic which can cause a BUG() 2012-08-28 16:53:39 -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