patch-2.4.0-test9 linux/fs/coda/file.c

Next file: linux/fs/coda/inode.c
Previous file: linux/fs/coda/dir.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test8/linux/fs/coda/file.c linux/fs/coda/file.c
@@ -23,18 +23,21 @@
 #include <linux/coda_linux.h>
 #include <linux/coda_fs_i.h>
 #include <linux/coda_psdev.h>
-#include <linux/coda_cache.h>
 #include <linux/coda_proc.h>
 
 static ssize_t
 coda_file_write(struct file *file,const char *buf,size_t count,loff_t *ppos)
 {
 	struct inode *inode = file->f_dentry->d_inode;
+	struct inode *container = (struct inode*)inode->i_mapping->host;
 	ssize_t n;
 
+        down(&container->i_sem);
+
 	n = generic_file_write(file, buf, count, ppos);
+	inode->i_size = container->i_size;
 
-	inode->i_size = ((struct inode*)inode->i_mapping->host)->i_size;
+        up(&container->i_sem);
 
 	return n;
 }
@@ -63,7 +66,7 @@
 	result = file_fsync(NULL, &cont_dentry, datasync);
 	up(&cont_dentry.d_inode->i_sem);
 
-	if ( result == 0 ) {
+	if ( result == 0 && datasync == 0 ) {
 		lock_kernel();
 		result = venus_fsync(inode->i_sb, coda_i2f(inode));
 		unlock_kernel();

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)