set sigio target to current->pid and only if not already set
Subsystems (2)
PATCH 1/1 set sigio target to current->pid and only if not already set
Patch: f_setown-2.6.0-test6.patch
Dear Linus,
Two minor changes:
1. send_sigio() sends to a specific thread, _not_ a process. (It can also send to a process group, but that's not relevant here). This is useful, and should stay as it is.
Therefore it makes _no sense_ to call f_setown() with current->tgid. Presently the kernel is inconsistent about it, with some places using current->pid and some others using current->tgid.
This patch changes f_setown() calls to use current->pid.
2. In some places, f_setown() is called not at the user's direct request, but as a side effect of another function. Specifically: dnotify and file leases.
It is good to allow a program the flexibility to specify a different pid than the default, using F_SETOWN. Presently they can do this after the dnotify or lease call, but there is a small time window when it will be temporarily set to current->tgid (which as pointed out above, is not always right).
The window is avoidable if the program can use F_SETOWN prior to the dnotify or lease call. This is exactly what the "force" argument to f_setown() is for, and this patch changes it to zero in those callers.
This change is not likely to affect any existing programs.
Please apply.
-- Jamie
fs/dnotify.c +1 -1
@@ -92,7 +92,7 @@ prev = &odn->dn_next; } - error =f_setown (filp, current->tgid,1 ); + error =f_setown (filp, current->pid,0 );if (error) goto out_free;
fs/locks.c +1 -1
@@ -1268,7 +1268,7 @@locks_insert_lock (before, fl); - error =f_setown (filp, current->tgid,1 ); + error =f_setown (filp, current->pid,0 ); out_unlock:unlock_kernel ();return error;
kernel/futex.c +1 -1
@@ -500,7 +500,7 @@if (signal) {int err; - err =f_setown (filp, current->tgid,1 ); + err =f_setown (filp, current->pid,1 );if (err <0 ) {put_unused_fd (ret);put_filp (filp);