jblumsch / fuse-ufs2

GNU General Public License v2.0
1 stars 1 forks source link

Fix creation of "short" symlinks #12

Closed jblumsch closed 8 years ago

jblumsch commented 8 years ago

The creation of "short" symlinks (those where the target name of <120 chars is stored in the inode itself) is broken:

jblumsch commented 8 years ago

In op_symlink() a wrong value is written into inode.i_blocks ("blocks actually held", should be 0 on a "short" symlink). This inconsistency leads to I/O errors on subsequent operations.

jblumsch commented 8 years ago

fuse-ufs code internally uses inconsistent name length limits for "short" symlinks (here 15*4, there 15*8 bytes). As this parameter depends on the UFS variant, the superblock field fs->fs_maxsymlinklen should be taken into account (we might check at mount time that it holds a reasonable value).

jblumsch commented 8 years ago

Commit 0229f27ac2d05d2caba5490db77c2cd400e94210 Fixed symlinks and make readonly default (mkatiyar 2013-04-13) added a function ufs_follow_link() that had never been actually called. In the light of the commit message that code change looks like a failed attempt to fix some unspecified issue with symlinks – Dropped that in 5d5d99a7f08f50846de5908af30e0ea5f34196fe; for details see #8.

Apart from the "short symlink" creation I do not see any issue with symlinks that would need fixing.