summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-kernel/linux-headers/files/2.4.6-r2/linux-2.4.6-reiserfs-NFS.patch')
-rw-r--r--sys-kernel/linux-headers/files/2.4.6-r2/linux-2.4.6-reiserfs-NFS.patch647
1 files changed, 0 insertions, 647 deletions
diff --git a/sys-kernel/linux-headers/files/2.4.6-r2/linux-2.4.6-reiserfs-NFS.patch b/sys-kernel/linux-headers/files/2.4.6-r2/linux-2.4.6-reiserfs-NFS.patch
deleted file mode 100644
index 5f3830c8ffe1..000000000000
--- a/sys-kernel/linux-headers/files/2.4.6-r2/linux-2.4.6-reiserfs-NFS.patch
+++ /dev/null
@@ -1,647 +0,0 @@
-diff -u --recursive --new-file linux-2.4.6-file/fs/nfs/inode.c linux-2.4.6-mmap/fs/nfs/inode.c
---- linux-2.4.6-file/fs/nfs/inode.c Wed Jul 4 17:30:28 2001
-+++ linux-2.4.6-mmap/fs/nfs/inode.c Wed Jul 4 20:48:01 2001
-@@ -48,6 +48,7 @@
- static void nfs_write_inode(struct inode *,int);
- static void nfs_delete_inode(struct inode *);
- static void nfs_put_super(struct super_block *);
-+static void nfs_clear_inode(struct inode *);
- static void nfs_umount_begin(struct super_block *);
- static int nfs_statfs(struct super_block *, struct statfs *);
-
-@@ -57,6 +58,7 @@
- delete_inode: nfs_delete_inode,
- put_super: nfs_put_super,
- statfs: nfs_statfs,
-+ clear_inode: nfs_clear_inode,
- umount_begin: nfs_umount_begin,
- };
-
-@@ -141,6 +143,21 @@
- clear_inode(inode);
- }
-
-+/*
-+ * For the moment, the only task for the NFS clear_inode method is to
-+ * release the mmap credential
-+ */
-+static void
-+nfs_clear_inode(struct inode *inode)
-+{
-+ struct rpc_cred *cred = NFS_I(inode)->mm_cred;
-+
-+ if (cred) {
-+ put_rpccred(cred);
-+ NFS_I(inode)->mm_cred = 0;
-+ }
-+}
-+
- void
- nfs_put_super(struct super_block *sb)
- {
-@@ -600,7 +617,6 @@
- inode->i_ctime = nfs_time_to_secs(fattr->ctime);
- NFS_CACHE_CTIME(inode) = fattr->ctime;
- NFS_CACHE_MTIME(inode) = fattr->mtime;
-- NFS_CACHE_ATIME(inode) = fattr->atime;
- NFS_CACHE_ISIZE(inode) = fattr->size;
- NFS_ATTRTIMEO(inode) = NFS_MINATTRTIMEO(inode);
- NFS_ATTRTIMEO_UPDATE(inode) = jiffies;
-@@ -794,6 +810,20 @@
- }
-
- /*
-+ * Ensure that mmap has a recent RPC credential for use when writing out
-+ * shared pages
-+ */
-+static inline void
-+nfs_set_mmcred(struct inode *inode, struct rpc_cred *cred)
-+{
-+ struct rpc_cred *oldcred = NFS_I(inode)->mm_cred;
-+
-+ NFS_I(inode)->mm_cred = get_rpccred(cred);
-+ if (oldcred)
-+ put_rpccred(oldcred);
-+}
-+
-+/*
- * These are probably going to contain hooks for
- * allocating and releasing RPC credentials for
- * the file. I'll have to think about Tronds patch
-@@ -808,20 +838,20 @@
- auth = NFS_CLIENT(inode)->cl_auth;
- cred = rpcauth_lookupcred(auth, 0);
- filp->private_data = cred;
-+ if (filp->f_mode & FMODE_WRITE)
-+ nfs_set_mmcred(inode, cred);
- unlock_kernel();
- return 0;
- }
-
- int nfs_release(struct inode *inode, struct file *filp)
- {
-- struct rpc_auth *auth;
- struct rpc_cred *cred;
-
- lock_kernel();
-- auth = NFS_CLIENT(inode)->cl_auth;
- cred = nfs_file_cred(filp);
- if (cred)
-- rpcauth_releasecred(auth, cred);
-+ put_rpccred(cred);
- unlock_kernel();
- return 0;
- }
-@@ -976,7 +1006,6 @@
- NFS_CACHE_CTIME(inode) = fattr->ctime;
- inode->i_ctime = nfs_time_to_secs(fattr->ctime);
-
-- NFS_CACHE_ATIME(inode) = fattr->atime;
- inode->i_atime = nfs_time_to_secs(fattr->atime);
-
- NFS_CACHE_MTIME(inode) = new_mtime;
-diff -u --recursive --new-file linux-2.4.6-file/fs/nfs/unlink.c linux-2.4.6-mmap/fs/nfs/unlink.c
---- linux-2.4.6-file/fs/nfs/unlink.c Fri Feb 9 20:29:44 2001
-+++ linux-2.4.6-mmap/fs/nfs/unlink.c Wed Jul 4 20:48:47 2001
-@@ -128,7 +128,7 @@
- dir_i = dir->d_inode;
- nfs_zap_caches(dir_i);
- NFS_PROTO(dir_i)->unlink_done(dir, &task->tk_msg);
-- rpcauth_releasecred(task->tk_auth, data->cred);
-+ put_rpccred(data->cred);
- data->cred = NULL;
- dput(dir);
- }
-diff -u --recursive --new-file linux-2.4.6-file/fs/nfs/write.c linux-2.4.6-mmap/fs/nfs/write.c
---- linux-2.4.6-file/fs/nfs/write.c Mon May 21 21:29:14 2001
-+++ linux-2.4.6-mmap/fs/nfs/write.c Wed Jul 4 20:48:24 2001
-@@ -181,7 +181,9 @@
-
-
- if (file)
-- cred = nfs_file_cred(file);
-+ cred = get_rpccred(nfs_file_cred(file));
-+ if (!cred)
-+ cred = get_rpccred(NFS_I(inode)->mm_cred);
-
- dprintk("NFS: nfs_writepage_sync(%x/%Ld %d@%Ld)\n",
- inode->i_dev, (long long)NFS_FILEID(inode),
-@@ -226,6 +228,8 @@
-
- io_error:
- kunmap(page);
-+ if (cred)
-+ put_rpccred(cred);
-
- return written? written : result;
- }
-@@ -241,6 +245,9 @@
- status = (IS_ERR(req)) ? PTR_ERR(req) : 0;
- if (status < 0)
- goto out;
-+ if (!req->wb_cred)
-+ req->wb_cred = get_rpccred(NFS_I(inode)->mm_cred);
-+ nfs_unlock_request(req);
- nfs_release_request(req);
- nfs_strategy(inode);
- out:
-@@ -557,13 +564,11 @@
- req->wb_bytes = count;
- req->wb_file = file;
-
-- /* If we have a struct file, use its cached credentials
-- * else cache the current process' credentials. */
-+ /* If we have a struct file, use its cached credentials */
- if (file) {
- get_file(file);
- req->wb_cred = nfs_file_cred(file);
-- } else
-- req->wb_cred = rpcauth_lookupcred(NFS_CLIENT(inode)->cl_auth, 0);
-+ }
- req->wb_inode = inode;
- req->wb_count = 1;
-
-@@ -608,8 +613,8 @@
- /* Release struct file or cached credential */
- if (req->wb_file)
- fput(req->wb_file);
-- else
-- rpcauth_releasecred(NFS_CLIENT(inode)->cl_auth, req->wb_cred);
-+ else if (req->wb_cred)
-+ put_rpccred(req->wb_cred);
- page_cache_release(page);
- nfs_page_free(req);
- /* wake up anyone waiting to allocate a request */
-@@ -927,8 +932,6 @@
- if (end > rqend)
- req->wb_bytes = end - req->wb_offset;
-
-- nfs_unlock_request(req);
--
- return req;
- }
-
-@@ -1049,6 +1052,7 @@
- goto done;
-
- status = 0;
-+ nfs_unlock_request(req);
- /* If we wrote past the end of the page.
- * Call the strategy routine so it can send out a bunch
- * of requests.
-diff -u --recursive --new-file linux-2.4.6-file/include/linux/nfs_fs.h linux-2.4.6-mmap/include/linux/nfs_fs.h
---- linux-2.4.6-file/include/linux/nfs_fs.h Sat May 26 03:02:11 2001
-+++ linux-2.4.6-mmap/include/linux/nfs_fs.h Wed Jul 4 17:32:16 2001
-@@ -63,6 +63,11 @@
- */
- #define NFS_SUPER_MAGIC 0x6969
-
-+static inline struct nfs_inode_info *NFS_I(struct inode *inode)
-+{
-+ return &inode->u.nfs_i;
-+}
-+
- #define NFS_FH(inode) (&(inode)->u.nfs_i.fh)
- #define NFS_SERVER(inode) (&(inode)->i_sb->u.nfs_sb.s_server)
- #define NFS_CLIENT(inode) (NFS_SERVER(inode)->client)
-@@ -74,7 +79,6 @@
- #define NFS_READTIME(inode) ((inode)->u.nfs_i.read_cache_jiffies)
- #define NFS_CACHE_CTIME(inode) ((inode)->u.nfs_i.read_cache_ctime)
- #define NFS_CACHE_MTIME(inode) ((inode)->u.nfs_i.read_cache_mtime)
--#define NFS_CACHE_ATIME(inode) ((inode)->u.nfs_i.read_cache_atime)
- #define NFS_CACHE_ISIZE(inode) ((inode)->u.nfs_i.read_cache_isize)
- #define NFS_NEXTSCAN(inode) ((inode)->u.nfs_i.nextscan)
- #define NFS_CACHEINV(inode) \
-diff -u --recursive --new-file linux-2.4.6-file/include/linux/nfs_fs_i.h linux-2.4.6-mmap/include/linux/nfs_fs_i.h
---- linux-2.4.6-file/include/linux/nfs_fs_i.h Thu May 31 15:27:10 2001
-+++ linux-2.4.6-mmap/include/linux/nfs_fs_i.h Wed Jul 4 17:32:16 2001
-@@ -45,7 +45,6 @@
- unsigned long read_cache_jiffies;
- __u64 read_cache_ctime;
- __u64 read_cache_mtime;
-- __u64 read_cache_atime;
- __u64 read_cache_isize;
- unsigned long attrtimeo;
- unsigned long attrtimeo_timestamp;
-@@ -73,6 +72,9 @@
- struct inode *hash_next,
- *hash_prev;
- unsigned long nextscan;
-+
-+ /* Credentials for shared mmap */
-+ struct rpc_cred *mm_cred;
- };
-
- /*
-diff -u --recursive --new-file linux-2.4.6-file/include/linux/sunrpc/auth.h linux-2.4.6-mmap/include/linux/sunrpc/auth.h
---- linux-2.4.6-file/include/linux/sunrpc/auth.h Fri Jun 22 19:30:22 2001
-+++ linux-2.4.6-mmap/include/linux/sunrpc/auth.h Wed Jul 4 20:51:35 2001
-@@ -14,6 +14,8 @@
- #include <linux/config.h>
- #include <linux/sunrpc/sched.h>
-
-+#include <asm/atomic.h>
-+
- /* size of the nodename buffer */
- #define UNX_MAXNODENAME 32
-
-@@ -22,8 +24,10 @@
- */
- struct rpc_cred {
- struct rpc_cred * cr_next; /* linked list */
-+ struct rpc_auth * cr_auth;
-+ struct rpc_credops * cr_ops;
- unsigned long cr_expire; /* when to gc */
-- unsigned short cr_count; /* ref count */
-+ atomic_t cr_count; /* ref count */
- unsigned short cr_flags; /* various flags */
- #ifdef RPC_DEBUG
- unsigned long cr_magic; /* 0x0f4aa4f0 */
-@@ -71,6 +75,9 @@
- void (*destroy)(struct rpc_auth *);
-
- struct rpc_cred * (*crcreate)(int);
-+};
-+
-+struct rpc_credops {
- void (*crdestroy)(struct rpc_cred *);
-
- int (*crmatch)(struct rpc_cred *, int);
-@@ -92,8 +99,7 @@
- struct rpc_cred * rpcauth_lookupcred(struct rpc_auth *, int);
- struct rpc_cred * rpcauth_bindcred(struct rpc_task *);
- void rpcauth_holdcred(struct rpc_task *);
--void rpcauth_releasecred(struct rpc_auth *,
-- struct rpc_cred *);
-+void put_rpccred(struct rpc_cred *);
- void rpcauth_unbindcred(struct rpc_task *);
- int rpcauth_matchcred(struct rpc_auth *,
- struct rpc_cred *, int);
-@@ -106,6 +112,13 @@
- void rpcauth_free_credcache(struct rpc_auth *);
- void rpcauth_insert_credcache(struct rpc_auth *,
- struct rpc_cred *);
-+
-+static inline
-+struct rpc_cred * get_rpccred(struct rpc_cred *cred)
-+{
-+ atomic_inc(&cred->cr_count);
-+ return cred;
-+}
-
- #endif /* __KERNEL__ */
- #endif /* _LINUX_SUNRPC_AUTH_H */
-diff -u --recursive --new-file linux-2.4.6-file/net/sunrpc/auth.c linux-2.4.6-mmap/net/sunrpc/auth.c
---- linux-2.4.6-file/net/sunrpc/auth.c Fri Feb 9 20:29:44 2001
-+++ linux-2.4.6-mmap/net/sunrpc/auth.c Wed Jul 4 20:51:04 2001
-@@ -81,42 +81,61 @@
- auth->au_nextgc = jiffies + (auth->au_expire >> 1);
- }
-
-+/*
-+ * Destroy an unreferenced credential
-+ */
- static inline void
--rpcauth_crdestroy(struct rpc_auth *auth, struct rpc_cred *cred)
-+rpcauth_crdestroy(struct rpc_cred *cred)
- {
- #ifdef RPC_DEBUG
- if (cred->cr_magic != RPCAUTH_CRED_MAGIC)
- BUG();
- cred->cr_magic = 0;
-+ if (atomic_read(&cred->cr_count) || cred->cr_auth)
-+ BUG();
- #endif
-- if (auth->au_ops->crdestroy)
-- auth->au_ops->crdestroy(cred);
-- else
-- rpc_free(cred);
-+ cred->cr_ops->crdestroy(cred);
- }
-
- /*
-- * Clear the RPC credential cache
-+ * Destroy a list of credentials
-+ */
-+static inline
-+void rpcauth_destroy_credlist(struct rpc_cred *head)
-+{
-+ struct rpc_cred *cred;
-+
-+ while ((cred = head) != NULL) {
-+ head = cred->cr_next;
-+ rpcauth_crdestroy(cred);
-+ }
-+}
-+
-+/*
-+ * Clear the RPC credential cache, and delete those credentials
-+ * that are not referenced.
- */
- void
- rpcauth_free_credcache(struct rpc_auth *auth)
- {
-- struct rpc_cred **q, *cred;
-- void (*destroy)(struct rpc_cred *);
-+ struct rpc_cred **q, *cred, *free = NULL;
- int i;
-
-- if (!(destroy = auth->au_ops->crdestroy))
-- destroy = (void (*)(struct rpc_cred *)) rpc_free;
--
- spin_lock(&rpc_credcache_lock);
- for (i = 0; i < RPC_CREDCACHE_NR; i++) {
- q = &auth->au_credcache[i];
- while ((cred = *q) != NULL) {
- *q = cred->cr_next;
-- destroy(cred);
-+ cred->cr_auth = NULL;
-+ if (atomic_read(&cred->cr_count) == 0) {
-+ cred->cr_next = free;
-+ free = cred;
-+ } else
-+ cred->cr_next = NULL;
- }
- }
- spin_unlock(&rpc_credcache_lock);
-+ rpcauth_destroy_credlist(free);
- }
-
- /*
-@@ -133,9 +152,10 @@
- for (i = 0; i < RPC_CREDCACHE_NR; i++) {
- q = &auth->au_credcache[i];
- while ((cred = *q) != NULL) {
-- if (!cred->cr_count &&
-+ if (!atomic_read(&cred->cr_count) &&
- time_before(cred->cr_expire, jiffies)) {
- *q = cred->cr_next;
-+ cred->cr_auth = NULL;
- cred->cr_next = free;
- free = cred;
- continue;
-@@ -144,10 +164,7 @@
- }
- }
- spin_unlock(&rpc_credcache_lock);
-- while ((cred = free) != NULL) {
-- free = cred->cr_next;
-- rpcauth_crdestroy(auth, cred);
-- }
-+ rpcauth_destroy_credlist(free);
- auth->au_nextgc = jiffies + auth->au_expire;
- }
-
-@@ -163,8 +180,8 @@
- spin_lock(&rpc_credcache_lock);
- cred->cr_next = auth->au_credcache[nr];
- auth->au_credcache[nr] = cred;
-- cred->cr_count++;
-- cred->cr_expire = jiffies + auth->au_expire;
-+ cred->cr_auth = auth;
-+ get_rpccred(cred);
- spin_unlock(&rpc_credcache_lock);
- }
-
-@@ -187,7 +204,7 @@
- q = &auth->au_credcache[nr];
- while ((cred = *q) != NULL) {
- if (!(cred->cr_flags & RPCAUTH_CRED_DEAD) &&
-- auth->au_ops->crmatch(cred, taskflags)) {
-+ cred->cr_ops->crmatch(cred, taskflags)) {
- *q = cred->cr_next;
- break;
- }
-@@ -213,23 +230,23 @@
- * Remove cred handle from cache
- */
- static void
--rpcauth_remove_credcache(struct rpc_auth *auth, struct rpc_cred *cred)
-+rpcauth_remove_credcache(struct rpc_cred *cred)
- {
-+ struct rpc_auth *auth = cred->cr_auth;
- struct rpc_cred **q, *cr;
- int nr;
-
- nr = (cred->cr_uid & RPC_CREDCACHE_MASK);
-- spin_lock(&rpc_credcache_lock);
- q = &auth->au_credcache[nr];
- while ((cr = *q) != NULL) {
- if (cred == cr) {
- *q = cred->cr_next;
- cred->cr_next = NULL;
-+ cred->cr_auth = NULL;
- break;
- }
- q = &cred->cr_next;
- }
-- spin_unlock(&rpc_credcache_lock);
- }
-
- struct rpc_cred *
-@@ -258,7 +275,7 @@
- {
- dprintk("RPC: matching %s cred %d\n",
- auth->au_ops->au_name, taskflags);
-- return auth->au_ops->crmatch(cred, taskflags);
-+ return cred->cr_ops->crmatch(cred, taskflags);
- }
-
- void
-@@ -266,26 +283,25 @@
- {
- dprintk("RPC: %4d holding %s cred %p\n",
- task->tk_pid, task->tk_auth->au_ops->au_name, task->tk_msg.rpc_cred);
-- if (task->tk_msg.rpc_cred) {
-- spin_lock(&rpc_credcache_lock);
-- task->tk_msg.rpc_cred->cr_count++;
-- task->tk_msg.rpc_cred->cr_expire = jiffies + task->tk_auth->au_expire;
-- spin_unlock(&rpc_credcache_lock);
-- }
-+ if (task->tk_msg.rpc_cred)
-+ get_rpccred(task->tk_msg.rpc_cred);
- }
-
- void
--rpcauth_releasecred(struct rpc_auth *auth, struct rpc_cred *cred)
-+put_rpccred(struct rpc_cred *cred)
- {
-- spin_lock(&rpc_credcache_lock);
-- if (cred != NULL && cred->cr_count > 0) {
-- if (!--cred->cr_count && (cred->cr_flags & RPCAUTH_CRED_DEAD)) {
-- spin_unlock(&rpc_credcache_lock);
-- rpcauth_remove_credcache(auth, cred);
-- rpcauth_crdestroy(auth, cred);
-- return;
-- }
-+ if (!atomic_dec_and_lock(&cred->cr_count, &rpc_credcache_lock))
-+ return;
-+
-+ if (cred->cr_auth && cred->cr_flags & RPCAUTH_CRED_DEAD)
-+ rpcauth_remove_credcache(cred);
-+
-+ if (!cred->cr_auth) {
-+ spin_unlock(&rpc_credcache_lock);
-+ rpcauth_crdestroy(cred);
-+ return;
- }
-+ cred->cr_expire = jiffies + cred->cr_auth->au_expire;
- spin_unlock(&rpc_credcache_lock);
- }
-
-@@ -298,7 +314,7 @@
- dprintk("RPC: %4d releasing %s cred %p\n",
- task->tk_pid, auth->au_ops->au_name, cred);
-
-- rpcauth_releasecred(auth, cred);
-+ put_rpccred(cred);
- task->tk_msg.rpc_cred = NULL;
- }
-
-@@ -306,10 +322,11 @@
- rpcauth_marshcred(struct rpc_task *task, u32 *p)
- {
- struct rpc_auth *auth = task->tk_auth;
-+ struct rpc_cred *cred = task->tk_msg.rpc_cred;
-
- dprintk("RPC: %4d marshaling %s cred %p\n",
-- task->tk_pid, auth->au_ops->au_name, task->tk_msg.rpc_cred);
-- return auth->au_ops->crmarshal(task, p,
-+ task->tk_pid, auth->au_ops->au_name, cred);
-+ return cred->cr_ops->crmarshal(task, p,
- task->tk_flags & RPC_CALL_REALUID);
- }
-
-@@ -317,20 +334,22 @@
- rpcauth_checkverf(struct rpc_task *task, u32 *p)
- {
- struct rpc_auth *auth = task->tk_auth;
-+ struct rpc_cred *cred = task->tk_msg.rpc_cred;
-
- dprintk("RPC: %4d validating %s cred %p\n",
-- task->tk_pid, auth->au_ops->au_name, task->tk_msg.rpc_cred);
-- return auth->au_ops->crvalidate(task, p);
-+ task->tk_pid, auth->au_ops->au_name, cred);
-+ return cred->cr_ops->crvalidate(task, p);
- }
-
- int
- rpcauth_refreshcred(struct rpc_task *task)
- {
- struct rpc_auth *auth = task->tk_auth;
-+ struct rpc_cred *cred = task->tk_msg.rpc_cred;
-
- dprintk("RPC: %4d refreshing %s cred %p\n",
-- task->tk_pid, auth->au_ops->au_name, task->tk_msg.rpc_cred);
-- task->tk_status = auth->au_ops->crrefresh(task);
-+ task->tk_pid, auth->au_ops->au_name, cred);
-+ task->tk_status = cred->cr_ops->crrefresh(task);
- return task->tk_status;
- }
-
-diff -u --recursive --new-file linux-2.4.6-file/net/sunrpc/auth_null.c linux-2.4.6-mmap/net/sunrpc/auth_null.c
---- linux-2.4.6-file/net/sunrpc/auth_null.c Fri Feb 9 20:29:44 2001
-+++ linux-2.4.6-mmap/net/sunrpc/auth_null.c Wed Jul 4 19:27:38 2001
-@@ -17,6 +17,8 @@
- # define RPCDBG_FACILITY RPCDBG_AUTH
- #endif
-
-+static struct rpc_credops null_credops;
-+
- static struct rpc_auth *
- nul_create(struct rpc_clnt *clnt)
- {
-@@ -52,9 +54,10 @@
-
- if (!(cred = (struct rpc_cred *) rpc_allocate(flags, sizeof(*cred))))
- return NULL;
-- cred->cr_count = 0;
-+ atomic_set(&cred->cr_count, 0);
- cred->cr_flags = RPCAUTH_CRED_UPTODATE;
- cred->cr_uid = current->uid;
-+ cred->cr_ops = &null_credops;
-
- return cred;
- }
-@@ -124,7 +127,11 @@
- #endif
- nul_create,
- nul_destroy,
-- nul_create_cred,
-+ nul_create_cred
-+};
-+
-+static
-+struct rpc_credops null_credops = {
- nul_destroy_cred,
- nul_match,
- nul_marshal,
-diff -u --recursive --new-file linux-2.4.6-file/net/sunrpc/auth_unix.c linux-2.4.6-mmap/net/sunrpc/auth_unix.c
---- linux-2.4.6-file/net/sunrpc/auth_unix.c Fri Feb 9 20:29:44 2001
-+++ linux-2.4.6-mmap/net/sunrpc/auth_unix.c Wed Jul 4 19:29:07 2001
-@@ -33,6 +33,8 @@
- # define RPCDBG_FACILITY RPCDBG_AUTH
- #endif
-
-+static struct rpc_credops unix_credops;
-+
- static struct rpc_auth *
- unx_create(struct rpc_clnt *clnt)
- {
-@@ -71,7 +73,7 @@
- if (!(cred = (struct unx_cred *) rpc_allocate(flags, sizeof(*cred))))
- return NULL;
-
-- cred->uc_count = 0;
-+ atomic_set(&cred->uc_count, 0);
- cred->uc_flags = RPCAUTH_CRED_UPTODATE;
- if (flags & RPC_TASK_ROOTCREDS) {
- cred->uc_uid = cred->uc_fsuid = 0;
-@@ -91,6 +93,7 @@
- if (i < NFS_NGROUPS)
- cred->uc_gids[i] = NOGROUP;
- }
-+ cred->uc_base.cr_ops = &unix_credops;
-
- return (struct rpc_cred *) cred;
- }
-@@ -106,7 +109,7 @@
- if (!(cred = (struct unx_cred *) rpc_malloc(task, sizeof(*cred))))
- return NULL;
-
-- cred->uc_count = 1;
-+ atomic_set(&cred->uc_count, 1);
- cred->uc_flags = RPCAUTH_CRED_DEAD|RPCAUTH_CRED_UPTODATE;
- cred->uc_uid = uid;
- cred->uc_gid = gid;
-@@ -236,7 +239,11 @@
- #endif
- unx_create,
- unx_destroy,
-- unx_create_cred,
-+ unx_create_cred
-+};
-+
-+static
-+struct rpc_credops unix_credops = {
- unx_destroy_cred,
- unx_match,
- unx_marshal,
-diff -u --recursive --new-file linux-2.4.6-file/net/sunrpc/sunrpc_syms.c linux-2.4.6-mmap/net/sunrpc/sunrpc_syms.c
---- linux-2.4.6-file/net/sunrpc/sunrpc_syms.c Fri Jan 12 00:53:02 2001
-+++ linux-2.4.6-mmap/net/sunrpc/sunrpc_syms.c Wed Jul 4 20:55:19 2001
-@@ -65,7 +65,7 @@
- EXPORT_SYMBOL(rpcauth_lookupcred);
- EXPORT_SYMBOL(rpcauth_bindcred);
- EXPORT_SYMBOL(rpcauth_matchcred);
--EXPORT_SYMBOL(rpcauth_releasecred);
-+EXPORT_SYMBOL(put_rpccred);
-
- /* RPC server stuff */
- EXPORT_SYMBOL(svc_create);
-
-_______________________________________________
-NFS maillist - NFS@lists.sourceforge.net
-http://lists.sourceforge.net/lists/listinfo/nfs
-
-