interrupted request improvements
diff --git a/kernel/fuse_kernel.h b/kernel/fuse_kernel.h
index a97c3e8..bad4546 100644
--- a/kernel/fuse_kernel.h
+++ b/kernel/fuse_kernel.h
@@ -8,6 +8,8 @@
 
 /* This file defines the kernel interface of FUSE */
 
+#include <asm/types.h>
+
 /** Version number of this interface */
 #define FUSE_KERNEL_VERSION 5
 
@@ -24,30 +26,30 @@
 #define FUSE_MINOR 229
 
 struct fuse_attr {
-	unsigned long       ino;
-	unsigned int        mode;
-	unsigned int        nlink;
-	unsigned int        uid;
-	unsigned int        gid;
-	unsigned int        rdev;
-	unsigned long long  size;
-	unsigned long       blocks;
-	unsigned long       atime;
-	unsigned long       atimensec;
-	unsigned long       mtime;
-	unsigned long       mtimensec;
-	unsigned long       ctime;
-	unsigned long       ctimensec;
+	__u64	ino;
+	__u64	size;
+	__u64	blocks;
+	__u64	atime;
+	__u64	mtime;
+	__u64	ctime;
+	__u32	atimensec;
+	__u32	mtimensec;
+	__u32	ctimensec;
+	__u32	mode;
+	__u32	nlink;
+	__u32	uid;
+	__u32	gid;
+	__u32	rdev;
 };
 
 struct fuse_kstatfs {
-	unsigned int        bsize;
-	unsigned long long  blocks;
-	unsigned long long  bfree;
-	unsigned long long  bavail;
-	unsigned long long  files;
-	unsigned long long  ffree;
-	unsigned int        namelen;
+	__u64	blocks;
+	__u64	bfree;
+	__u64	bavail;
+	__u64	files;
+	__u64	ffree;
+	__u32	bsize;
+	__u32	namelen;
 };
 
 #define FATTR_MODE	(1 << 0)
@@ -94,86 +96,87 @@
 #define FUSE_XATTR_SIZE_MAX 4096
 
 struct fuse_entry_out {
-	unsigned long nodeid;      /* Inode ID */
-	unsigned long generation;  /* Inode generation: nodeid:gen must
-                                      be unique for the fs's lifetime */
-	unsigned long entry_valid; /* Cache timeout for the name */
-	unsigned long entry_valid_nsec;
-	unsigned long attr_valid;  /* Cache timeout for the attributes */
-	unsigned long attr_valid_nsec;
+	__u64	nodeid;		/* Inode ID */
+	__u64	generation;	/* Inode generation: nodeid:gen must
+				   be unique for the fs's lifetime */
+	__u64	entry_valid;	/* Cache timeout for the name */
+	__u64	attr_valid;	/* Cache timeout for the attributes */
+	__u32	entry_valid_nsec;
+	__u32	attr_valid_nsec;
 	struct fuse_attr attr;
 };
 
 struct fuse_forget_in {
-	int version;
+	__u64	version;
 };
 
 struct fuse_attr_out {
-	unsigned long attr_valid;  /* Cache timeout for the attributes */
-	unsigned long attr_valid_nsec;
+	__u64	attr_valid;	/* Cache timeout for the attributes */
+	__u32	attr_valid_nsec;
+	__u32	dummy;
 	struct fuse_attr attr;
 };
 
 struct fuse_getdir_out {
-	int fd;
+	__u32	fd;
 };
 
 struct fuse_mknod_in {
-	unsigned int mode;
-	unsigned int rdev;
+	__u32	mode;
+	__u32	rdev;
 };
 
 struct fuse_mkdir_in {
-	unsigned int mode;
+	__u32	mode;
 };
 
 struct fuse_rename_in {
-	unsigned long newdir;
+	__u64	newdir;
 };
 
 struct fuse_link_in {
-	unsigned long newdir;
+	__u64	newdir;
 };
 
 struct fuse_setattr_in {
+	__u32	valid;
 	struct fuse_attr attr;
-	unsigned int valid;
 };
 
 struct fuse_open_in {
-	unsigned int flags;
+	__u32	flags;
 };
 
 struct fuse_open_out {
-	unsigned long fh;
-	unsigned int _open_flags;
+	__u64	fh;
+	__u32	open_flags;
 };
 
 struct fuse_release_in {
-	unsigned long fh;
-	unsigned int flags;
+	__u64	fh;
+	__u32	flags;
 };
 
 struct fuse_flush_in {
-	unsigned long fh;
-	unsigned int _nref;
+	__u64	fh;
+	__u32	flush_flags;
 };
 
 struct fuse_read_in {
-	unsigned long fh;
-	unsigned long long offset;
-	unsigned int size;
+	__u64	fh;
+	__u64	offset;
+	__u32	size;
 };
 
 struct fuse_write_in {
-	int writepage;
-	unsigned long fh;
-	unsigned long long offset;
-	unsigned int size;
+	__u64	fh;
+	__u64	offset;
+	__u32	size;
+	__u32	write_flags;
 };
 
 struct fuse_write_out {
-	unsigned int size;
+	__u32	size;
 };
 
 struct fuse_statfs_out {
@@ -181,45 +184,47 @@
 };
 
 struct fuse_fsync_in {
-	unsigned long fh;
-	int datasync;
+	__u64	fh;
+	__u32	fsync_flags;
 };
 
 struct fuse_setxattr_in {
-	unsigned int size;
-	unsigned int flags;
+	__u32	size;
+	__u32	flags;
 };
 
 struct fuse_getxattr_in {
-	unsigned int size;
+	__u32	size;
 };
 
 struct fuse_getxattr_out {
-	unsigned int size;
+	__u32	size;
 };
 
 struct fuse_in_header {
-	int unique;
-	enum fuse_opcode opcode;
-	unsigned long nodeid;
-	unsigned int uid;
-	unsigned int gid;
-	unsigned int pid;
+	__u32	len;
+	__u32	opcode;
+	__u64	unique;
+	__u64	nodeid;
+	__u32	uid;
+	__u32	gid;
+	__u32	pid;
 };
 
 struct fuse_out_header {
-	int unique;
-	int error;
+	__u32	len;
+	__s32	error;
+	__u64	unique;
 };
 
 struct fuse_dirent {
-	unsigned long ino;
-	unsigned short namelen;
-	unsigned char type;
-	char name[256];
+	__u64	ino;
+	__u32	namelen;
+	__u32	type;
+	char name[0];
 };
 
-#define FUSE_NAME_OFFSET ((unsigned int) ((struct fuse_dirent *) 0)->name)
-#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(long) - 1) & ~(sizeof(long) - 1))
+#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
+#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
 #define FUSE_DIRENT_SIZE(d) \
 	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)