No subject
Sun Jan 4 23:01:44 GMT 2004
if (l > sizeof (inode->u.ext2_i.i_data)) {
/* slow symlink */
inode->i_op =
&page_symlink_inode_operations;
inode->i_mapping->a_ops = &ext2_aops;
err = block_symlink(inode, symname, l);
if (err)
goto out_fail;
} else {
/* fast symlink */
inode->i_op =
&ext2_fast_symlink_inode_operations;
memcpy((char*)&inode->u.ext2_i.i_data,symname,l);
inode->i_size = l-1;
}
So since most ext2 filesystems have more inodes allocated than they
can use and most symlinks are short, symlinks are usually no more
likely to make you run low on space than hardlinks.
The big problem in rsync is that using -H doubles the amount of space
used to store the file list:
hlink.c:57
if (!(hlink_list =
(struct file_struct
*)malloc(sizeof(hlink_list[0])*flist->count)))
out_of_memory("init_hard_links");
There are certainly better ways to do this. To start with, hlink.c
only needs to even *think* about non-directories which have nlinks>1.
--
Martin
More information about the rsync
mailing list