From: girishc Date: Thu, 4 Sep 2003 06:07:22 +0000 (+0000) Subject: b=1825 X-Git-Tag: v1_7_0_51~2^7~609 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=3d3a09587532ea8a5015a25a0a3ed706b056f43d;p=fs%2Flustre-release.git b=1825 Addresses review comments from peter --- diff --git a/lustre/kernel_patches/patches/nfs_export_kernel-2.4.20.patch b/lustre/kernel_patches/patches/nfs_export_kernel-2.4.20.patch index a2a594e..184c306 100644 --- a/lustre/kernel_patches/patches/nfs_export_kernel-2.4.20.patch +++ b/lustre/kernel_patches/patches/nfs_export_kernel-2.4.20.patch @@ -1,7 +1,7 @@ -diff -urN linux/fs/file_table.c linux-2.4.20/fs/file_table.c ---- linux/fs/file_table.c Fri Nov 29 05:23:15 2002 -+++ linux-2.4.20/fs/file_table.c Mon Aug 18 22:05:59 2003 -@@ -82,7 +82,7 @@ +diff -uprN linux-2.4.20/fs/file_table.c linux-2.4.20c/fs/file_table.c +--- linux-2.4.20/fs/file_table.c 2002-11-29 05:23:15.000000000 +0530 ++++ linux-2.4.20c/fs/file_table.c 2003-09-03 18:57:54.000000000 +0530 +@@ -82,7 +82,7 @@ struct file * get_empty_filp(void) * and call the open function (if any). The caller must verify that * inode->i_fop is not NULL. */ @@ -10,7 +10,7 @@ diff -urN linux/fs/file_table.c linux-2.4.20/fs/file_table.c { memset(filp, 0, sizeof(*filp)); filp->f_mode = mode; -@@ -90,6 +90,8 @@ +@@ -90,6 +90,8 @@ int init_private_file(struct file *filp, filp->f_dentry = dentry; filp->f_uid = current->fsuid; filp->f_gid = current->fsgid; @@ -19,7 +19,7 @@ diff -urN linux/fs/file_table.c linux-2.4.20/fs/file_table.c filp->f_op = dentry->d_inode->i_fop; if (filp->f_op->open) return filp->f_op->open(dentry->d_inode, filp); -@@ -97,6 +99,11 @@ +@@ -97,6 +99,11 @@ int init_private_file(struct file *filp, return 0; } @@ -31,10 +31,10 @@ diff -urN linux/fs/file_table.c linux-2.4.20/fs/file_table.c void fput(struct file * file) { struct dentry * dentry = file->f_dentry; -diff -urN linux/fs/inode.c linux-2.4.20/fs/inode.c ---- linux/fs/inode.c Mon Aug 18 21:55:12 2003 -+++ linux-2.4.20/fs/inode.c Mon Aug 18 22:07:46 2003 -@@ -970,9 +970,9 @@ +diff -uprN linux-2.4.20/fs/inode.c linux-2.4.20c/fs/inode.c +--- linux-2.4.20/fs/inode.c 2003-09-03 19:01:57.000000000 +0530 ++++ linux-2.4.20c/fs/inode.c 2003-09-03 18:57:54.000000000 +0530 +@@ -970,9 +970,9 @@ struct inode *igrab(struct inode *inode) } @@ -46,7 +46,7 @@ diff -urN linux/fs/inode.c linux-2.4.20/fs/inode.c struct inode * inode; spin_lock(&inode_lock); -@@ -985,6 +985,22 @@ +@@ -985,6 +985,22 @@ struct inode *iget4(struct super_block * } spin_unlock(&inode_lock); @@ -69,10 +69,10 @@ diff -urN linux/fs/inode.c linux-2.4.20/fs/inode.c /* * get_new_inode() will do the right thing, re-trying the search * in case it had to block at any point. -diff -urN linux/fs/namei.c linux-2.4.20/fs/namei.c ---- linux/fs/namei.c Mon Aug 18 21:55:11 2003 -+++ linux-2.4.20/fs/namei.c Mon Aug 18 22:05:59 2003 -@@ -894,7 +894,7 @@ +diff -uprN linux-2.4.20/fs/namei.c linux-2.4.20c/fs/namei.c +--- linux-2.4.20/fs/namei.c 2003-09-04 11:57:55.000000000 +0530 ++++ linux-2.4.20c/fs/namei.c 2003-09-03 18:57:54.000000000 +0530 +@@ -894,7 +894,7 @@ struct dentry * lookup_hash(struct qstr /* SMP-safe */ @@ -81,7 +81,7 @@ diff -urN linux/fs/namei.c linux-2.4.20/fs/namei.c { unsigned long hash; struct qstr this; -@@ -914,11 +914,16 @@ +@@ -914,11 +914,16 @@ struct dentry * lookup_one_len(const cha } this.hash = end_name_hash(hash); @@ -99,22 +99,26 @@ diff -urN linux/fs/namei.c linux-2.4.20/fs/namei.c /* * namei() * -diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c ---- linux/fs/nfsd/nfsfh.c Fri Nov 29 05:23:15 2002 -+++ linux-2.4.20/fs/nfsd/nfsfh.c Mon Aug 18 22:05:59 2003 -@@ -36,6 +36,11 @@ +diff -uprN linux-2.4.20/fs/nfsd/nfsfh.c linux-2.4.20c/fs/nfsd/nfsfh.c +--- linux-2.4.20/fs/nfsd/nfsfh.c 2002-11-29 05:23:15.000000000 +0530 ++++ linux-2.4.20c/fs/nfsd/nfsfh.c 2003-09-03 18:57:55.000000000 +0530 +@@ -36,6 +36,15 @@ struct nfsd_getdents_callback { int sequence; /* sequence counter */ }; +static struct dentry *lookup_it(struct inode *inode, struct dentry * dentry) +{ -+ return inode->i_op->lookup_it(inode, dentry, NULL, 0); ++ if (inode->i_op->lookup_it) ++ return inode->i_op->lookup_it(inode, dentry, NULL, 0); ++ else ++ return inode->i_op->lookup(inode, dentry); ++ +} + /* * A rather strange filldir function to capture * the name matching the specified inode number. -@@ -75,6 +80,8 @@ +@@ -75,6 +84,8 @@ static int nfsd_get_name(struct dentry * int error; struct file file; struct nfsd_getdents_callback buffer; @@ -123,32 +127,31 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c error = -ENOTDIR; if (!dir || !S_ISDIR(dir->i_mode)) -@@ -85,9 +92,36 @@ +@@ -85,9 +96,35 @@ static int nfsd_get_name(struct dentry * /* * Open the directory ... */ - error = init_private_file(&file, dentry, FMODE_READ); - if (error) + if (dentry->d_op && dentry->d_op->d_revalidate_it) { -+ if ( (dentry->d_flags & DCACHE_NFSD_DISCONNECTED) && -+ (dentry->d_parent == dentry) ) { ++ if ((dentry->d_flags & DCACHE_NFSD_DISCONNECTED) && ++ (dentry->d_parent == dentry) ) { + it.it_op_release = NULL; + /* XXX Temporary Hack: Simulating init_private_file without f_op->open -+ for disconnected dentry Since we don't have actual dentry->d_name to revalidate -+ in open_it() */ ++ for disconnected dentry Since we don't have actual dentry->d_name to ++ revalidate in revalidate_it() */ + filp = &file; + memset(filp, 0, sizeof(*filp)); + filp->f_mode = FMODE_READ; + atomic_set(&filp->f_count, 1); + filp->f_dentry = dentry; -+ filp->f_uid = current->fsuid; -+ filp->f_gid = current->fsgid; -+ filp->f_op = dentry->d_inode->i_fop; ++ filp->f_uid = current->fsuid; ++ filp->f_gid = current->fsgid; ++ filp->f_op = dentry->d_inode->i_fop; + error = 0; + } else { + intent_init(&it, IT_OPEN, 0); -+ extern int open_it(struct dentry *dentry, struct lookup_intent *it); -+ error = open_it(dentry, &it); ++ error = revalidate_it(dentry, &it); + if (error) + goto out; + error = init_private_file_it(&file, dentry, FMODE_READ, &it); @@ -162,7 +165,7 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c error = -EINVAL; if (!file.f_op->readdir) goto out_close; -@@ -113,9 +147,13 @@ +@@ -113,9 +150,13 @@ static int nfsd_get_name(struct dentry * } out_close: @@ -177,19 +180,16 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c return error; } -@@ -274,7 +312,10 @@ +@@ -274,7 +315,7 @@ struct dentry *nfsd_findparent(struct de * it is well connected. But nobody returns different dentrys do they? */ down(&child->d_inode->i_sem); - pdentry = child->d_inode->i_op->lookup(child->d_inode, tdentry); -+ if (child->d_inode->i_op->lookup_it) -+ pdentry = lookup_it(child->d_inode, tdentry); -+ else -+ pdentry = child->d_inode->i_op->lookup(child->d_inode, tdentry); ++ pdentry = lookup_it(child->d_inode, tdentry); up(&child->d_inode->i_sem); d_drop(tdentry); /* we never want ".." hashed */ if (!pdentry && tdentry->d_inode == NULL) { -@@ -306,6 +347,8 @@ +@@ -306,6 +347,8 @@ struct dentry *nfsd_findparent(struct de igrab(tdentry->d_inode); pdentry->d_flags |= DCACHE_NFSD_DISCONNECTED; } @@ -198,7 +198,7 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c } if (pdentry == NULL) pdentry = ERR_PTR(-ENOMEM); -@@ -463,6 +506,8 @@ +@@ -463,6 +506,8 @@ find_fh_dentry(struct super_block *sb, _ struct dentry *pdentry; struct inode *parent; @@ -207,7 +207,7 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c pdentry = nfsd_findparent(dentry); err = PTR_ERR(pdentry); if (IS_ERR(pdentry)) -@@ -662,6 +707,11 @@ +@@ -662,6 +707,11 @@ fh_verify(struct svc_rqst *rqstp, struct inode = dentry->d_inode; @@ -219,7 +219,7 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c /* Type check. The correct error return for type mismatches * does not seem to be generally agreed upon. SunOS seems to * use EISDIR if file isn't S_IFREG; a comment in the NFSv3 -@@ -900,8 +950,9 @@ +@@ -900,8 +950,9 @@ out_negative: dentry->d_parent->d_name.name, dentry->d_name.name); goto out; out_uptodate: @@ -231,10 +231,10 @@ diff -urN linux/fs/nfsd/nfsfh.c linux-2.4.20/fs/nfsd/nfsfh.c goto out; } -diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c ---- linux/fs/nfsd/vfs.c Fri Nov 29 05:23:15 2002 -+++ linux-2.4.20/fs/nfsd/vfs.c Mon Aug 18 22:05:59 2003 -@@ -77,6 +77,122 @@ +diff -uprN linux-2.4.20/fs/nfsd/vfs.c linux-2.4.20c/fs/nfsd/vfs.c +--- linux-2.4.20/fs/nfsd/vfs.c 2002-11-29 05:23:15.000000000 +0530 ++++ linux-2.4.20c/fs/nfsd/vfs.c 2003-09-04 11:58:54.000000000 +0530 +@@ -77,6 +77,122 @@ struct raparms { static struct raparms * raparml; static struct raparms * raparm_cache; @@ -338,7 +338,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c + return err; +} + -+int open_it(struct dentry *dentry, struct lookup_intent *it) ++int revalidate_it(struct dentry *dentry, struct lookup_intent *it) +{ + int err = 0; + @@ -357,7 +357,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c /* * Look up one component of a pathname. * N.B. After this call _both_ fhp and resfh need an fh_put -@@ -300,7 +416,10 @@ +@@ -300,7 +416,10 @@ nfsd_setattr(struct svc_rqst *rqstp, str } err = nfserr_notsync; if (!check_guard || guardtime == inode->i_ctime) { @@ -369,14 +369,14 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c err = nfserrno(err); } if (size_change) { -@@ -473,6 +592,15 @@ +@@ -473,6 +592,15 @@ nfsd_open(struct svc_rqst *rqstp, struct filp->f_mode = FMODE_READ; } + struct lookup_intent it; + intent_init(&it, IT_OPEN, filp->f_flags); + -+ err = open_it(dentry, &it); ++ err = revalidate_it(dentry, &it); + if (err) + goto out_nfserr; + @@ -385,7 +385,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c err = 0; if (filp->f_op && filp->f_op->open) { err = filp->f_op->open(inode, filp); -@@ -487,7 +615,11 @@ +@@ -487,7 +615,11 @@ nfsd_open(struct svc_rqst *rqstp, struct atomic_dec(&filp->f_count); } } @@ -397,7 +397,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c if (err) err = nfserrno(err); out: -@@ -818,7 +950,7 @@ +@@ -818,7 +950,7 @@ nfsd_create(struct svc_rqst *rqstp, stru { struct dentry *dentry, *dchild; struct inode *dirp; @@ -406,7 +406,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c err = nfserr_perm; if (!flen) -@@ -834,8 +966,24 @@ +@@ -834,8 +966,24 @@ nfsd_create(struct svc_rqst *rqstp, stru dentry = fhp->fh_dentry; dirp = dentry->d_inode; @@ -432,7 +432,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c goto out; /* * Check whether the response file handle has been verified yet. -@@ -868,10 +1016,12 @@ +@@ -868,10 +1016,12 @@ nfsd_create(struct svc_rqst *rqstp, stru * Make sure the child dentry is still negative ... */ err = nfserr_exist; @@ -449,7 +449,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c } if (!(iap->ia_valid & ATTR_MODE)) -@@ -887,13 +1037,15 @@ +@@ -887,13 +1037,15 @@ nfsd_create(struct svc_rqst *rqstp, stru err = vfs_create(dirp, dchild, iap->ia_mode); break; case S_IFDIR: @@ -467,20 +467,23 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c break; default: printk("nfsd: bad file type %o in nfsd_create\n", type); -@@ -943,6 +1095,8 @@ +@@ -943,6 +1095,8 @@ nfsd_create_v3(struct svc_rqst *rqstp, s int err; __u32 v_mtime=0, v_atime=0; int v_mode=0; + struct lookup_intent it; -+ intent_init(&it, IT_CREAT, 0); ++ intent_init(&it, IT_LOOKUP, 0); err = nfserr_perm; if (!flen) -@@ -962,14 +1116,18 @@ +@@ -962,14 +1116,20 @@ nfsd_create_v3(struct svc_rqst *rqstp, s /* Get all the sanity checks out of the way before * we lock the parent. */ err = nfserr_notdir; - if(!dirp->i_op || !dirp->i_op->lookup) ++ if (dirp->i_op->mknod_raw) ++ err = mknod_raw(dentry, fname, flen, iap->ia_mode, 0); ++ + if(!dirp->i_op || !(dirp->i_op->lookup || dirp->i_op->lookup_it)) goto out; fh_lock(fhp); @@ -489,34 +492,23 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c * Compose the response file handle. */ - dchild = lookup_one_len(fname, dentry, flen); -+ if (dirp->i_op->lookup_it) { -+ it.it_create_mode = iap->ia_mode; ++ if (dirp->i_op->lookup_it) + dchild = lookup_one_len_it(fname, dentry, flen, &it); -+ } else ++ else + dchild = lookup_one_len(fname, dentry, flen); err = PTR_ERR(dchild); if (IS_ERR(dchild)) goto out_nfserr; -@@ -1013,6 +1171,8 @@ +@@ -1013,6 +1173,8 @@ nfsd_create_v3(struct svc_rqst *rqstp, s case NFS3_CREATE_GUARDED: err = nfserr_exist; } -+ if(dirp->i_op->lookup_it) ++ if(dirp->i_op->mknod_raw) + err = 0; goto out; } -@@ -1053,6 +1213,9 @@ - err = nfsd_setattr(rqstp, resfhp, iap, 0, (time_t)0); - - out: -+ if (dirp->i_op->lookup_it && it.it_op_release) { -+ intent_release(&it); -+ } - fh_unlock(fhp); - return err; - -@@ -1119,7 +1282,7 @@ +@@ -1119,7 +1281,7 @@ nfsd_symlink(struct svc_rqst *rqstp, str struct iattr *iap) { struct dentry *dentry, *dnew; @@ -525,7 +517,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c err = nfserr_noent; if (!flen || !plen) -@@ -1133,12 +1296,18 @@ +@@ -1133,12 +1295,18 @@ nfsd_symlink(struct svc_rqst *rqstp, str goto out; fh_lock(fhp); dentry = fhp->fh_dentry; @@ -545,7 +537,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c if (!err) { if (EX_ISSYNC(fhp->fh_export)) nfsd_sync_dir(dentry); -@@ -1206,7 +1375,10 @@ +@@ -1206,7 +1374,10 @@ nfsd_link(struct svc_rqst *rqstp, struct dold = tfhp->fh_dentry; dest = dold->d_inode; @@ -557,7 +549,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c if (!err) { if (EX_ISSYNC(ffhp->fh_export)) { nfsd_sync_dir(ddir); -@@ -1291,7 +1463,10 @@ +@@ -1291,7 +1462,10 @@ nfsd_rename(struct svc_rqst *rqstp, stru err = nfserr_perm; } else #endif @@ -569,7 +561,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c if (!err && EX_ISSYNC(tfhp->fh_export)) { nfsd_sync_dir(tdentry); nfsd_sync_dir(fdentry); -@@ -1312,7 +1487,7 @@ +@@ -1312,7 +1486,7 @@ nfsd_rename(struct svc_rqst *rqstp, stru fill_post_wcc(tfhp); double_up(&tdir->i_sem, &fdir->i_sem); ffhp->fh_locked = tfhp->fh_locked = 0; @@ -578,7 +570,7 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c out: return err; } -@@ -1358,9 +1533,15 @@ +@@ -1358,9 +1532,15 @@ nfsd_unlink(struct svc_rqst *rqstp, stru err = nfserr_perm; } else #endif @@ -596,9 +588,9 @@ diff -urN linux/fs/nfsd/vfs.c linux-2.4.20/fs/nfsd/vfs.c } dput(rdentry); -diff -urN linux/fs/super.c linux-2.4.20/fs/super.c ---- linux/fs/super.c Mon Aug 18 21:55:11 2003 -+++ linux-2.4.20/fs/super.c Mon Aug 18 22:05:59 2003 +diff -uprN linux-2.4.20/fs/super.c linux-2.4.20c/fs/super.c +--- linux-2.4.20/fs/super.c 2003-09-03 19:01:57.000000000 +0530 ++++ linux-2.4.20c/fs/super.c 2003-09-03 18:57:54.000000000 +0530 @@ -27,6 +27,7 @@ #include #include @@ -607,7 +599,7 @@ diff -urN linux/fs/super.c linux-2.4.20/fs/super.c #include -@@ -51,7 +52,7 @@ +@@ -51,7 +52,7 @@ spinlock_t sb_lock = SPIN_LOCK_UNLOCKED; */ static struct file_system_type *file_systems; @@ -616,10 +608,18 @@ diff -urN linux/fs/super.c linux-2.4.20/fs/super.c /* WARNING: This can be used only if we _already_ own a reference */ static void get_filesystem(struct file_system_type *fs) -diff -urN linux/include/linux/fs.h linux-2.4.20/include/linux/fs.h ---- linux/include/linux/fs.h Mon Aug 18 21:55:16 2003 -+++ linux-2.4.20/include/linux/fs.h Mon Aug 18 22:10:54 2003 -@@ -1366,6 +1366,7 @@ +diff -uprN linux-2.4.20/include/linux/fs.h linux-2.4.20c/include/linux/fs.h +--- linux-2.4.20/include/linux/fs.h 2003-09-03 19:01:58.000000000 +0530 ++++ linux-2.4.20c/include/linux/fs.h 2003-09-03 19:18:18.000000000 +0530 +@@ -1096,6 +1096,7 @@ extern int open_namei_it(const char *fil + struct nameidata *nd, struct lookup_intent *it); + extern struct file *dentry_open_it(struct dentry *dentry, struct vfsmount *mnt, + int flags, struct lookup_intent *it); ++extern int revalidate_it(struct dentry *dentry, struct lookup_intent *it); + extern int filp_close(struct file *, fl_owner_t id); + extern char * getname(const char *); + +@@ -1366,6 +1367,7 @@ extern void path_release(struct nameidat extern int follow_down(struct vfsmount **, struct dentry **); extern int follow_up(struct vfsmount **, struct dentry **); extern struct dentry * lookup_one_len(const char *, struct dentry *, int); @@ -627,7 +627,7 @@ diff -urN linux/include/linux/fs.h linux-2.4.20/include/linux/fs.h extern struct dentry * lookup_hash(struct qstr *, struct dentry *); #define user_path_walk(name,nd) __user_walk(name, LOOKUP_FOLLOW|LOOKUP_POSITIVE, nd) #define user_path_walk_link(name,nd) __user_walk(name, LOOKUP_POSITIVE, nd) -@@ -1379,6 +1380,7 @@ +@@ -1379,6 +1381,7 @@ extern ino_t iunique(struct super_block typedef int (*find_inode_t)(struct inode *, unsigned long, void *); extern struct inode * iget4(struct super_block *, unsigned long, find_inode_t, void *); @@ -635,7 +635,7 @@ diff -urN linux/include/linux/fs.h linux-2.4.20/include/linux/fs.h static inline struct inode *iget(struct super_block *sb, unsigned long ino) { return iget4(sb, ino, NULL, NULL); -@@ -1494,6 +1496,7 @@ +@@ -1494,6 +1497,7 @@ extern int dcache_dir_fsync(struct file extern int dcache_readdir(struct file *, void *, filldir_t); extern struct file_operations dcache_dir_ops; @@ -643,10 +643,10 @@ diff -urN linux/include/linux/fs.h linux-2.4.20/include/linux/fs.h extern struct file_system_type *get_fs_type(const char *name); extern struct super_block *get_super(kdev_t); extern void drop_super(struct super_block *sb); -diff -urN linux/kernel/ksyms.c linux-2.4.20/kernel/ksyms.c ---- linux/kernel/ksyms.c Mon Aug 18 21:55:16 2003 -+++ linux-2.4.20/kernel/ksyms.c Mon Aug 18 22:11:17 2003 -@@ -146,6 +146,7 @@ +diff -uprN linux-2.4.20/kernel/ksyms.c linux-2.4.20c/kernel/ksyms.c +--- linux-2.4.20/kernel/ksyms.c 2003-09-03 19:01:58.000000000 +0530 ++++ linux-2.4.20c/kernel/ksyms.c 2003-09-03 18:57:56.000000000 +0530 +@@ -146,6 +146,7 @@ EXPORT_SYMBOL(fget); EXPORT_SYMBOL(igrab); EXPORT_SYMBOL(iunique); EXPORT_SYMBOL(iget4); @@ -654,7 +654,7 @@ diff -urN linux/kernel/ksyms.c linux-2.4.20/kernel/ksyms.c EXPORT_SYMBOL(iput); EXPORT_SYMBOL(force_delete); EXPORT_SYMBOL(follow_up); -@@ -156,6 +157,7 @@ +@@ -156,6 +157,7 @@ EXPORT_SYMBOL(path_walk); EXPORT_SYMBOL(path_release); EXPORT_SYMBOL(__user_walk); EXPORT_SYMBOL(lookup_one_len); @@ -662,7 +662,7 @@ diff -urN linux/kernel/ksyms.c linux-2.4.20/kernel/ksyms.c EXPORT_SYMBOL(lookup_hash); EXPORT_SYMBOL(sys_close); EXPORT_SYMBOL(dcache_lock); -@@ -590,3 +592,4 @@ +@@ -590,3 +592,4 @@ EXPORT_SYMBOL(pidhash); /* debug */ EXPORT_SYMBOL(dump_stack);