2006-10-23 13:56:56

by Oleg Nesterov

[permalink] [raw]
Subject: [PATCH] do_acct_process: don't take tty_mutex

Depends on
tty-signal-tty-locking.patch

No need to take the global tty_mutex, signal->tty->driver can't go away
while we are holding ->siglock.

Signed-off-by: Oleg Nesterov <[email protected]>

--- rc2-mm2/kernel/acct.c~ 2006-10-22 19:28:17.000000000 +0400
+++ rc2-mm2/kernel/acct.c 2006-10-23 17:09:12.000000000 +0400
@@ -484,12 +484,9 @@ static void do_acct_process(struct file
ac.ac_ppid = current->parent->tgid;
#endif

- mutex_lock(&tty_mutex);
- tty = get_current_tty();
- ac.ac_tty = tty ? old_encode_dev(tty_devnum(tty)) : 0;
- mutex_unlock(&tty_mutex);
-
spin_lock_irq(&current->sighand->siglock);
+ tty = current->signal->tty;
+ 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;


2006-10-24 09:47:36

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [PATCH] do_acct_process: don't take tty_mutex

On Mon, 2006-10-23 at 17:56 +0400, Oleg Nesterov wrote:
> Depends on
> tty-signal-tty-locking.patch
>
> No need to take the global tty_mutex, signal->tty->driver can't go away
> while we are holding ->siglock.
>
> Signed-off-by: Oleg Nesterov <[email protected]>

Acked-by: Peter Zijlstra <[email protected]

> --- rc2-mm2/kernel/acct.c~ 2006-10-22 19:28:17.000000000 +0400
> +++ rc2-mm2/kernel/acct.c 2006-10-23 17:09:12.000000000 +0400
> @@ -484,12 +484,9 @@ static void do_acct_process(struct file
> ac.ac_ppid = current->parent->tgid;
> #endif
>
> - mutex_lock(&tty_mutex);
> - tty = get_current_tty();
> - ac.ac_tty = tty ? old_encode_dev(tty_devnum(tty)) : 0;
> - mutex_unlock(&tty_mutex);
> -
> spin_lock_irq(&current->sighand->siglock);
> + tty = current->signal->tty;
> + 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;
>