Messages in this thread Patch in this message |  | | Date | Thu, 12 Jun 2003 16:25:23 -0700 | From | Greg KH <> | Subject | Re: [PATCH] udev enhancements to use kernel event queue |
| |
On Thu, Jun 12, 2003 at 04:16:03PM -0700, Robert Love wrote: > On Thu, 2003-06-12 at 16:09, Greg KH wrote: > > > + > > + envp [i++] = scratch; > > + scratch += sprintf(scratch, "SEQNUM=%ld", sequence_num) + 1; > > + ++sequence_num; > > Since I do not see a lock in here, I think you need to use atomics? > > As is, you can also race and have the same sequence_num value written > out twice.
Doh, I ate too much for lunch today and need to wake up...
Pat, here's an updated patch.
thanks,
greg k-h
diff -Nru a/lib/kobject.c b/lib/kobject.c --- a/lib/kobject.c Thu Jun 12 16:21:21 2003 +++ b/lib/kobject.c Thu Jun 12 16:21:21 2003 @@ -100,6 +100,8 @@ #define BUFFER_SIZE 1024 /* should be enough memory for the env */ #define NUM_ENVP 32 /* number of env pointers */ +static unsigned long sequence_num; +static spinlock_t sequence_lock = SPIN_LOCK_UNLOCKED; static void kset_hotplug(const char *action, struct kset *kset, struct kobject *kobj) { @@ -151,6 +153,12 @@ envp [i++] = scratch; scratch += sprintf(scratch, "ACTION=%s", action) + 1; + + spin_lock(&sequence_lock); + envp [i++] = scratch; + scratch += sprintf(scratch, "SEQNUM=%ld", sequence_num) + 1; + ++sequence_num; + spin_unlock(&sequence_lock); kobj_path_length = get_kobj_path_length (kset, kobj); kobj_path = kmalloc (kobj_path_length, GFP_KERNEL); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |