vserver 1.9.5.x5
[linux-2.6.git] / arch / sparc64 / solaris / fs.c
index a237c68..d7c99fa 100644 (file)
@@ -600,23 +600,23 @@ asmlinkage int solaris_ulimit(int cmd, int val)
 {
        switch (cmd) {
        case 1: /* UL_GETFSIZE - in 512B chunks */
-               return current->rlim[RLIMIT_FSIZE].rlim_cur >> 9;
+               return current->signal->rlim[RLIMIT_FSIZE].rlim_cur >> 9;
        case 2: /* UL_SETFSIZE */
                if ((unsigned long)val > (LONG_MAX>>9)) return -ERANGE;
                val <<= 9;
-               lock_kernel();
-               if (val > current->rlim[RLIMIT_FSIZE].rlim_max) {
+               task_lock(current->group_leader);
+               if (val > current->signal->rlim[RLIMIT_FSIZE].rlim_max) {
                        if (!capable(CAP_SYS_RESOURCE)) {
-                               unlock_kernel();
+                               task_unlock(current->group_leader);
                                return -EPERM;
                        }
-                       current->rlim[RLIMIT_FSIZE].rlim_max = val;
+                       current->signal->rlim[RLIMIT_FSIZE].rlim_max = val;
                }
-               current->rlim[RLIMIT_FSIZE].rlim_cur = val;
-               unlock_kernel();
+               current->signal->rlim[RLIMIT_FSIZE].rlim_cur = val;
+               task_unlock(current->group_leader);
                return 0;
        case 3: /* UL_GMEMLIM */
-               return current->rlim[RLIMIT_DATA].rlim_cur;
+               return current->signal->rlim[RLIMIT_DATA].rlim_cur;
        case 4: /* UL_GDESLIM */
                return NR_OPEN;
        }