Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F115884755
D30257.id89174.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D30257.id89174.diff
View Options
diff --git a/sys/kern/kern_acct.c b/sys/kern/kern_acct.c
--- a/sys/kern/kern_acct.c
+++ b/sys/kern/kern_acct.c
@@ -141,7 +141,6 @@
static int acct_suspended;
static struct vnode *acct_vp;
static struct ucred *acct_cred;
-static struct plimit *acct_limit;
static int acct_flags;
static struct sx acct_sx;
@@ -206,7 +205,7 @@
sys_acct(struct thread *td, struct acct_args *uap)
{
struct nameidata nd;
- int error, flags, i, replacing;
+ int error, flags, replacing;
error = priv_check(td, PRIV_ACCT);
if (error)
@@ -276,15 +275,6 @@
return (error);
}
- /*
- * Create our own plimit object without limits. It will be assigned
- * to exiting processes.
- */
- acct_limit = lim_alloc();
- for (i = 0; i < RLIM_NLIMITS; i++)
- acct_limit->pl_rlimit[i].rlim_cur =
- acct_limit->pl_rlimit[i].rlim_max = RLIM_INFINITY;
-
/*
* Save the new accounting file vnode, and schedule the new
* free space watcher.
@@ -328,7 +318,6 @@
sx_assert(&acct_sx, SX_XLOCKED);
error = vn_close(acct_vp, acct_flags, acct_cred, td);
crfree(acct_cred);
- lim_free(acct_limit);
acct_configured = 0;
acct_vp = NULL;
acct_cred = NULL;
@@ -349,7 +338,6 @@
{
struct acctv3 acct;
struct timeval ut, st, tmp;
- struct plimit *oldlim;
struct proc *p;
struct rusage ru;
int t, ret;
@@ -374,6 +362,7 @@
}
p = td->td_proc;
+ td->td_pflags2 |= TDP2_ACCT;
/*
* Get process accounting information.
@@ -426,20 +415,14 @@
/* (8) The boolean flags that tell how the process terminated, etc. */
acct.ac_flagx = p->p_acflag;
+ PROC_UNLOCK(p);
+
/* Setup ancillary structure fields. */
acct.ac_flagx |= ANVER;
acct.ac_zero = 0;
acct.ac_version = 3;
acct.ac_len = acct.ac_len2 = sizeof(acct);
- /*
- * Eliminate rlimits (file size limit in particular).
- */
- oldlim = p->p_limit;
- p->p_limit = lim_hold(acct_limit);
- PROC_UNLOCK(p);
- lim_free(oldlim);
-
/*
* Write the accounting information to the file.
*/
@@ -447,6 +430,7 @@
(off_t)0, UIO_SYSSPACE, IO_APPEND|IO_UNIT, acct_cred, NOCRED,
NULL, td);
sx_sunlock(&acct_sx);
+ td->td_pflags2 &= ~TDP2_ACCT;
return (ret);
}
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -2353,7 +2353,8 @@
struct thread *td)
{
- if (vp->v_type != VREG || td == NULL)
+ if (vp->v_type != VREG || td == NULL ||
+ (td->td_pflags2 & TDP2_ACCT) != 0)
return (0);
if ((uoff_t)uio->uio_offset + uio->uio_resid >
lim_cur(td, RLIMIT_FSIZE)) {
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -528,6 +528,7 @@
#define TDP2_SBPAGES 0x00000001 /* Owns sbusy on some pages */
#define TDP2_COMPAT32RB 0x00000002 /* compat32 ABI for robust lists */
+#define TDP2_ACCT 0x00000004 /* Doing accounting */
/*
* Reasons that the current thread can not be run yet.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, May 1, 12:10 AM (20 h, 20 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17867895
Default Alt Text
D30257.id89174.diff (2 KB)
Attached To
Mode
D30257: accounting: explicitly mark the exiting thread as doing accounting or ktrace record writing
Attached
Detach File
Event Timeline
Log In to Comment