diff options
author | Chris Mason <chris.mason@oracle.com> | 2007-12-13 09:06:01 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2008-09-25 11:03:58 -0400 |
commit | 76fea00a0522185658b733d441d6ec049344456b (patch) | |
tree | b571afee07d48632290c76e5eda506360e105f5f | |
parent | 70b043f0c7d7c78d8a0a01e65067c7c8fe338485 (diff) |
Btrfs: Add backrefs for symbolic link inodes
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/inode.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index cefe740b6c79..06d92be16805 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -404,16 +404,14 @@ static int btrfs_unlink_trans(struct btrfs_trans_handle *trans, | |||
404 | ret = btrfs_delete_one_dir_name(trans, root, path, di); | 404 | ret = btrfs_delete_one_dir_name(trans, root, path, di); |
405 | 405 | ||
406 | dentry->d_inode->i_ctime = dir->i_ctime; | 406 | dentry->d_inode->i_ctime = dir->i_ctime; |
407 | if (!S_ISLNK(dentry->d_inode->i_mode)) { | 407 | ret = btrfs_del_inode_ref(trans, root, name, name_len, |
408 | ret = btrfs_del_inode_ref(trans, root, name, name_len, | 408 | dentry->d_inode->i_ino, |
409 | dentry->d_inode->i_ino, | 409 | dentry->d_parent->d_inode->i_ino); |
410 | dentry->d_parent->d_inode->i_ino); | 410 | if (ret) { |
411 | if (ret) { | 411 | printk("failed to delete reference to %.*s, " |
412 | printk("failed to delete reference to %.*s, " | 412 | "inode %lu parent %lu\n", name_len, name, |
413 | "inode %lu parent %lu\n", name_len, name, | 413 | dentry->d_inode->i_ino, |
414 | dentry->d_inode->i_ino, | 414 | dentry->d_parent->d_inode->i_ino); |
415 | dentry->d_parent->d_inode->i_ino); | ||
416 | } | ||
417 | } | 415 | } |
418 | err: | 416 | err: |
419 | btrfs_free_path(path); | 417 | btrfs_free_path(path); |
@@ -1293,13 +1291,11 @@ static int btrfs_add_link(struct btrfs_trans_handle *trans, | |||
1293 | dentry->d_parent->d_inode->i_ino, | 1291 | dentry->d_parent->d_inode->i_ino, |
1294 | &key, btrfs_inode_type(inode)); | 1292 | &key, btrfs_inode_type(inode)); |
1295 | if (ret == 0) { | 1293 | if (ret == 0) { |
1296 | if (!S_ISLNK(inode->i_mode)) { | 1294 | ret = btrfs_insert_inode_ref(trans, root, |
1297 | ret = btrfs_insert_inode_ref(trans, root, | 1295 | dentry->d_name.name, |
1298 | dentry->d_name.name, | 1296 | dentry->d_name.len, |
1299 | dentry->d_name.len, | 1297 | inode->i_ino, |
1300 | inode->i_ino, | 1298 | dentry->d_parent->d_inode->i_ino); |
1301 | dentry->d_parent->d_inode->i_ino); | ||
1302 | } | ||
1303 | parent_inode = dentry->d_parent->d_inode; | 1299 | parent_inode = dentry->d_parent->d_inode; |
1304 | parent_inode->i_size += dentry->d_name.len * 2; | 1300 | parent_inode->i_size += dentry->d_name.len * 2; |
1305 | parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME; | 1301 | parent_inode->i_mtime = parent_inode->i_ctime = CURRENT_TIME; |