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