aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/file.c6
-rw-r--r--kernel/fuse_i.h3
2 files changed, 9 insertions, 0 deletions
diff --git a/kernel/file.c b/kernel/file.c
index 42ab037..e8dae79 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -692,9 +692,15 @@ static ssize_t fuse_direct_write(struct file *file, const char __user *buf,
struct inode *inode = file->f_dentry->d_inode;
ssize_t res;
/* Don't allow parallel writes to the same file */
+#ifdef KERNEL_2_6_16_PLUS
+ mutex_lock(&inode->i_mutex);
+ res = fuse_direct_io(file, buf, count, ppos, 1);
+ mutex_unlock(&inode->i_mutex);
+#else
down(&inode->i_sem);
res = fuse_direct_io(file, buf, count, ppos, 1);
up(&inode->i_sem);
+#endif
return res;
}
diff --git a/kernel/fuse_i.h b/kernel/fuse_i.h
index b68b9e3..4979fac 100644
--- a/kernel/fuse_i.h
+++ b/kernel/fuse_i.h
@@ -40,6 +40,9 @@
# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
# define KERNEL_2_6_13_PLUS
# endif
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
+# define KERNEL_2_6_16_PLUS
+# endif
#endif
#include "config.h"