Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
cdd37e23
Commit
cdd37e23
authored
Apr 26, 2014
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
separate namespace-independent parts of filling acct_t
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
ed44724b
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
47 deletions
+51
-47
kernel/acct.c
kernel/acct.c
+51
-47
No files found.
kernel/acct.c
View file @
cdd37e23
...
...
@@ -448,42 +448,20 @@ static u32 encode_float(u64 value)
* do_exit() or when switching to a different output file.
*/
/*
* do_acct_process does all actual work. Caller holds the reference to file.
*/
static
void
do_acct_process
(
struct
bsd_acct_struct
*
acct
,
struct
pid_namespace
*
ns
,
struct
file
*
file
)
static
void
fill_ac
(
acct_t
*
ac
)
{
struct
pacct_struct
*
pacct
=
&
current
->
signal
->
pacct
;
acct_t
ac
;
unsigned
long
flim
;
u64
elapsed
,
run_time
;
struct
tty_struct
*
tty
;
const
struct
cred
*
orig_cred
;
/*
* Accounting records are not subject to resource limits.
*/
flim
=
current
->
signal
->
rlim
[
RLIMIT_FSIZE
].
rlim_cur
;
current
->
signal
->
rlim
[
RLIMIT_FSIZE
].
rlim_cur
=
RLIM_INFINITY
;
/* Perform file operations on behalf of whoever enabled accounting */
orig_cred
=
override_creds
(
file
->
f_cred
);
/*
* First check to see if there is enough free_space to continue
* the process accounting system.
*/
if
(
!
check_free_space
(
acct
,
file
))
goto
out
;
/*
* Fill the accounting struct with the needed info as recorded
* by the different kernel functions.
*/
memset
(
&
ac
,
0
,
sizeof
(
acct_t
));
memset
(
ac
,
0
,
sizeof
(
acct_t
));
ac
.
ac_version
=
ACCT_VERSION
|
ACCT_BYTEORDER
;
strlcpy
(
ac
.
ac_comm
,
current
->
comm
,
sizeof
(
ac
.
ac_comm
));
ac
->
ac_version
=
ACCT_VERSION
|
ACCT_BYTEORDER
;
strlcpy
(
ac
->
ac_comm
,
current
->
comm
,
sizeof
(
ac
->
ac_comm
));
/* calculate run_time in nsec*/
run_time
=
ktime_get_ns
();
...
...
@@ -491,27 +469,66 @@ static void do_acct_process(struct bsd_acct_struct *acct,
/* convert nsec -> AHZ */
elapsed
=
nsec_to_AHZ
(
run_time
);
#if ACCT_VERSION==3
ac
.
ac_etime
=
encode_float
(
elapsed
);
ac
->
ac_etime
=
encode_float
(
elapsed
);
#else
ac
.
ac_etime
=
encode_comp_t
(
elapsed
<
(
unsigned
long
)
-
1l
?
ac
->
ac_etime
=
encode_comp_t
(
elapsed
<
(
unsigned
long
)
-
1l
?
(
unsigned
long
)
elapsed
:
(
unsigned
long
)
-
1l
);
#endif
#if ACCT_VERSION==1 || ACCT_VERSION==2
{
/* new enlarged etime field */
comp2_t
etime
=
encode_comp2_t
(
elapsed
);
ac
.
ac_etime_hi
=
etime
>>
16
;
ac
.
ac_etime_lo
=
(
u16
)
etime
;
ac
->
ac_etime_hi
=
etime
>>
16
;
ac
->
ac_etime_lo
=
(
u16
)
etime
;
}
#endif
do_div
(
elapsed
,
AHZ
);
ac
.
ac_btime
=
get_seconds
()
-
elapsed
;
ac
->
ac_btime
=
get_seconds
()
-
elapsed
;
#if ACCT_VERSION==2
ac
->
ac_ahz
=
AHZ
;
#endif
spin_lock_irq
(
&
current
->
sighand
->
siglock
);
tty
=
current
->
signal
->
tty
;
/* Safe as we hold the siglock */
ac
->
ac_tty
=
tty
?
old_encode_dev
(
tty_devnum
(
tty
))
:
0
;
ac
->
ac_utime
=
encode_comp_t
(
jiffies_to_AHZ
(
cputime_to_jiffies
(
pacct
->
ac_utime
)));
ac
->
ac_stime
=
encode_comp_t
(
jiffies_to_AHZ
(
cputime_to_jiffies
(
pacct
->
ac_stime
)));
ac
->
ac_flag
=
pacct
->
ac_flag
;
ac
->
ac_mem
=
encode_comp_t
(
pacct
->
ac_mem
);
ac
->
ac_minflt
=
encode_comp_t
(
pacct
->
ac_minflt
);
ac
->
ac_majflt
=
encode_comp_t
(
pacct
->
ac_majflt
);
ac
->
ac_exitcode
=
pacct
->
ac_exitcode
;
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
}
/*
* do_acct_process does all actual work. Caller holds the reference to file.
*/
static
void
do_acct_process
(
struct
bsd_acct_struct
*
acct
,
struct
pid_namespace
*
ns
,
struct
file
*
file
)
{
acct_t
ac
;
unsigned
long
flim
;
const
struct
cred
*
orig_cred
;
/*
* Accounting records are not subject to resource limits.
*/
flim
=
current
->
signal
->
rlim
[
RLIMIT_FSIZE
].
rlim_cur
;
current
->
signal
->
rlim
[
RLIMIT_FSIZE
].
rlim_cur
=
RLIM_INFINITY
;
/* Perform file operations on behalf of whoever enabled accounting */
orig_cred
=
override_creds
(
file
->
f_cred
);
/*
* First check to see if there is enough free_space to continue
* the process accounting system.
*/
if
(
!
check_free_space
(
acct
,
file
))
goto
out
;
fill_ac
(
&
ac
);
/* we really need to bite the bullet and change layout */
ac
.
ac_uid
=
from_kuid_munged
(
file
->
f_cred
->
user_ns
,
orig_cred
->
uid
);
ac
.
ac_gid
=
from_kgid_munged
(
file
->
f_cred
->
user_ns
,
orig_cred
->
gid
);
#if ACCT_VERSION==2
ac
.
ac_ahz
=
AHZ
;
#endif
#if ACCT_VERSION==1 || ACCT_VERSION==2
/* backward-compatible 16 bit fields */
ac
.
ac_uid16
=
ac
.
ac_uid
;
...
...
@@ -523,19 +540,6 @@ static void do_acct_process(struct bsd_acct_struct *acct,
ac
.
ac_ppid
=
task_tgid_nr_ns
(
rcu_dereference
(
current
->
real_parent
),
ns
);
rcu_read_unlock
();
#endif
spin_lock_irq
(
&
current
->
sighand
->
siglock
);
tty
=
current
->
signal
->
tty
;
/* Safe as we hold the siglock */
ac
.
ac_tty
=
tty
?
old_encode_dev
(
tty_devnum
(
tty
))
:
0
;
ac
.
ac_utime
=
encode_comp_t
(
jiffies_to_AHZ
(
cputime_to_jiffies
(
pacct
->
ac_utime
)));
ac
.
ac_stime
=
encode_comp_t
(
jiffies_to_AHZ
(
cputime_to_jiffies
(
pacct
->
ac_stime
)));
ac
.
ac_flag
=
pacct
->
ac_flag
;
ac
.
ac_mem
=
encode_comp_t
(
pacct
->
ac_mem
);
ac
.
ac_minflt
=
encode_comp_t
(
pacct
->
ac_minflt
);
ac
.
ac_majflt
=
encode_comp_t
(
pacct
->
ac_majflt
);
ac
.
ac_exitcode
=
pacct
->
ac_exitcode
;
spin_unlock_irq
(
&
current
->
sighand
->
siglock
);
/*
* Get freeze protection. If the fs is frozen, just skip the write
* as we could deadlock the system otherwise.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment