SOURCES: shfs-2.6.19.patch (NEW) - patch against kernels >=2.6.19

zbyniu zbyniu at pld-linux.org
Thu Mar 29 00:58:27 CEST 2007


Author: zbyniu                       Date: Wed Mar 28 22:58:27 2007 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- patch against kernels >=2.6.19

---- Files affected:
SOURCES:
   shfs-2.6.19.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/shfs-2.6.19.patch
diff -u /dev/null SOURCES/shfs-2.6.19.patch:1.1
--- /dev/null	Thu Mar 29 00:58:27 2007
+++ SOURCES/shfs-2.6.19.patch	Thu Mar 29 00:58:22 2007
@@ -0,0 +1,377 @@
+--- shfs-0.35/shfs/Linux-2.6/fcache.c	2007-01-03 22:29:26.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/fcache.c	2007-01-03 22:34:21.000000000 -0600
+@@ -100,7 +100,11 @@
+ 		VERBOSE("dir in file cache?\n");
+ 		return -EINVAL;
+ 	}
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	p = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	if (!p) {
+ 		VERBOSE("inode without info\n");
+ 		return -EINVAL;
+@@ -127,7 +131,11 @@
+ 		VERBOSE("dir in file cache?\n");
+ 		return -EINVAL;
+ 	}
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	p = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	if (!p) {
+ 		VERBOSE("inode without info\n");
+ 		return -EINVAL;
+@@ -160,7 +168,11 @@
+ 	if (result == 0) {
+ 		struct shfs_inode_info *p;
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++		p = (struct shfs_inode_info *)f->f_dentry->d_inode->i_private;
++#else
+ 		p = (struct shfs_inode_info *)f->f_dentry->d_inode->u.generic_ip;
++#endif
+ 		if (!p) {
+ 			VERBOSE("inode without info\n");
+ 			return -EINVAL;
+@@ -184,7 +196,11 @@
+ 		return -EINVAL;
+ 	}
+ 	DEBUG("ino: %lu\n", inode->i_ino);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	p = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	if (!p) {
+ 		VERBOSE("inode without info\n");
+ 		return -EINVAL;
+@@ -226,7 +242,11 @@
+ 		VERBOSE("dir in file cache?\n");
+ 		return -EINVAL;
+ 	}
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	p = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	if (!p) {
+ 		VERBOSE("inode without info\n");
+ 		return -EINVAL;
+@@ -327,7 +347,11 @@
+ 		VERBOSE("dir in file cache?\n");
+ 		return -EINVAL;
+ 	}
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	p = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	p = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	if (!p) {
+ 		VERBOSE("inode without info\n");
+ 		return -EINVAL;
+--- shfs-0.35/shfs/Linux-2.6/inode.c	2004-06-01 08:16:19.000000000 -0500
++++ shfs-0.35/shfs/Linux-2.6/inode.c	2007-01-03 22:39:44.000000000 -0600
+@@ -35,7 +36,11 @@
+ shfs_set_inode_attr(struct inode *inode, struct shfs_fattr *fattr)
+ {
+ 	struct shfs_sb_info *info = info_from_inode(inode);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	struct shfs_inode_info *i = inode->i_private;
++#else
+ 	struct shfs_inode_info *i = inode->u.generic_ip;
++#endif
+ 	struct timespec last_time = inode->i_mtime;
+ 	loff_t last_size = inode->i_size;
+ 
+@@ -52,7 +57,9 @@
+ 	inode->i_ctime	= fattr->f_ctime;
+ 	inode->i_atime	= fattr->f_atime;
+ 	inode->i_mtime	= fattr->f_mtime;
++#ifdef STRUCT_INODE_HAS_I_BLKSIZE
+ 	inode->i_blksize= fattr->f_blksize;
++#endif
+ 	inode->i_blocks	= fattr->f_blocks;
+ 	inode->i_size	= fattr->f_size;
+ 
+@@ -75,7 +82,11 @@
+ 	if (!inode)
+ 		return NULL;
+ 	inode->i_ino = fattr->f_ino;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	i = inode->i_private = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL);
++#else
+ 	i = inode->u.generic_ip = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL);
++#endif
+ 	if (!i)
+ 		return NULL;
+ 	i->cache = NULL;
+@@ -107,7 +118,11 @@
+ 	struct shfs_inode_info *i;
+ 
+ 	DEBUG("ino: %lu\n", inode->i_ino);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	i = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	i = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	if (!i) {
+ 		VERBOSE("invalid inode\n");
+ 		goto out;
+@@ -172,7 +190,11 @@
+ {
+ 	struct shfs_sb_info *info = info_from_dentry(dentry);
+ 	struct inode *inode = dentry->d_inode;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	int result;
+ 
+         DEBUG("%s\n", dentry->d_name.name);
+--- shfs-0.35/shfs/Linux-2.6/dir.c	2007-01-03 22:38:23.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/dir.c	2007-01-03 22:39:06.000000000 -0600
+@@ -302,8 +302,13 @@
+ 	
+ 	shfs_invalid_dir_cache(dir);
+ 	result = shfs_instantiate(dentry);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	if (forced_write && dentry->d_inode && dentry->d_inode->i_private)
++		((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close = 1;
++#else
+ 	if (forced_write && dentry->d_inode && dentry->d_inode->u.generic_ip)
+ 		((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close = 1;
++#endif
+ 	return result;
+ }
+ 
+--- shfs-0.35/shfs/Linux-2.6/file.c	2007-01-03 22:40:24.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/file.c	2007-01-03 22:45:11.000000000 -0600
+@@ -90,7 +90,11 @@
+ 	struct dentry *dentry = f->f_dentry;
+ 	struct shfs_sb_info *info = info_from_dentry(dentry);
+ 	struct inode *inode = p->mapping->host;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private;
++#else
+ 	struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip;
++#endif
+ 	char *buffer = kmap(p) + offset;
+ 	int written = 0, result;
+ 	unsigned count = to - offset;
+@@ -252,8 +256,13 @@
+ 		}
+ 	}
+ 	/* if file was forced to be writeable, change attrs back on close */
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	if (dentry->d_inode && dentry->d_inode->i_private) {
++		if  (((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close) {
++#else
+ 	if (dentry->d_inode && dentry->d_inode->u.generic_ip) {
+ 		if  (((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close) {
++#endif
+ 			char name[SHFS_PATH_MAX];
+ 
+ 			if (get_name(dentry, name) < 0)
+@@ -302,7 +311,8 @@
+ 		goto error;
+ 	}
+ 	if (result != 0) {
+-		copy_to_user(buf, (char *)page, result);
++		if (copy_to_user(buf, (char *)page, result))
++			goto error;
+ 		*ppos += result;
+ 	}
+ error:
+@@ -315,11 +325,15 @@
+ static ssize_t 
+ shfs_slow_write(struct file *f, const char *buf, size_t count, loff_t *offset)
+ {
+-	int written = 0;
++	ssize_t written = 0;
+ 	int result;
+ 	
+ 	DEBUG("\n");
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	written = do_sync_write(f, buf, count, offset);
++#else
+ 	written = generic_file_write(f, buf, count, offset);
++#endif
+ 	if (written > 0) {
+ 		result = do_file_flush(f);
+ 		written = result < 0 ? result: written;
+@@ -330,14 +344,23 @@
+ 
+ struct file_operations shfs_file_operations = {
+ 	.llseek		= generic_file_llseek,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	.read		= do_sync_read,
++	.write		= do_sync_write,
++#else
+ 	.read		= generic_file_read,
+ 	.write		= generic_file_write,
++#endif
+ 	.ioctl		= shfs_ioctl,
+ 	.mmap		= generic_file_mmap,
+ 	.open		= shfs_file_open,
+ 	.flush		= shfs_file_flush,
+ 	.release	= shfs_file_release,
+ 	.fsync		= shfs_file_sync,
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	.aio_read	= generic_file_aio_read,
++	.aio_write	= generic_file_aio_write,
++#endif
+ };
+ 
+ struct file_operations shfs_slow_operations = {
+--- shfs-0.35/shfs/Linux-2.6/proc.c	2007-01-03 22:45:32.000000000 -0600
++++ shfs-0.35/shfs/Linux-2.6/proc.c	2007-01-03 22:57:17.000000000 -0600
+@@ -149,7 +149,12 @@
+ {
+ 	struct file *f = info->sock;
+ 	mm_segment_t fs;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	ssize_t result = 0;
++	loff_t begin;
++#else
+ 	int c, result = 0;
++#endif
+ 	unsigned long flags, sigpipe;
+ 	sigset_t old_set;
+ 
+@@ -161,7 +166,9 @@
+ 			return result;
+ 	}
+ 	
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
+ 	c = count;
++#endif
+ 
+ 	fs = get_fs();
+ 	set_fs(get_ds());
+@@ -173,6 +180,16 @@
+ 	SIGRECALC;
+ 	SIGUNLOCK(flags);
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	begin = f->f_pos;
++	result = do_sync_write(f, buffer, count, &f->f_pos);
++
++	if (result < 0) {
++		DEBUG("error: %d\n", result);
++		fput(f);
++		info->sock = NULL;
++	}
++#else
+ 	do {
+ 		struct iovec vec[1];
+ 
+@@ -190,6 +207,7 @@
+ 		buffer += result;
+ 		c -= result;
+ 	} while (c > 0);
++#endif
+ 
+ 	SIGLOCK(flags);
+ 	if (result == -EPIPE && !sigpipe) {
+@@ -204,7 +222,11 @@
+ 
+ 	DEBUG(">%d\n", result);
+ 	if (result < 0)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++		set_garbage(info, 1, count - (f->f_pos - begin));
++#else
+ 		set_garbage(info, 1, c);
++#endif
+ 	else
+ 		result = count;
+ 	return result;
+@@ -222,6 +244,9 @@
+ 	int c, result = 0;
+ 	unsigned long flags, sigpipe;
+ 	sigset_t old_set;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	loff_t begin;
++#endif
+ 
+ 	if (!f)
+ 		return -EIO;
+@@ -256,6 +281,20 @@
+ 	fs = get_fs();
+ 	set_fs(get_ds());
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++	begin = f->f_pos;
++	result = do_sync_read(f, buffer, c, &f->f_pos);
++
++	if (!result) {
++		/* peer has closed socket */
++		result = -EIO;
++	}
++	if (result < 0) {
++		DEBUG("error: %d\n", result);
++		fput(f);
++		info->sock = NULL;
++	}
++#else
+ 	do {
+ 		struct iovec vec[1];
+ 
+@@ -277,6 +316,7 @@
+ 		buffer += result;
+ 		c -= result;
+ 	} while (c > 0);
++#endif
+ 
+ 	SIGLOCK(flags);
+ 	if (result == -EPIPE && !sigpipe) {
+@@ -291,7 +331,11 @@
+ 	
+ 	DEBUG("<%d\n", result);
+ 	if (result < 0)
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++		set_garbage(info, 0, count - (f->f_pos - begin));
++#else
+ 		set_garbage(info, 0, c);
++#endif
+ 	else
+ 		result = count;
+ 	return result;
+@@ -316,8 +360,10 @@
+ 			return result;
+ 	}
+ 	while (1) {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
+ 		struct iovec vec[1];
+ 
++#endif
+ 		nl = memchr(BUFFER, '\n', LEN);
+ 		if (nl) {
+ 			*nl = '\0';
+@@ -348,9 +394,13 @@
+ 		fs = get_fs();
+ 		set_fs(get_ds());
+ 
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19))
++		result = do_sync_read(f, BUFFER+LEN, c, &f->f_pos);
++#else
+ 		vec[0].iov_base = BUFFER+LEN;
+ 		vec[0].iov_len = c;
+ 		result = f->f_op->readv(f, (const struct iovec *)&vec, 1, &f->f_pos);
++#endif
+ 		SIGLOCK(flags);
+ 		if (result == -EPIPE && !sigpipe) {
+ 			sigdelset(&current->pending.signal, SIGPIPE);
+--- shfs-0.35/shfs/Linux-2.6/shfs.h~	2004-06-01 13:16:19.000000000 +0000
++++ shfs-0.35/shfs/Linux-2.6/shfs.h	2007-03-28 17:31:34.271161000 +0000
+@@ -23,6 +23,7 @@
+ #define SHFS_PATH_MAX 512
+ 
+ #include <linux/types.h>
++#include <linux/version.h>
+ 
+ struct shfs_fattr {
+ 	unsigned long 	f_ino;
================================================================


More information about the pld-cvs-commit mailing list