It protects against concurrent creates, lookups and also protects i_size updates. --- fs/sysfs/symlink.c | 4 ++++ 1 files changed, 4 insertions(+) diff -puN fs/sysfs/symlink.c~sysfs_symlink-needs-i_sem fs/sysfs/symlink.c --- 25/fs/sysfs/symlink.c~sysfs_symlink-needs-i_sem 2004-01-30 17:39:31.000000000 -0800 +++ 25-akpm/fs/sysfs/symlink.c 2004-01-30 17:41:18.000000000 -0800 @@ -22,7 +22,11 @@ static int sysfs_symlink(struct inode * error = sysfs_create(dentry, S_IFLNK|S_IRWXUGO, init_symlink); if (!error) { int l = strlen(symname)+1; + struct inode *inode = dentry->d_inode; + + down(&inode->i_sem); error = page_symlink(dentry->d_inode, symname, l); + up(&inode->i_sem); if (error) iput(dentry->d_inode); } _