{
cred_t *tmp;
-#if !defined(GFP_NOFS)
-#define GFP_NOFS GFP_KERNEL
-#endif
tmp = kmalloc(sizeof(cred_t), GFP_NOFS);
memset(tmp, 0, sizeof(cred_t));
if (!tmp)
#if defined(STRUCT_TASK_HAS_CRED)
get_cred(tmp);
#else
- tmp->cr_ref = 1;
+ atomic_set(&tmp->cr_ref, 1);
#endif
return tmp;
}
#if defined(STRUCT_TASK_HAS_CRED)
put_cred(cr);
#else
- if (cr->cr_ref > 1) {
- cr->cr_ref--;
- return;
+ if (atomic_dec_and_test(&cr->cr_ref)) {
+ put_group_info(afs_cr_group_info(cr));
+ kfree(cr);
}
- put_group_info(afs_cr_group_info(cr));
- kfree(cr);
#endif
}