From 1add9f7a56e43099c23f6ba9409278116ea1c964 Mon Sep 17 00:00:00 2001 From: James Morris Date: Mon, 2 Sep 2002 22:40:11 -0700 Subject: [PATCH] sigio/sigurg cleanup for 2.5.32 This is a cleanup of the sigio/sigurg code. Summary: o Removed sk->proc, SIGURG now sent via vfs, credentials checked during delivery. o SIOCSPGRP etc. ioctls use vfs, and work now for SIGIO as well as SIGURG. o Removed socket fcntl code. o Consolidate lsm file_set_fowner() hooks. o Fixed fowner race. o Fixed associated mainline memory leak in fcntl_dirnotify(). --- kernel/futex.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'kernel') diff --git a/kernel/futex.c b/kernel/futex.c index ef3dc8b00a5f..ac9fda58181e 100644 --- a/kernel/futex.c +++ b/kernel/futex.c @@ -276,9 +276,14 @@ static int futex_fd(struct list_head *head, filp->f_dentry = dget(futex_mnt->mnt_root); if (signal) { - filp->f_owner.pid = current->tgid; - filp->f_owner.uid = current->uid; - filp->f_owner.euid = current->euid; + int ret; + + ret = f_setown(filp, current->tgid, 1); + if (ret) { + put_unused_fd(fd); + put_filp(filp); + return ret; + } filp->f_owner.signum = signal; } -- cgit v1.2.3 From d3a7fafa0280fbaacae44243ca24dc90d029d160 Mon Sep 17 00:00:00 2001 From: Robert Love Date: Mon, 2 Sep 2002 22:43:06 -0700 Subject: [PATCH] flag type cleanup This fixes various instances of the interrupt flag variable not being the proper `unsigned long', most notably kernel/softirq.c ... --- drivers/cdrom/sbpcd.c | 2 +- drivers/scsi/sym53c8xx.c | 2 +- drivers/scsi/sym53c8xx_2/sym_glue.c | 2 +- fs/intermezzo/kml_utils.c | 2 +- kernel/softirq.c | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) (limited to 'kernel') diff --git a/drivers/cdrom/sbpcd.c b/drivers/cdrom/sbpcd.c index c822f2d3546e..2b2625b5ba2f 100644 --- a/drivers/cdrom/sbpcd.c +++ b/drivers/cdrom/sbpcd.c @@ -1307,7 +1307,7 @@ static int cmd_out_T(void) static int cc_DriveReset(void); int i, j, l=0, m, ntries; - long flags; + unsigned long flags; D_S[d].error_state=0; D_S[d].b3=0; diff --git a/drivers/scsi/sym53c8xx.c b/drivers/scsi/sym53c8xx.c index 98a24b6bd196..5558ae08a692 100644 --- a/drivers/scsi/sym53c8xx.c +++ b/drivers/scsi/sym53c8xx.c @@ -14115,7 +14115,7 @@ printk("ncr_user_command: data=%ld\n", uc->data); if (len) return -EINVAL; else { - long flags; + unsigned long flags; NCR_LOCK_NCB(np, flags); ncr_usercmd (np); diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c index 04875c35c6a2..564802b6c8c2 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.c +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c @@ -1686,7 +1686,7 @@ printk("sym_user_command: data=%ld\n", uc->data); if (len) return -EINVAL; else { - long flags; + unsigned long flags; SYM_LOCK_HCB(np, flags); sym_exec_user_command (np, uc); diff --git a/fs/intermezzo/kml_utils.c b/fs/intermezzo/kml_utils.c index b1c60f90deab..45f7735f33d0 100644 --- a/fs/intermezzo/kml_utils.c +++ b/fs/intermezzo/kml_utils.c @@ -25,7 +25,7 @@ char * bdup_printf (char *format, ...) va_list args; int i; char *path; - long flags; + unsigned long flags; spin_lock_irqsave(&kml_lock, flags); va_start(args, format); diff --git a/kernel/softirq.c b/kernel/softirq.c index 4405e83aaf21..14cff3f400f8 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -59,7 +59,7 @@ static inline void wakeup_softirqd(unsigned cpu) asmlinkage void do_softirq() { __u32 pending; - long flags; + unsigned long flags; __u32 mask; int cpu; @@ -129,7 +129,7 @@ inline void cpu_raise_softirq(unsigned int cpu, unsigned int nr) void raise_softirq(unsigned int nr) { - long flags; + unsigned long flags; local_irq_save(flags); cpu_raise_softirq(smp_processor_id(), nr); -- cgit v1.2.3 From 1314cad1540faf6b81e455b2267ce23c2fa1d698 Mon Sep 17 00:00:00 2001 From: Robert Love Date: Mon, 2 Sep 2002 22:43:11 -0700 Subject: [PATCH] bad: schedule() with irqs disabled! OK, Linus, you are right... there are enough instances of this we are not going to find them all (although I suspect Andrew's slab.c fixes will cover most of the cases). Further, I think we can should actually purposely call preempt_schedule() in certain cases after interrupt reenable to check for reschedules... Let's just make it a rule "no preemption if interrupts are off" and enforce that. --- kernel/sched.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'kernel') diff --git a/kernel/sched.c b/kernel/sched.c index 0588a29a9393..90344435318c 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -1032,15 +1032,12 @@ asmlinkage void preempt_schedule(void) { struct thread_info *ti = current_thread_info(); - if (unlikely(ti->preempt_count)) - return; - if (unlikely(irqs_disabled())) { - preempt_disable(); - printk("bad: schedule() with irqs disabled!\n"); - show_stack(NULL); - preempt_enable_no_resched(); + /* + * If there is a non-zero preempt_count or interrupts are disabled, + * we do not want to preempt the current task. Just return.. + */ + if (unlikely(ti->preempt_count || irqs_disabled())) return; - } need_resched: ti->preempt_count = PREEMPT_ACTIVE; -- cgit v1.2.3