From: Neil Brown <neilb@cse.unsw.edu.au>

This way it is more balanced: if it puts a group_info, it also gets one. 
Thus don't need to conditionally put_group_info after the call.

Also fix a missing '{' in compat_linux.c



---

 25-akpm/arch/ia64/ia32/sys_ia32.c         |    3 +--
 25-akpm/arch/s390/kernel/compat_linux.c   |    5 ++---
 25-akpm/arch/sparc64/kernel/sys_sparc32.c |    3 +--
 25-akpm/fs/nfsd/auth.c                    |    4 ++--
 25-akpm/kernel/sys.c                      |    4 ++--
 25-akpm/kernel/uid16.c                    |    3 +--
 6 files changed, 9 insertions(+), 13 deletions(-)

diff -puN arch/ia64/ia32/sys_ia32.c~increase-NGROUPS-cleanup-and-fix arch/ia64/ia32/sys_ia32.c
--- 25/arch/ia64/ia32/sys_ia32.c~increase-NGROUPS-cleanup-and-fix	Thu Feb  5 16:09:07 2004
+++ 25-akpm/arch/ia64/ia32/sys_ia32.c	Thu Feb  5 16:09:07 2004
@@ -2489,8 +2489,7 @@ sys32_setgroups16 (int gidsetsize, short
 	}
 
 	retval = set_current_groups(group_info);
-	if (retval)
-		put_group_info(group_info);
+	put_group_info(group_info);
 
 	return retval;
 }
diff -puN arch/s390/kernel/compat_linux.c~increase-NGROUPS-cleanup-and-fix arch/s390/kernel/compat_linux.c
--- 25/arch/s390/kernel/compat_linux.c~increase-NGROUPS-cleanup-and-fix	Thu Feb  5 16:09:07 2004
+++ 25-akpm/arch/s390/kernel/compat_linux.c	Thu Feb  5 16:09:07 2004
@@ -232,7 +232,7 @@ asmlinkage long sys32_getgroups16(int gi
 			i = -EINVAL;
 			goto out;
 		}
-		if (groups16_to_user(grouplist, current->group_info))
+		if (groups16_to_user(grouplist, current->group_info)) {
 			i = -EFAULT;
 			goto out;
 		}
@@ -262,8 +262,7 @@ asmlinkage long sys32_setgroups16(int gi
 	}
 
 	retval = set_current_groups(group_info);
-	if (retval)
-		put_group_info(group_info);
+	put_group_info(group_info);
 
 	return retval;
 }
diff -puN arch/sparc64/kernel/sys_sparc32.c~increase-NGROUPS-cleanup-and-fix arch/sparc64/kernel/sys_sparc32.c
--- 25/arch/sparc64/kernel/sys_sparc32.c~increase-NGROUPS-cleanup-and-fix	Thu Feb  5 16:09:07 2004
+++ 25-akpm/arch/sparc64/kernel/sys_sparc32.c	Thu Feb  5 16:09:07 2004
@@ -251,8 +251,7 @@ asmlinkage long sys32_setgroups16(int gi
 	}
 
 	retval = set_current_groups(group_info);
-	if (retval)
-		put_group_info(group_info);
+	put_group_info(group_info);
 
 	return retval;
 }
diff -puN fs/nfsd/auth.c~increase-NGROUPS-cleanup-and-fix fs/nfsd/auth.c
--- 25/fs/nfsd/auth.c~increase-NGROUPS-cleanup-and-fix	Thu Feb  5 16:09:07 2004
+++ 25-akpm/fs/nfsd/auth.c	Thu Feb  5 16:09:07 2004
@@ -70,8 +70,8 @@ int nfsd_setuser(struct svc_rqst *rqstp,
 			cap_t(current->cap_effective) |= (CAP_NFSD_MASK &
 							current->cap_permitted);
 		}
-	} else {
-		put_group_info(group_info);
 	}
+	put_group_info(group_info);
+
 	return ret;
 }
diff -puN kernel/sys.c~increase-NGROUPS-cleanup-and-fix kernel/sys.c
--- 25/kernel/sys.c~increase-NGROUPS-cleanup-and-fix	Thu Feb  5 16:09:07 2004
+++ 25-akpm/kernel/sys.c	Thu Feb  5 16:09:07 2004
@@ -1247,6 +1247,7 @@ int set_current_groups(struct group_info
 		return retval;
 
 	groups_sort(group_info);
+	get_group_info(group_info);
 	old_info = current->group_info;
 	current->group_info = group_info;
 	put_group_info(old_info);
@@ -1310,8 +1311,7 @@ asmlinkage long sys_setgroups(int gidset
 	}
 
 	retval = set_current_groups(group_info);
-	if (retval)
-		put_group_info(group_info);
+	put_group_info(group_info);
 
 	return retval;
 }
diff -puN kernel/uid16.c~increase-NGROUPS-cleanup-and-fix kernel/uid16.c
--- 25/kernel/uid16.c~increase-NGROUPS-cleanup-and-fix	Thu Feb  5 16:09:07 2004
+++ 25-akpm/kernel/uid16.c	Thu Feb  5 16:09:07 2004
@@ -181,8 +181,7 @@ asmlinkage long sys_setgroups16(int gids
 	}
 
 	retval = set_current_groups(group_info);
-	if (retval)
-		put_group_info(group_info);
+	put_group_info(group_info);
 
 	return retval;
 }

_