aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-12-13 09:06:01 -0500
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:03:58 -0400
commit76fea00a0522185658b733d441d6ec049344456b (patch)
treeb571afee07d48632290c76e5eda506360e105f5f
parent70b043f0c7d7c78d8a0a01e65067c7c8fe338485 (diff)
Btrfs: Add backrefs for symbolic link inodes
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r--fs/btrfs/inode.c30
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 }
418err: 416err:
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;