Re: [PATCH] kobject_uevent CONFIG_SYSFS=n build fix

From: Jun'ichi Nomura
Date: Tue Mar 14 2006 - 18:56:10 EST


Hi Greg,

Greg KH wrote:
#if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
+u64 uevent_seqnum;
+char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug";

No, the seqnum and helper can be called even if we have not defined
CONFIG_NET. Please redo the patch based on this.

OK, thanks for the comment.
I thought it could be conditional on CONFIG_NET because
it's used only from kobject_uevent() except for
kernel/ksysfs.c which just exports them to sysfs.
Are there other users? Or do you mean we have to keep
sysfs files for user space?

Attached patch makes them conditional on CONFIG_HOTPLUG only.
Build tested with both (!CONFIG_NET && CONFIG_SYSFS) and
(CONFIG_NET && !CONFIG_SYSFS).
Does this look correct?

Thanks,
--
Jun'ichi Nomura, NEC Solutions (America), Inc.
--- linux-2.6.16-rc6-mm1.orig/lib/kobject_uevent.c 2006-03-14 22:57:23.000000000 +0900
+++ linux-2.6.16-rc6-mm1/lib/kobject_uevent.c 2006-03-15 08:39:33.000000000 +0900
@@ -25,6 +25,11 @@
#define BUFFER_SIZE 2048 /* buffer for the variables */
#define NUM_ENVP 32 /* number of env pointers */

+#ifdef CONFIG_HOTPLUG
+u64 uevent_seqnum;
+char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug";
+#endif
+
#if defined(CONFIG_HOTPLUG) && defined(CONFIG_NET)
static DEFINE_SPINLOCK(sequence_lock);
static struct sock *uevent_sock;
--- linux-2.6.16-rc6-mm1.orig/kernel/ksysfs.c 2006-03-14 22:57:31.000000000 +0900
+++ linux-2.6.16-rc6-mm1/kernel/ksysfs.c 2006-03-15 08:41:11.000000000 +0900
@@ -15,9 +15,6 @@
#include <linux/module.h>
#include <linux/init.h>

-u64 uevent_seqnum;
-char uevent_helper[UEVENT_HELPER_PATH_LEN] = "/sbin/hotplug";
-
#define KERNEL_ATTR_RO(_name) \
static struct subsys_attribute _name##_attr = __ATTR_RO(_name)

--- linux-2.6.16-rc6-mm1.orig/include/linux/kobject.h 2006-03-15 00:00:20.000000000 +0900
+++ linux-2.6.16-rc6-mm1/include/linux/kobject.h 2006-03-15 08:38:45.000000000 +0900
@@ -27,6 +27,8 @@
#include <asm/atomic.h>

#define KOBJ_NAME_LEN 20
+
+#ifdef CONFIG_HOTPLUG
#define UEVENT_HELPER_PATH_LEN 256

/* path to the userspace helper executed on an event */
@@ -34,6 +36,7 @@ extern char uevent_helper[];

/* counter to tag the uevent, read only except for the kobject core */
extern u64 uevent_seqnum;
+#endif

/* the actions here must match the proper string in lib/kobject_uevent.c */
typedef int __bitwise kobject_action_t;