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);
 	}

_