wok-current rev 915
Remove shfs (replaced by sshfs-fuse)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sun Jun 15 20:17:40 2008 +0000 (2008-06-15) |
parents | 4fff3a92371f |
children | a3129d854cf2 |
files | shfs/receipt shfs/stuff/shfs-0.35-2.6.22.9.u shfs/stuff/shfs-0.35-2.6.24.2.u |
line diff
1.1 --- a/shfs/receipt Sun Jun 15 20:14:25 2008 +0000 1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 1.3 @@ -1,56 +0,0 @@ 1.4 -# SliTaz package receipt. 1.5 - 1.6 -PACKAGE="shfs" 1.7 -VERSION="0.35" 1.8 -CATEGORY="network" 1.9 -SHORT_DESC="(secure) SHell FileSystem Linux kernel module and userland tool." 1.10 -MAINTAINER="pascal.bellard@ads-lu.com" 1.11 -TARBALL="shfs-$VERSION.tar.gz" 1.12 -WEB_SITE="http://$PACKAGE.sourceforge.net/" 1.13 -WGET_URL="$SF_MIRROR/$PACKAGE/$TARBALL" 1.14 -DEPENDS="dropbear" 1.15 -BUILD_DEPENDS="perl" 1.16 - 1.17 -# Rules to configure and make the package. 1.18 -compile_rules() 1.19 -{ 1.20 - local kver 1.21 - if [ ! -d ../linux/taz ]; then 1.22 - tazwok cook linux 1.23 - fi 1.24 - kver=$(grep "kernel version" ../linux/linux-*/.config) 1.25 - kver=${kver##* } 1.26 - cd $PACKAGE-$VERSION 1.27 - patch -p0 < ../stuff/$PACKAGE-$VERSION-$kver.u 1.28 - while read subs ; do 1.29 - perl -pi -e "$subs" Makefile 1.30 - done << EOF 1.31 -s,^KERNEL=.*,KERNEL=$kver, 1.32 -s,^KERNEL_SOURCES=.*,KERNEL_SOURCES=$(cd ../../linux/linux-$kver* ; pwd), 1.33 -s,^ROOT=.*,ROOT=$(pwd)/_pkg, 1.34 -EOF 1.35 - make 1.36 - mkdir -p _pkg/lib/modules/$kver-slitaz/kernel/fs/shfs/ _pkg/usr/bin 1.37 - cp shfs/Linux-2.6/shfs.ko _pkg/lib/modules/$kver-slitaz/kernel/fs/shfs/ 1.38 - cp shfsmount/shfsmount shfsmount/shfsumount _pkg/usr/bin 1.39 -} 1.40 - 1.41 - 1.42 -# Rules to gen a SliTaz package suitable for Tazpkg. 1.43 -genpkg_rules() 1.44 -{ 1.45 - cp -a $PACKAGE-$VERSION/_pkg/* $fs 1.46 - strip -s $fs/usr/bin/* 1.47 -} 1.48 - 1.49 -# Post install/remove commands for Tazpkg. 1.50 -post_install() 1.51 -{ 1.52 - depmod -a -b /$1 1.53 -} 1.54 - 1.55 -post_remove() 1.56 -{ 1.57 - depmod -a 1.58 -} 1.59 -
2.1 --- a/shfs/stuff/shfs-0.35-2.6.22.9.u Sun Jun 15 20:14:25 2008 +0000 2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 2.3 @@ -1,1 +0,0 @@ 2.4 -shfs-0.35-2.6.24.2.u 2.5 \ No newline at end of file
3.1 --- a/shfs/stuff/shfs-0.35-2.6.24.2.u Sun Jun 15 20:14:25 2008 +0000 3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 3.3 @@ -1,437 +0,0 @@ 3.4 ---- shfs/Linux-2.6/dcache.c 3.5 -+++ shfs/Linux-2.6/dcache.c 3.6 -@@ -68,7 +68,7 @@ shfs_invalidate_dircache_entries(struct 3.7 - spin_lock(&dcache_lock); 3.8 - next = parent->d_subdirs.next; 3.9 - while (next != &parent->d_subdirs) { 3.10 -- dentry = list_entry(next, struct dentry, d_child); 3.11 -+ dentry = list_entry(next, struct dentry, d_u.d_child); 3.12 - dentry->d_fsdata = NULL; 3.13 - shfs_age_dentry(info, dentry); 3.14 - next = next->next; 3.15 -@@ -101,7 +101,7 @@ shfs_dget_fpos(struct dentry *dentry, st 3.16 - spin_lock(&dcache_lock); 3.17 - next = parent->d_subdirs.next; 3.18 - while (next != &parent->d_subdirs) { 3.19 -- dent = list_entry(next, struct dentry, d_child); 3.20 -+ dent = list_entry(next, struct dentry, d_u.d_child); 3.21 - if ((unsigned long)dent->d_fsdata == fpos) { 3.22 - if (dent->d_inode) 3.23 - dget_locked(dent); 3.24 ---- shfs/Linux-2.6/dir.c 3.25 -+++ shfs/Linux-2.6/dir.c 3.26 -@@ -300,8 +300,8 @@ shfs_create(struct inode* dir, struct de 3.27 - 3.28 - shfs_invalid_dir_cache(dir); 3.29 - result = shfs_instantiate(dentry); 3.30 -- if (forced_write && dentry->d_inode && dentry->d_inode->u.generic_ip) 3.31 -- ((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close = 1; 3.32 -+ if (forced_write && dentry->d_inode && dentry->d_inode->i_private) 3.33 -+ ((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close = 1; 3.34 - return result; 3.35 - } 3.36 - 3.37 -@@ -488,7 +488,7 @@ shfs_d_delete(struct dentry *dentry) 3.38 - return 0; 3.39 - } 3.40 - 3.41 --static struct dentry_operations shfs_dentry_operations = { 3.42 -+struct dentry_operations shfs_dentry_operations = { 3.43 - .d_revalidate = shfs_d_revalidate, 3.44 - .d_delete = shfs_d_delete, 3.45 - }; 3.46 ---- shfs/Linux-2.6/fcache.c 3.47 -+++ shfs/Linux-2.6/fcache.c 3.48 -@@ -29,12 +29,12 @@ struct shfs_file { 3.49 - char *data; 3.50 - }; 3.51 - 3.52 --kmem_cache_t *file_cache = NULL; 3.53 -+struct kmem_cache *file_cache = NULL; 3.54 - 3.55 - void 3.56 - fcache_init(void) 3.57 - { 3.58 -- file_cache = kmem_cache_create("shfs_file", sizeof(struct shfs_file), 0, 0, NULL, NULL); 3.59 -+ file_cache = kmem_cache_create("shfs_file", sizeof(struct shfs_file), 0, 0, NULL); 3.60 - DEBUG("file_cache: %p\n", file_cache); 3.61 - } 3.62 - 3.63 -@@ -100,7 +100,7 @@ fcache_file_open(struct file *f) 3.64 - VERBOSE("dir in file cache?\n"); 3.65 - return -EINVAL; 3.66 - } 3.67 -- p = (struct shfs_inode_info *)inode->u.generic_ip; 3.68 -+ p = (struct shfs_inode_info *)inode->i_private; 3.69 - if (!p) { 3.70 - VERBOSE("inode without info\n"); 3.71 - return -EINVAL; 3.72 -@@ -127,7 +127,7 @@ fcache_file_sync(struct file *f) 3.73 - VERBOSE("dir in file cache?\n"); 3.74 - return -EINVAL; 3.75 - } 3.76 -- p = (struct shfs_inode_info *)inode->u.generic_ip; 3.77 -+ p = (struct shfs_inode_info *)inode->i_private; 3.78 - if (!p) { 3.79 - VERBOSE("inode without info\n"); 3.80 - return -EINVAL; 3.81 -@@ -160,7 +160,7 @@ fcache_file_close(struct file *f) 3.82 - if (result == 0) { 3.83 - struct shfs_inode_info *p; 3.84 - 3.85 -- p = (struct shfs_inode_info *)f->f_dentry->d_inode->u.generic_ip; 3.86 -+ p = (struct shfs_inode_info *)f->f_dentry->d_inode->i_private; 3.87 - if (!p) { 3.88 - VERBOSE("inode without info\n"); 3.89 - return -EINVAL; 3.90 -@@ -184,7 +184,7 @@ fcache_file_clear(struct inode *inode) 3.91 - return -EINVAL; 3.92 - } 3.93 - DEBUG("ino: %lu\n", inode->i_ino); 3.94 -- p = (struct shfs_inode_info *)inode->u.generic_ip; 3.95 -+ p = (struct shfs_inode_info *)inode->i_private; 3.96 - if (!p) { 3.97 - VERBOSE("inode without info\n"); 3.98 - return -EINVAL; 3.99 -@@ -226,7 +226,7 @@ fcache_file_read(struct file *f, unsigne 3.100 - VERBOSE("dir in file cache?\n"); 3.101 - return -EINVAL; 3.102 - } 3.103 -- p = (struct shfs_inode_info *)inode->u.generic_ip; 3.104 -+ p = (struct shfs_inode_info *)inode->i_private; 3.105 - if (!p) { 3.106 - VERBOSE("inode without info\n"); 3.107 - return -EINVAL; 3.108 -@@ -327,7 +327,7 @@ fcache_file_write(struct file *f, unsign 3.109 - VERBOSE("dir in file cache?\n"); 3.110 - return -EINVAL; 3.111 - } 3.112 -- p = (struct shfs_inode_info *)inode->u.generic_ip; 3.113 -+ p = (struct shfs_inode_info *)inode->i_private; 3.114 - if (!p) { 3.115 - VERBOSE("inode without info\n"); 3.116 - return -EINVAL; 3.117 ---- shfs/Linux-2.6/file.c 3.118 -+++ shfs/Linux-2.6/file.c 3.119 -@@ -90,7 +90,7 @@ shfs_file_commitwrite(struct file *f, st 3.120 - struct dentry *dentry = f->f_dentry; 3.121 - struct shfs_sb_info *info = info_from_dentry(dentry); 3.122 - struct inode *inode = p->mapping->host; 3.123 -- struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip; 3.124 -+ struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private; 3.125 - char *buffer = kmap(p) + offset; 3.126 - int written = 0, result; 3.127 - unsigned count = to - offset; 3.128 -@@ -199,7 +199,7 @@ shfs_file_open(struct inode *inode, stru 3.129 - } 3.130 - 3.131 - static int 3.132 --shfs_file_flush(struct file *f) 3.133 -+shfs_file_flush(struct file *f, fl_owner_t id) 3.134 - { 3.135 - struct dentry *dentry = f->f_dentry; 3.136 - struct shfs_sb_info *info = info_from_dentry(dentry); 3.137 -@@ -242,8 +242,8 @@ shfs_file_release(struct inode *inode, s 3.138 - } 3.139 - } 3.140 - /* if file was forced to be writeable, change attrs back on close */ 3.141 -- if (dentry->d_inode && dentry->d_inode->u.generic_ip) { 3.142 -- if (((struct shfs_inode_info *)dentry->d_inode->u.generic_ip)->unset_write_on_close) { 3.143 -+ if (dentry->d_inode && dentry->d_inode->i_private) { 3.144 -+ if (((struct shfs_inode_info *)dentry->d_inode->i_private)->unset_write_on_close) { 3.145 - char name[SHFS_PATH_MAX]; 3.146 - 3.147 - if (get_name(dentry, name) < 0) 3.148 -@@ -292,7 +292,9 @@ shfs_slow_read(struct file *f, char *buf 3.149 - goto error; 3.150 - } 3.151 - if (result != 0) { 3.152 -- copy_to_user(buf, (char *)page, result); 3.153 -+ if (copy_to_user(buf, (char *)page, result)) { 3.154 -+ goto error; 3.155 -+ } 3.156 - *ppos += result; 3.157 - } 3.158 - error: 3.159 -@@ -309,9 +311,9 @@ shfs_slow_write(struct file *f, const ch 3.160 - int result; 3.161 - 3.162 - DEBUG("\n"); 3.163 -- written = generic_file_write(f, buf, count, offset); 3.164 -+ written = do_sync_write(f, buf, count, offset); 3.165 - if (written > 0) { 3.166 -- result = shfs_file_flush(f); 3.167 -+ result = shfs_file_flush(f, 0); 3.168 - written = result < 0 ? result: written; 3.169 - } 3.170 - 3.171 -@@ -320,8 +322,8 @@ shfs_slow_write(struct file *f, const ch 3.172 - 3.173 - struct file_operations shfs_file_operations = { 3.174 - .llseek = generic_file_llseek, 3.175 -- .read = generic_file_read, 3.176 -- .write = generic_file_write, 3.177 -+ .read = do_sync_read, 3.178 -+ .write = do_sync_write, 3.179 - .ioctl = shfs_ioctl, 3.180 - .mmap = generic_file_mmap, 3.181 - .open = shfs_file_open, 3.182 ---- shfs/Linux-2.6/inode.c 3.183 -+++ shfs/Linux-2.6/inode.c 3.184 -@@ -29,13 +29,13 @@ int debug_level; 3.185 - unsigned long alloc; 3.186 - #endif 3.187 - 3.188 --kmem_cache_t *inode_cache = NULL; 3.189 -+struct kmem_cache *inode_cache = NULL; 3.190 - 3.191 - void 3.192 - shfs_set_inode_attr(struct inode *inode, struct shfs_fattr *fattr) 3.193 - { 3.194 - struct shfs_sb_info *info = info_from_inode(inode); 3.195 -- struct shfs_inode_info *i = inode->u.generic_ip; 3.196 -+ struct shfs_inode_info *i = inode->i_private; 3.197 - struct timespec last_time = inode->i_mtime; 3.198 - loff_t last_size = inode->i_size; 3.199 - 3.200 -@@ -52,7 +52,8 @@ shfs_set_inode_attr(struct inode *inode, 3.201 - inode->i_ctime = fattr->f_ctime; 3.202 - inode->i_atime = fattr->f_atime; 3.203 - inode->i_mtime = fattr->f_mtime; 3.204 -- inode->i_blksize= fattr->f_blksize; 3.205 -+ //inode->i_blksize= fattr->f_blksize; 3.206 -+ inode->i_blkbits= 12; // 4K 3.207 - inode->i_blocks = fattr->f_blocks; 3.208 - inode->i_size = fattr->f_size; 3.209 - 3.210 -@@ -60,7 +61,7 @@ shfs_set_inode_attr(struct inode *inode, 3.211 - 3.212 - if (!timespec_equal(&inode->i_mtime, &last_time) || inode->i_size != last_size) { 3.213 - DEBUG("inode changed (%ld/%ld, %lu/%lu)\n", inode->i_mtime.tv_sec, last_time.tv_sec, (unsigned long)inode->i_size, (unsigned long)last_size); 3.214 -- invalidate_inode_pages(inode->i_mapping); 3.215 -+ invalidate_mapping_pages(inode->i_mapping, 0, ~0UL); 3.216 - fcache_file_clear(inode); 3.217 - } 3.218 - } 3.219 -@@ -75,7 +76,7 @@ shfs_iget(struct super_block *sb, struct 3.220 - if (!inode) 3.221 - return NULL; 3.222 - inode->i_ino = fattr->f_ino; 3.223 -- i = inode->u.generic_ip = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL); 3.224 -+ i = inode->i_private = (struct shfs_inode_info *)KMEM_ALLOC("inode", inode_cache, GFP_KERNEL); 3.225 - if (!i) 3.226 - return NULL; 3.227 - i->cache = NULL; 3.228 -@@ -107,7 +108,7 @@ shfs_delete_inode(struct inode *inode) 3.229 - struct shfs_inode_info *i; 3.230 - 3.231 - DEBUG("ino: %lu\n", inode->i_ino); 3.232 -- i = (struct shfs_inode_info *)inode->u.generic_ip; 3.233 -+ i = (struct shfs_inode_info *)inode->i_private; 3.234 - if (!i) { 3.235 - VERBOSE("invalid inode\n"); 3.236 - goto out; 3.237 -@@ -158,7 +159,7 @@ shfs_refresh_inode(struct dentry *dentry 3.238 - * But we do want to invalidate the caches ... 3.239 - */ 3.240 - if (!S_ISDIR(inode->i_mode)) 3.241 -- invalidate_inode_pages(inode->i_mapping); 3.242 -+ invalidate_mapping_pages(inode->i_mapping, 0, ~0UL); 3.243 - else 3.244 - shfs_invalid_dir_cache(inode); 3.245 - result = -EIO; 3.246 -@@ -172,7 +173,7 @@ shfs_revalidate_inode(struct dentry *den 3.247 - { 3.248 - struct shfs_sb_info *info = info_from_dentry(dentry); 3.249 - struct inode *inode = dentry->d_inode; 3.250 -- struct shfs_inode_info *i = (struct shfs_inode_info *)inode->u.generic_ip; 3.251 -+ struct shfs_inode_info *i = (struct shfs_inode_info *)inode->i_private; 3.252 - int result; 3.253 - 3.254 - DEBUG("%s\n", dentry->d_name.name); 3.255 -@@ -337,11 +338,11 @@ out: 3.256 - return -EINVAL; 3.257 - } 3.258 - 3.259 --static struct super_block * 3.260 -+static int 3.261 - shfs_get_sb(struct file_system_type *fs_type, 3.262 -- int flags, const char *dev_name, void *data) 3.263 -+ int flags, const char *dev_name, void *data, struct vfsmount *mnt) 3.264 - { 3.265 -- return get_sb_nodev(fs_type, flags, data, shfs_read_super); 3.266 -+ return get_sb_nodev(fs_type, flags, data, shfs_read_super, mnt); 3.267 - } 3.268 - 3.269 - static struct file_system_type sh_fs_type = { 3.270 -@@ -356,7 +357,7 @@ init_shfs(void) 3.271 - { 3.272 - printk(KERN_NOTICE "SHell File System, (c) 2002-2004 Miroslav Spousta\n"); 3.273 - fcache_init(); 3.274 -- inode_cache = kmem_cache_create("shfs_inode", sizeof(struct shfs_inode_info), 0, 0, NULL, NULL); 3.275 -+ inode_cache = kmem_cache_create("shfs_inode", sizeof(struct shfs_inode_info), 0, 0, NULL); 3.276 - 3.277 - debug_level = 0; 3.278 - #ifdef ENABLE_DEBUG 3.279 ---- shfs/Linux-2.6/proc.c 3.280 -+++ shfs/Linux-2.6/proc.c 3.281 -@@ -148,6 +148,7 @@ int 3.282 - sock_write(struct shfs_sb_info *info, const void *buffer, int count) 3.283 - { 3.284 - struct file *f = info->sock; 3.285 -+ struct kiocb kiocb; 3.286 - mm_segment_t fs; 3.287 - int c, result = 0; 3.288 - unsigned long flags, sigpipe; 3.289 -@@ -173,12 +174,13 @@ sock_write(struct shfs_sb_info *info, co 3.290 - SIGRECALC; 3.291 - SIGUNLOCK(flags); 3.292 - 3.293 -+ init_sync_kiocb(&kiocb, f); 3.294 - do { 3.295 - struct iovec vec[1]; 3.296 - 3.297 - vec[0].iov_base = (void *)buffer; 3.298 - vec[0].iov_len = c; 3.299 -- result = f->f_op->writev(f, (const struct iovec *) &vec, 1, &f->f_pos); 3.300 -+ result = f->f_op->aio_write(&kiocb, (const struct iovec *) &vec, 1, f->f_pos); 3.301 - if (result < 0) { 3.302 - DEBUG("error: %d\n", result); 3.303 - if (result == -EAGAIN) 3.304 -@@ -218,6 +220,7 @@ int 3.305 - sock_read(struct shfs_sb_info *info, void *buffer, int count) 3.306 - { 3.307 - struct file *f = info->sock; 3.308 -+ struct kiocb kiocb; 3.309 - mm_segment_t fs; 3.310 - int c, result = 0; 3.311 - unsigned long flags, sigpipe; 3.312 -@@ -256,12 +259,13 @@ sock_read(struct shfs_sb_info *info, voi 3.313 - fs = get_fs(); 3.314 - set_fs(get_ds()); 3.315 - 3.316 -+ init_sync_kiocb(&kiocb, f); 3.317 - do { 3.318 - struct iovec vec[1]; 3.319 - 3.320 - vec[0].iov_base = buffer; 3.321 - vec[0].iov_len = c; 3.322 -- result = f->f_op->readv(f, (const struct iovec *)&vec, 1, &f->f_pos); 3.323 -+ result = f->f_op->aio_read(&kiocb, (const struct iovec *) &vec, 1, f->f_pos); 3.324 - if (!result) { 3.325 - /* peer has closed socket */ 3.326 - result = -EIO; 3.327 -@@ -302,6 +306,7 @@ int 3.328 - sock_readln(struct shfs_sb_info *info, char *buffer, int count) 3.329 - { 3.330 - struct file *f = info->sock; 3.331 -+ struct kiocb kiocb; 3.332 - mm_segment_t fs; 3.333 - int c, l = 0, result; 3.334 - char *nl; 3.335 -@@ -315,6 +320,7 @@ sock_readln(struct shfs_sb_info *info, c 3.336 - if (result < 0) 3.337 - return result; 3.338 - } 3.339 -+ init_sync_kiocb(&kiocb, f); 3.340 - while (1) { 3.341 - struct iovec vec[1]; 3.342 - 3.343 -@@ -350,7 +356,7 @@ sock_readln(struct shfs_sb_info *info, c 3.344 - 3.345 - vec[0].iov_base = BUFFER+LEN; 3.346 - vec[0].iov_len = c; 3.347 -- result = f->f_op->readv(f, (const struct iovec *)&vec, 1, &f->f_pos); 3.348 -+ result = f->f_op->aio_read(&kiocb, (const struct iovec *) &vec, 1, f->f_pos); 3.349 - SIGLOCK(flags); 3.350 - if (result == -EPIPE && !sigpipe) { 3.351 - sigdelset(¤t->pending.signal, SIGPIPE); 3.352 -@@ -571,9 +577,9 @@ error: 3.353 - } 3.354 - 3.355 - int 3.356 --shfs_statfs(struct super_block *sb, struct kstatfs *attr) 3.357 -+shfs_statfs(struct dentry *dentry, struct kstatfs *attr) 3.358 - { 3.359 -- struct shfs_sb_info *info = info_from_sb(sb); 3.360 -+ struct shfs_sb_info *info = info_from_sb(dentry->d_sb); 3.361 - 3.362 - DEBUG("\n"); 3.363 - return info->fops.statfs(info, attr); 3.364 ---- shfs/Linux-2.6/shfs_debug.h 3.365 -+++ shfs/Linux-2.6/shfs_debug.h 3.366 -@@ -19,7 +19,7 @@ extern int debug_level; 3.367 - extern unsigned long alloc; 3.368 - 3.369 - static inline void * 3.370 --__kmem_malloc_debug(char *s, kmem_cache_t *cache, int flags) 3.371 -+__kmem_malloc_debug(char *s, struct kmem_cache *cache, int flags) 3.372 - { 3.373 - if (debug_level >= SHFS_ALLOC) { 3.374 - void *x = kmem_cache_alloc(cache, flags); 3.375 -@@ -32,7 +32,7 @@ __kmem_malloc_debug(char *s, kmem_cache_ 3.376 - } 3.377 - 3.378 - static inline void 3.379 --__kmem_free_debug(char *s, kmem_cache_t *cache, void *p) 3.380 -+__kmem_free_debug(char *s, struct kmem_cache *cache, void *p) 3.381 - { 3.382 - if (debug_level >= SHFS_ALLOC) { 3.383 - VERBOSE("free (%s): %p\n", s, p); 3.384 ---- shfs/Linux-2.6/shfs_fs.h 3.385 -+++ shfs/Linux-2.6/shfs_fs.h 3.386 -@@ -74,10 +74,10 @@ int shfs_fill_cache(struct file*, void*, 3.387 - 3.388 - /* shfs/fcache.c */ 3.389 - #include <linux/slab.h> 3.390 --extern kmem_cache_t *file_cache; 3.391 --extern kmem_cache_t *dir_head_cache; 3.392 --extern kmem_cache_t *dir_entry_cache; 3.393 --extern kmem_cache_t *dir_name_cache; 3.394 -+extern struct kmem_cache *file_cache; 3.395 -+extern struct kmem_cache *dir_head_cache; 3.396 -+extern struct kmem_cache *dir_entry_cache; 3.397 -+extern struct kmem_cache *dir_name_cache; 3.398 - void fcache_init(void); 3.399 - void fcache_finish(void); 3.400 - int fcache_file_open(struct file*); 3.401 -@@ -101,7 +101,7 @@ int reply(char *s); 3.402 - void set_garbage(struct shfs_sb_info *info, int write, int count); 3.403 - int get_name(struct dentry *d, char *name); 3.404 - int shfs_notify_change(struct dentry *dentry, struct iattr *attr); 3.405 --int shfs_statfs(struct super_block *sb, struct kstatfs *attr); 3.406 -+int shfs_statfs(struct dentry *dentry, struct kstatfs *attr); 3.407 - 3.408 - /* shfs/inode.c */ 3.409 - void shfs_set_inode_attr(struct inode *inode, struct shfs_fattr *fattr); 3.410 ---- shfs/Linux-2.6/symlink.c 3.411 -+++ shfs/Linux-2.6/symlink.c 3.412 -@@ -41,7 +41,7 @@ error: 3.413 - return result; 3.414 - } 3.415 - 3.416 --static int 3.417 -+static void * 3.418 - shfs_follow_link(struct dentry *dentry, struct nameidata *nd) 3.419 - { 3.420 - struct shfs_sb_info *info = info_from_dentry(dentry); 3.421 -@@ -51,7 +51,6 @@ shfs_follow_link(struct dentry *dentry, 3.422 - 3.423 - DEBUG("%s\n", dentry->d_name.name); 3.424 - 3.425 -- result = -ENAMETOOLONG; 3.426 - if (get_name(dentry, name) < 0) 3.427 - goto error; 3.428 - 3.429 -@@ -59,9 +58,9 @@ shfs_follow_link(struct dentry *dentry, 3.430 - if (result < 0) 3.431 - goto error; 3.432 - DEBUG("%s\n", real_name); 3.433 -- result = vfs_follow_link(nd, real_name); 3.434 -+ nd_set_link(nd, real_name); 3.435 - error: 3.436 -- return result; 3.437 -+ return NULL; 3.438 - } 3.439 - 3.440 - struct inode_operations shfs_symlink_inode_operations = {