diff options
author | Daniel Robbins <drobbins@gentoo.org> | 2001-07-09 21:55:03 +0000 |
---|---|---|
committer | Daniel Robbins <drobbins@gentoo.org> | 2001-07-09 21:55:03 +0000 |
commit | 475108a9e2bbb468fad20222734dbd50a7875b19 (patch) | |
tree | 85cc3a6c4a7353107ed98664b5eefa829a7f3eda /sys-kernel/linux-sources | |
parent | Initial import into portage tree. (diff) | |
download | gentoo-2-475108a9e2bbb468fad20222734dbd50a7875b19.tar.gz gentoo-2-475108a9e2bbb468fad20222734dbd50a7875b19.tar.bz2 gentoo-2-475108a9e2bbb468fad20222734dbd50a7875b19.zip |
adding ext3 and JFS support at the moment; this process includes upgrading
e2fsprogs.
Diffstat (limited to 'sys-kernel/linux-sources')
4 files changed, 1085 insertions, 0 deletions
diff --git a/sys-kernel/linux-sources/files/2.4.6/linux-2.4.6-reiserfs-NFS.patch b/sys-kernel/linux-sources/files/2.4.6/linux-2.4.6-reiserfs-NFS.patch new file mode 100644 index 000000000000..5f3830c8ffe1 --- /dev/null +++ b/sys-kernel/linux-sources/files/2.4.6/linux-2.4.6-reiserfs-NFS.patch @@ -0,0 +1,647 @@ +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 + + diff --git a/sys-kernel/linux-sources/files/2.4.6/lvm.c.diff b/sys-kernel/linux-sources/files/2.4.6/lvm.c.diff new file mode 100644 index 000000000000..6392671b8f7e --- /dev/null +++ b/sys-kernel/linux-sources/files/2.4.6/lvm.c.diff @@ -0,0 +1,20 @@ +--- lvm.c.orig Sat Apr 28 10:48:37 2001 ++++ lvm.c Sat Apr 28 11:07:07 2001 +@@ -1791,7 +1791,7 @@ + int max_hardblocksize = 0, hardblocksize; + + for (le = 0; le < lv->lv_allocated_le; le++) { +- hardblocksize = get_hardblocksize(lv->lv_current_pe[le].dev); ++ hardblocksize = get_hardsect_size(lv->lv_current_pe[le].dev); + if (hardblocksize == 0) + hardblocksize = 512; + if (hardblocksize > max_hardblocksize) +@@ -1801,7 +1801,7 @@ + if (lv->lv_access & LV_SNAPSHOT) { + for (e = 0; e < lv->lv_remap_end; e++) { + hardblocksize = +- get_hardblocksize( ++ get_hardsect_size( + lv->lv_block_exception[e].rdev_new); + if (hardblocksize == 0) + hardblocksize = 512; diff --git a/sys-kernel/linux-sources/files/digest-linux-sources-2.4.6 b/sys-kernel/linux-sources/files/digest-linux-sources-2.4.6 new file mode 100644 index 000000000000..7006f768da71 --- /dev/null +++ b/sys-kernel/linux-sources/files/digest-linux-sources-2.4.6 @@ -0,0 +1,6 @@ +MD5 ff807499928379c4274a307855b9eeeb alsa-driver-0.5.11.tar.bz2 +MD5 3b04fb645ab68a081ab02079be937462 jfs-1.0.0-patch.tar.gz +MD5 f0fce862f60daf4cb8d7c5b589d01158 linux-2.4.6.tar.bz2 +MD5 53740608812efa82532da2f980e6f974 lm_sensors-2.5.5.tar.gz +MD5 1ce6fb607f26dc20d4c77461057acb3c lvm_0.9.1_beta7.tar.gz +MD5 2603105aa14dd39fe841feb21c9a0f0a pcmcia-cs-3.1.26.tar.gz diff --git a/sys-kernel/linux-sources/linux-sources-2.4.6.ebuild b/sys-kernel/linux-sources/linux-sources-2.4.6.ebuild new file mode 100644 index 000000000000..5c62fce036ec --- /dev/null +++ b/sys-kernel/linux-sources/linux-sources-2.4.6.ebuild @@ -0,0 +1,412 @@ +# Copyright 1999-2000 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License, v2 or later +# Author Daniel Robbins <drobbins@gentoo.org> +# /home/cvsroot/gentoo-x86/sys-kernel/linux/linux-2.4.4.3.ebuild,v 1.1 2001/05/02 14:31:06 achim Exp + +#OKV=original kernel version, KV=patched kernel version +OKV=2.4.6 +KV=2.4.6 +S=${WORKDIR}/linux-${KV} + +# Versions of LVM +LVMV=0.9.1_beta7 + +LVMVARC=0.9.1_beta7 +# Versions of alsa +AV=0.5.11 + +# Versionos of jfs +JFSV=1.0.0 + +# Versions of lm_sensors +SENV=2.5.5 + +# Versions of reiserfs +RV=20010327 +KNV="6.g" +PIV="1.d" + +# Versions of xmlprocfs +XMLV=0.3 + +# Versions of pcmcia-cs +PCV="3.1.26" + +[ "${PN}" = "linux" ] && DESCRIPTION="Linux kernel version ${KV}, including modules, binary tools, libraries and includes" +[ "${PN}" = "linux-sources" ] && DESCRIPTION="Linux kernel version ${KV} - full sources" +[ "${PN}" = "linux-extras" ] && DESCRIPTION="Linux kernel support tools and libraries" + +# We use build in /usr/src/linux in case of linux-extras +# so we need no sources +if [ ! "${PN}" = "linux-extras" ] ; then +SRC_URI="http://www.kernel.org/pub/linux/kernel/v2.4/linux-${OKV}.tar.bz2 + http://www.netroedge.com/~lm78/archive/lm_sensors-${SENV}.tar.gz + ftp://ftp.sistina.com/pub/LVM/0.9.1_beta/lvm_${LVMVARC}.tar.gz + ftp://ftp.alsa-project.org/pub/driver/alsa-driver-${AV}.tar.bz2 + http://prdownloads.sourceforge.net/pcmcia-cs/pcmcia-cs-${PCV}.tar.gz + http://oss.software.ibm.com/developerworks/opensource/jfs/project/pub/jfs-1.0.0-patch.tar.gz" +fi + +if [ "$PN" != "linux-extras" ] +then + PROVIDE="virtual/kernel" +fi +if [ "$PN" != "linux-sources" ] +then + if [ "`use alsa`" ] + then + PROVIDE="$PROVIDE virtual/alsa" + fi +fi + +HOMEPAGE="http://www.kernel.org/ + http://www.netroedge.com/~lm78/ + http://www.namesys.com + http://www.sistina.com/lvm/ + http://www.alsa-project.org + http://pcmcia-cs.sourceforge.net" + + + +if [ ! $PN = "linux-extras" ] ; then + RDEPEND=">=sys-apps/e2fsutils-1.22 >=sys-apps/util-linux-2.11f >=sys-apps/reiserfs-utils-3.6.25-r1" + DEPEND=">=sys-apps/modutils-2.4.2 sys-devel/perl" +else + DEPEND=">=sys-kernel/${PF/extras/sources}" +fi +if [ "`use build`" ] && [ $PN = "linux-sources" ] ; then + DEPEND="" + RDEPEND="" +fi + +# this is not pretty... +LINUX_HOSTCFLAGS="-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -I${S}/include" + +src_unpack() { + + # We only need to unpack for linux and linux-sources + + if [ ! "$PN" = "linux-extras" ] + then + + #unpack kernel and apply reiserfs-related patches + cd ${WORKDIR} + unpack linux-${OKV}.tar.bz2 + try mv linux linux-${KV} + cd ${S} +# echo "Applying ${KV} patch..." +# try bzip2 -dc ${DISTDIR}/patch-${KV}.bz2 | patch -p1 + echo "Applying reiserfs-NFS fix..." + try cat ${FILESDIR}/2.4.6/linux-2.4.6-reiserfs-NFS.patch | patch -N -p1 + + if [ "`use lvm`" ] || [ "`use alsa`" ] || [ "`use lm_sensors`" ] || [ "`use pcmcia-cs`" ] + then + mkdir ${S}/extras + fi + if [ "`use lvm`" ] + then + #create and apply LVM patch. The tools get built later. + cd ${S}/extras + echo "Unpacking and applying LVM patch..." + unpack lvm_${LVMVARC}.tar.gz + try cd LVM/${LVMV} + + # I had to hack this in so that LVM will look in the current linux + # source directory instead of /usr/src/linux for stuff - pete + try CFLAGS=\""${CFLAGS} -I${S}/include"\" ./configure --prefix=/ --mandir=/usr/share/man --with-kernel_dir="${S}" + cd PATCHES + try make KERNEL_VERSION=${KV} KERNEL_DIR=${S} + cd ${S} + # the -l option allows this patch to apply cleanly (ignore whitespace changes) + try patch -l -p1 < ${S}/extras/LVM/${LVMV}/PATCHES/lvm-${LVMV}-${KV}.patch + cd ${S}/drivers/md + try patch -p0 < ${FILESDIR}/${KV}/lvm.c.diff + fi + + if [ "`use alsa`" ] + then + #unpack alsa drivers + echo "Unpacking ALSA drivers..." + cd ${S}/extras + unpack alsa-driver-${AV}.tar.bz2 + fi + + if [ "`use lm_sensors`" ] + then + #unpack and apply the lm_sensors patch + echo "Unpacking and applying lm_sensors patch..." + cd ${S}/extras + unpack lm_sensors-${SENV}.tar.gz + try cd lm_sensors-${SENV} + try mkpatch/mkpatch.pl . ${S} > ${S}/lm_sensors-patch + try rmdir src + try ln -s ../.. src + try cp -a Makefile Makefile.orig + + cd ${S} + try patch -p1 < lm_sensors-patch + fi + if [ "`use pcmcia-cs`" ] + then + echo "Unpacking pcmcia-cs tools..." + cd ${S}/extras + unpack pcmcia-cs-${PCV}.tar.gz + patch -p0 < ${FILESDIR}/${KV}/pcmcia-cs-${PCV}-gentoo.diff + fi + + if [ "`use jfs`" ] + then + echo "Applying JFS patch..." + cd ${WORKDIR} + unpack jfs-${JFSV}-patch.tar.gz + cd ${S} + patch -p1 < ${WORKDIR}/jfs-common-v1.0.0-patch + patch -p1 < ${WORKDIR}/jfs-2.4.5-v1.0.0-patch + fi + #get sources ready for compilation or for sitting at /usr/src/linux + echo "Preparing for compilation..." + cd ${S} + #sometimes we have icky kernel symbols; this seems to get rid of them + try make mrproper + + #linux-sources needs to be fully configured, too. Not just linux + if [ "${PN}" != "linux-extras" ] + then + #this is the configuration for the default kernel + try cp ${FILESDIR}/${KV}/config.bootcomp .config + try yes \"\" \| make oldconfig + echo "Ignore any errors from the yes command above." + fi + + #fix silly permissions in tarball + cd ${WORKDIR} + chown -R 0.0 ${S} + chmod -R a+r-w+X,u+w ${S} + + fi +} + +src_compile() { + + if [ "${PN}" != "linux-sources" ] + then + if [ $PN = "linux-extras" ] + then + KS=/usr/src/linux + else + KS=${S} + fi + if [ $PN = "linux" ] + then + try make symlinks + fi + if [ "`use lvm`" ] + then + #LVM tools are included in the linux and linux-extras pakcages + cd ${KS}/extras/LVM/${LVMV} + + # This is needed for linux-extras + if [ -f "Makefile" ] + then + try make clean + fi + # I had to hack this in so that LVM will look in the current linux + # source directory instead of /usr/src/linux for stuff - pete + try CFLAGS=\""${CFLAGS} -I${KS}/include"\" ./configure --prefix=/ --mandir=/usr/share/man --with-kernel_dir="${KS}" + try make + fi + + if [ "`use lm_sensors`" ] + then + cd ${KS}/extras/lm_sensors-${SENV} + try sed -e \"s:^LINUX=.*:LINUX=src:\" \ + -e \"s/^COMPILE_KERNEL.*/COMPILE_KERNEL := 0/\" \ + -e \"s:^I2C_HEADERS.*:I2C_HEADERS=src/include:\" \ + -e \"s#^DESTDIR.*#DESTDIR := ${D}#\" \ + -e \"s#^PREFIX.*#PREFIX := /usr#\" \ + -e \"s#^MANDIR.*#MANDIR := /usr/share/man#\" \ + Makefile.orig > Makefile + + try make + fi + + cd ${S} + + if [ "`use jfs`" ] + then + cd ${S}/fs/jfs/utils + try make + cd output + into / + dosbin * + doman `find -iname *.8` + fi + + if [ "$PN" == "linux" ] + then + try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" dep + try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" bzImage + #LEX=\""flex -l"\" bzImage + try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" modules + #LEX=\""flex -l"\" modules + fi + + # This must come after the kernel compilation in linux + if [ "`use alsa`" ] + then + cd ${KS}/extras/alsa-driver-${AV} + # This is needed for linux-extras + if [ -f "Makefile.conf" ] + then + try make clean + fi + try ./configure --with-kernel=\"${KS}\" --with-isapnp=yes --with-sequencer=yes --with-oss=yes --with-cards=all + try make + fi + if [ "`use pcmcia-cs`" ] + then + cd ${KS}/extras/pcmcia-cs-${PCV} + # This is needed for linux-extras + if [ -f "Makefile" ] + then + try make clean + fi + try ./Configure -n --kernel=${KS} --moddir=/lib/modules/${KV} \ + --notrust --cardbus --nopnp --noapm --srctree --sysv --rcdir=/etc/rc.d/ + try make all + fi + else + #linux-sources + try make HOSTCFLAGS=\""${LINUX_HOSTCFLAGS}"\" dep + fi +} + +src_install() { + + if [ $PN = "linux-extras" ] ; then + KS=/usr/src/linux + else + KS=${S} + fi + # We install the alsa headers in all three packages + if [ "`use alsa`" ] + then + #i get alsa includes + cd ${KS}/extras/alsa-driver-${AV} + insinto /usr/src/linux-${KV}/include/linux + cd include + doins asound.h asoundid.h asequencer.h ainstr_*.h + fi + + if [ ! "${PN}" = "linux-sources" ] + then + if [ $PN = "linux" ] + then + KS=${S} + else + KS=/usr/src/linux + fi + dodir /usr/lib + + if [ "`use lvm`" ] + then + cd ${KS}/extras/LVM/${LVMV}/tools + + try CFLAGS=\""${CFLAGS} -I${KS}/include"\" make install -e prefix=${D} mandir=${D}/usr/share/man \ + sbindir=${D}/sbin libdir=${D}/lib + #no need for a static library in /lib + mv ${D}/lib/*.a ${D}/usr/lib + fi + + if [ "`use lm_sensors`" ] + then + echo "Install sensor tools..." + #install sensors tools + cd ${KS}/extras/lm_sensors-${SENV} + make install + fi + if [ "${PN}" = "linux" ] + then + dodir /usr/src + dodir /usr/src/linux-${KV} + cd ${D}/usr/src + #grab includes and documentation only + echo ">>> Copying includes and documentation..." + cp -ax ${S}/include ${D}/usr/src/linux-${KV} + cp -ax ${S}/Documentation ${D}/usr/src/linux-${KV} + + #grab compiled kernel + dodir /boot/boot + insinto /boot/boot + cd ${S} + doins arch/i386/boot/bzImage + + #grab modules + # Do we have a bug in modutils ? + # Meanwhile we use this quick fix (achim) + + install -d ${D}/lib/modules/`uname -r` + try make INSTALL_MOD_PATH=${D} modules_install + + depmod -b ${D} -F ${S}/System.map ${KV} + #rm -rf ${D}/lib/modules/`uname -r` + #fix symlink + cd ${D}/lib/modules/${KV} + rm build + ln -sf /usr/src/linux-${KV} build + fi + + if [ "`use alsa`" ] + then + #install ALSA modules + cd ${KS}/extras/alsa-driver-${AV} + dodoc INSTALL FAQ + dodir /lib/modules/${KV}/misc + cp modules/*.o ${D}/lib/modules/${KV}/misc + fi + if [ "`use pcmcia-cs`" ] + then + #install PCMCIA modules and utilities + cd ${KS}/extras/pcmcia-cs-${PCV} + try make PREFIX=${D} MANDIR=${D}/usr/share/man install + rm -rf ${D}/etc/rc.d + exeinto /etc/rc.d/init.d + doexe ${FILESDIR}/${KV}/pcmcia + fi + else + dodir /usr/src + cd ${S} + #make mrproper + + if [ "`use build`" ] ; then + dodir /usr/src/linux-${KV} + #grab includes and documentation only + echo ">>> Copying includes..." + cp -ax ${S}/include ${D}/usr/src/linux-${KV} + else + echo ">>> Copying sources..." + cp -ax ${S} ${D}/usr/src + fi + fi + if [ "$PN" != "linux-extras" ] + then + #don't overwrite existing .config if present + cd ${D}/usr/src/linux-${KV} + if [ -e .config ] + then + cp -a .config .config.eg + fi + fi +} + +pkg_postinst() { + rm -f ${ROOT}/usr/src/linux + ln -sf linux-${KV} ${ROOT}/usr/src/linux + + #copy over our .config if one isn't already present + cd ${ROOT}/usr/src/linux-${KV} + if [ "${PN}" = "linux-sources" ] && [ -e .config.eg ] && [ ! -e .config ] + then + cp -a .config.eg .config + fi +} |