i_sem is required when running i_size_write().

Really, this patch is not necessary - nobody else will be trying to modify
i_size while we're running page_symlink().  The directory's i_sem is held so
nobody can find the new symlink.




---

 fs/namei.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletion(-)

diff -puN fs/namei.c~page_symlink-needs-i_sem fs/namei.c
--- 25/fs/namei.c~page_symlink-needs-i_sem	2004-02-03 02:45:11.000000000 -0800
+++ 25-akpm/fs/namei.c	2004-02-03 02:46:39.000000000 -0800
@@ -2242,13 +2242,17 @@ int page_symlink(struct inode *inode, co
 
 	if (!page)
 		goto fail;
+	down(&inode->i_sem);
 	err = mapping->a_ops->prepare_write(NULL, page, 0, len-1);
-	if (err)
+	if (err) {
+		up(&inode->i_sem);
 		goto fail_map;
+	}
 	kaddr = kmap_atomic(page, KM_USER0);
 	memcpy(kaddr, symname, len-1);
 	kunmap_atomic(kaddr, KM_USER0);
 	mapping->a_ops->commit_write(NULL, page, 0, len-1);
+	up(&inode->i_sem);
 	/*
 	 * Notice that we are _not_ going to block here - end of page is
 	 * unmapped, so this will only try to map the rest of page, see

_