DEVEL15-linux-2629-20090115

LICENSE IPL10
FIXES 124115

add 2.6.29 support


(cherry picked from commit 24a5d12bae9a2af393f3641055893824c71a4712)
This commit is contained in:
Marc Dionne 2009-01-15 13:27:27 +00:00 committed by Derrick Brashear
parent 375c6e1d4d
commit 1f41be5168
9 changed files with 199 additions and 113 deletions

View File

@ -857,6 +857,8 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
LINUX_HAVE_WRITE_BEGIN_AOP
LINUX_HAVE_BDI_INIT
LINUX_KMEM_CACHE_INIT
LINUX_HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN
LINUX_STRUCT_TASK_HAS_CRED
LINUX_HAVE_KMEM_CACHE_T
LINUX_KMEM_CACHE_CREATE_TAKES_DTOR
LINUX_D_PATH_TAKES_STRUCT_PATH

View File

@ -79,15 +79,15 @@ crref(void)
{
cred_t *cr = crget();
cr->cr_uid = current->fsuid;
cr->cr_ruid = current->uid;
cr->cr_gid = current->fsgid;
cr->cr_rgid = current->gid;
cr->cr_uid = current_fsuid();
cr->cr_ruid = current_uid();
cr->cr_gid = current_fsgid();
cr->cr_rgid = current_gid();
#if defined(AFS_LINUX26_ENV)
task_lock(current);
get_group_info(current->group_info);
cr->cr_group_info = current->group_info;
get_group_info(current_group_info());
cr->cr_group_info = current_group_info();
task_unlock(current);
#else
memcpy(cr->cr_groups, current->groups, NGROUPS * sizeof(gid_t));
@ -101,10 +101,20 @@ crref(void)
void
crset(cred_t * cr)
{
#if defined(STRUCT_TASK_HAS_CRED)
struct cred *new_creds;
new_creds = prepare_creds();
new_creds->fsuid = cr->cr_uid;
new_creds->uid = cr->cr_ruid;
new_creds->fsgid = cr->cr_gid;
new_creds->gid = cr->cr_rgid;
#else
current->fsuid = cr->cr_uid;
current->uid = cr->cr_ruid;
current->fsgid = cr->cr_gid;
current->gid = cr->cr_rgid;
#endif
#if defined(AFS_LINUX26_ENV)
{
struct group_info *old_info;
@ -113,8 +123,14 @@ crset(cred_t * cr)
get_group_info(cr->cr_group_info);
task_lock(current);
#if defined(STRUCT_TASK_HAS_CRED)
old_info = current->cred->group_info;
new_creds->group_info = cr->cr_group_info;
commit_creds(new_creds);
#else
old_info = current->group_info;
current->group_info = cr->cr_group_info;
#endif
task_unlock(current);
put_group_info(old_info);

View File

@ -87,7 +87,11 @@ osi_UFSOpen(afs_int32 ainode)
#endif
tip->i_flags |= MS_NOATIME; /* Disable updating access times. */
#if defined(STRUCT_TASK_HAS_CRED)
filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred());
#else
filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR);
#endif
if (IS_ERR(filp))
#if defined(LINUX_USE_FH)
osi_Panic("Can't open file\n");

View File

@ -51,7 +51,7 @@ afs_setgroups(cred_t **cr, struct group_info *group_info, int change_parent)
crset(*cr);
#ifdef STRUCT_TASK_STRUCT_HAS_PARENT
#if defined(STRUCT_TASK_STRUCT_HAS_PARENT) && !defined(STRUCT_TASK_HAS_CRED)
if (change_parent) {
old_info = current->parent->group_info;
get_group_info(group_info);
@ -247,12 +247,12 @@ install_session_keyring(struct task_struct *task, struct key *keyring)
#ifdef KEY_ALLOC_NEEDS_STRUCT_TASK
keyring = key_alloc(__key_type_keyring, desc,
task->uid, task->gid, task,
task_uid(task), task_gid(task), task,
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL,
not_in_quota);
#else
keyring = key_alloc(__key_type_keyring, desc,
task->uid, task->gid,
task_uid(task), task_gid(task),
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_ALL,
not_in_quota);
#endif
@ -270,9 +270,9 @@ install_session_keyring(struct task_struct *task, struct key *keyring)
/* install the keyring */
spin_lock_irq(&task->sighand->siglock);
old = task->signal->session_keyring;
old = task_session_keyring(task);
smp_wmb();
task->signal->session_keyring = keyring;
task_session_keyring(task) = keyring;
spin_unlock_irq(&task->sighand->siglock);
if (old)
@ -337,7 +337,7 @@ setpag(cred_t **cr, afs_uint32 pagvalue, afs_uint32 *newpag,
if (code == 0 && (*cr)->cr_rgid != NFSXLATOR_CRED) {
(void) install_session_keyring(current, NULL);
if (current->signal->session_keyring) {
if (current_session_keyring()) {
struct key *key;
key_perm_t perm;
@ -352,7 +352,7 @@ setpag(cred_t **cr, afs_uint32 pagvalue, afs_uint32 *newpag,
if (!IS_ERR(key)) {
key_instantiate_and_link(key, (void *) newpag, sizeof(afs_uint32),
current->signal->session_keyring, NULL);
current_session_keyring(), NULL);
key_put(key);
}
}
@ -549,26 +549,28 @@ static int afs_pag_instantiate(struct key *key, const void *data, size_t datalen
{
int code;
afs_uint32 *userpag, pag = NOPAG;
#ifndef AFS_LINUX26_ONEGROUP_ENV
int g0, g1;
#endif
if (key->uid != 0 || key->gid != 0)
return -EPERM;
code = -EINVAL;
get_group_info(current->group_info);
get_group_info(current_group_info());
if (datalen != sizeof(afs_uint32) || !data)
goto error;
if (current->group_info->ngroups < NUMPAGGROUPS)
if (current_group_info()->ngroups < NUMPAGGROUPS)
goto error;
/* ensure key being set matches current pag */
#ifdef AFS_LINUX26_ONEGROUP_ENV
pag = afs_get_pag_from_groups(current->group_info);
pag = afs_get_pag_from_groups(current_group_info());
#else
g0 = GROUP_AT(current->group_info, 0);
g1 = GROUP_AT(current->group_info, 1);
g0 = GROUP_AT(current_group_info(), 0);
g1 = GROUP_AT(current_group_info(), 1);
pag = afs_get_pag_from_groups(g0, g1);
#endif
@ -584,7 +586,7 @@ static int afs_pag_instantiate(struct key *key, const void *data, size_t datalen
code = 0;
error:
put_group_info(current->group_info);
put_group_info(current_group_info());
return code;
}
@ -651,8 +653,8 @@ void osi_keyring_init(void)
#else
p = find_task_by_vpid(1);
#endif
if (p && p->user->session_keyring)
__key_type_keyring = p->user->session_keyring->type;
if (p && task_user(p)->session_keyring)
__key_type_keyring = task_user(p)->session_keyring->type;
# ifdef EXPORTED_TASKLIST_LOCK
if (&tasklist_lock)
read_unlock(&tasklist_lock);

View File

@ -155,7 +155,7 @@ static inline long copyinstr(char *from, char *to, int count, int *length) {
#endif
/* cred struct */
typedef struct cred { /* maps to task field: */
typedef struct afs_cred { /* maps to task field: */
int cr_ref;
uid_t cr_uid; /* euid */
uid_t cr_ruid; /* uid */
@ -167,10 +167,34 @@ typedef struct cred { /* maps to task field: */
gid_t cr_groups[NGROUPS]; /* 32 groups - empty set to NOGROUP */
int cr_ngroups;
#endif
struct cred *cr_next;
struct afs_cred *cr_next;
} cred_t;
#define AFS_UCRED cred
#define AFS_UCRED afs_cred
#define AFS_PROC struct task_struct
#if !defined(current_cred)
#define current_gid() (current->gid)
#define current_uid() (current->uid)
#define current_fsgid() (current->fsgid)
#define current_fsuid() (current->fsuid)
#endif
#if defined(STRUCT_TASK_HAS_CRED)
#define current_group_info() (current->cred->group_info)
#define task_gid(task) (task->cred->gid)
#define task_user(task) (task->cred->user)
#define task_session_keyring(task) (task->cred->tgcred->session_keyring)
#define current_session_keyring() (current->cred->tgcred->session_keyring)
#else
#define current_group_info() (current->group_info)
#if !defined(task_gid)
#define task_gid(task) (task->gid)
#endif
#if !defined(task_uid)
#define task_uid(task) (task->uid)
#endif
#define task_user(task) (task->user)
#define task_session_keyring(task) (task->signal->session_keyring)
#define current_session_keyring() (current->signal->session_keyring)
#endif
#define crhold(c) (c)->cr_ref++
/* UIO manipulation */

View File

@ -2128,7 +2128,11 @@ afs_linux_write_begin(struct file *file, struct address_space *mapping,
{
struct page *page;
pgoff_t index = pos >> PAGE_CACHE_SHIFT;
#if defined(HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN)
page = grab_cache_page_write_begin(mapping, index, flags);
#else
page = __grab_cache_page(mapping, index);
#endif
*pagep = page;
return 0;

View File

@ -378,8 +378,8 @@ void
afs_nfs2_getattr(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_GETATTR, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -393,8 +393,8 @@ void
afs_nfs2_setattr(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_SETATTR, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -408,8 +408,8 @@ void
afs_nfs2_lookup(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_LOOKUP, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -426,8 +426,8 @@ void
afs_nfs2_readlink(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_READLINK, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -441,8 +441,8 @@ void
afs_nfs2_read(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_READ, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -456,8 +456,8 @@ void
afs_nfs2_write(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_WRITE, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -471,8 +471,8 @@ void
afs_nfs2_create(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_CREATE, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -489,8 +489,8 @@ void
afs_nfs2_remove(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_REMOVE, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -504,8 +504,8 @@ void
afs_nfs2_rename(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_RENAME, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -519,8 +519,8 @@ void
afs_nfs2_link(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_LINK, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -534,8 +534,8 @@ void
afs_nfs2_symlink(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_SYMLINK, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -549,8 +549,8 @@ void
afs_nfs2_mkdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_MKDIR, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -567,8 +567,8 @@ void
afs_nfs2_rmdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_RMDIR, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -582,8 +582,8 @@ void
afs_nfs2_readdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_READDIR, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -597,8 +597,8 @@ void
afs_nfs2_statfs(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs2_dispatcher(0, RFS_STATFS, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs2_noaccess((struct afs_nfs2_resp *)xp);
@ -633,8 +633,8 @@ void
afs_acl2_getacl(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs2_dispatcher(1, ACLPROC2_GETACL, (char *)args, &exp, rp, crp);
if (call > 1)
@ -650,8 +650,8 @@ void
afs_acl2_setacl(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs2_dispatcher(1, ACLPROC2_SETACL, (char *)args, &exp, rp, crp);
if (call > 1)
@ -667,8 +667,8 @@ void
afs_acl2_getattr(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs2_dispatcher(1, ACLPROC2_GETATTR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -684,8 +684,8 @@ void
afs_acl2_access(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs2_dispatcher(1, ACLPROC2_ACCESS, (char *)args, &exp, rp, crp);
if (call > 1)
@ -702,8 +702,8 @@ void
afs_acl2_getxattrdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs2_dispatcher(1, ACLPROC2_GETXATTRDIR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1140,8 +1140,8 @@ afs_nfs3_getattr(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_GETATTR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1158,8 +1158,8 @@ afs_nfs3_setattr(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_SETATTR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1176,8 +1176,8 @@ afs_nfs3_lookup(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_LOOKUP, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1199,8 +1199,8 @@ afs_nfs3_access(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_ACCESS, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1217,8 +1217,8 @@ afs_nfs3_readlink(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_READLINK, (char *)args, &exp, rp,
crp);
@ -1236,8 +1236,8 @@ afs_nfs3_read(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs3_dispatcher(0, NFSPROC3_READ, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs3_noaccess((struct afs_nfs3_resp *)xp);
@ -1253,8 +1253,8 @@ afs_nfs3_write(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_WRITE, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1271,8 +1271,8 @@ afs_nfs3_create(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_CREATE, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1294,8 +1294,8 @@ afs_nfs3_mkdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_MKDIR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1317,8 +1317,8 @@ afs_nfs3_symlink(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_SYMLINK, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1340,8 +1340,8 @@ afs_nfs3_mknod(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_MKNOD, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1363,8 +1363,8 @@ afs_nfs3_remove(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_REMOVE, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1381,8 +1381,8 @@ afs_nfs3_rmdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_RMDIR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1399,8 +1399,8 @@ afs_nfs3_rename(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_RENAME, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1417,8 +1417,8 @@ afs_nfs3_link(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call = afs_nfs3_dispatcher(0, NFSPROC3_LINK, (char *)args, &exp, rp, crp);
if (call > 1)
afs_nfs3_noaccess((struct afs_nfs3_resp *)xp);
@ -1434,8 +1434,8 @@ afs_nfs3_readdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_READDIR, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1452,8 +1452,8 @@ afs_nfs3_readdirplus(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_READDIRPLUS, (char *)args, &exp, rp,
crp);
@ -1473,8 +1473,8 @@ afs_nfs3_fsstat(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_FSSTAT, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1491,8 +1491,8 @@ afs_nfs3_fsinfo(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_FSINFO, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1509,8 +1509,8 @@ afs_nfs3_pathconf(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_PATHCONF, (char *)args, &exp, rp,
crp);
@ -1528,8 +1528,8 @@ afs_nfs3_commit(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
afs_nfs3_resp dummy;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(0, NFSPROC3_COMMIT, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1570,8 +1570,8 @@ void
afs_acl3_getacl(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(1, ACLPROC3_GETACL, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1587,8 +1587,8 @@ void
afs_acl3_setacl(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(1, ACLPROC3_SETACL, (char *)args, &exp, rp, crp);
if (call > 1)
@ -1605,8 +1605,8 @@ void
afs_acl3_getxattrdir(char *args, char *xp, char *exp, char *rp, char *crp)
{
u_int call;
struct cred *svcred = curthread->t_cred;
curthread->t_cred = (struct cred *)crp;
struct AFS_UCRED *svcred = curthread->t_cred;
curthread->t_cred = (struct AFS_UCRED *)crp;
call =
afs_nfs3_dispatcher(1, ACLPROC3_GETXATTRDIR, (char *)args, &exp, rp, crp);
if (call > 1)

View File

@ -513,10 +513,15 @@ afs_osi_proc2cred(AFS_PROC * pr)
|| (pr->state == TASK_UNINTERRUPTIBLE)
|| (pr->state == TASK_STOPPED)) {
cr.cr_ref = 1;
cr.cr_uid = pr->uid;
cr.cr_uid = task_uid(pr);
#if defined(AFS_LINUX26_ENV)
#if defined(STRUCT_TASK_HAS_CRED)
get_group_info(pr->cred->group_info);
cr.cr_group_info = pr->cred->group_info;
#else
get_group_info(pr->group_info);
cr.cr_group_info = pr->group_info;
#endif
#else
cr.cr_ngroups = pr->ngroups;
memcpy(cr.cr_groups, pr->groups, NGROUPS * sizeof(gid_t));

View File

@ -1133,3 +1133,32 @@ AC_DEFUN([LINUX_HAVE_WRITE_BEGIN_AOP], [
if test "x$ac_cv_linux_write_begin" = "xyes"; then
AC_DEFINE([HAVE_WRITE_BEGIN], 1, [define if your kernel has a write_begin() address space op])
fi])
AC_DEFUN([LINUX_HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN], [
AC_MSG_CHECKING([for linux grab_cache_page_write_begin()])
AC_CACHE_VAL([ac_cv_linux_grab_cache_page_write_begin], [
AC_TRY_KBUILD(
[#include <linux/pagemap.h>],
[grab_cache_page_write_begin(NULL, 0, 0);],
ac_cv_linux_grab_cache_page_write_begin=yes,
ac_cv_linux_grab_cache_page_write_begin=no)])
AC_MSG_RESULT($ac_cv_linux_grab_cache_page_write_begin)
if test "x$ac_cv_linux_grab_cache_page_write_begin" = "xyes"; then
AC_DEFINE([HAVE_GRAB_CACHE_PAGE_WRITE_BEGIN], 1, [define if your kernel has grab_cache_page_write_begin()])
fi])
AC_DEFUN([LINUX_STRUCT_TASK_HAS_CRED], [
AC_MSG_CHECKING([if struct task has cred])
AC_CACHE_VAL([ac_cv_linux_struct_task_has_cred], [
AC_TRY_KBUILD(
[#include <linux/sched.h>
#include <linux/cred.h>],
[struct task_struct _t;
uid_t _u;
_u =_t.cred->uid ;],
ac_cv_linux_struct_task_has_cred=yes,
ac_cv_linux_struct_task_has_cred=no)])
AC_MSG_RESULT($ac_cv_linux_struct_task_has_cred)
if test "x$ac_cv_linux_struct_task_has_cred" = "xyes"; then
AC_DEFINE([STRUCT_TASK_HAS_CRED], 1, [define if struct task has a cred pointer])
fi])