aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@suse.de>2006-03-14 11:40:36 -0800
committerGreg Kroah-Hartman <gregkh@suse.de>2006-03-14 11:40:36 -0800
commita7bb6867d30604e52457c7b1b15f12c6d580ef7e (patch)
treec58bd5a85f7806b01a5a63c270532ff7117319cc /driver
parentac63f62557c52e30e4b8882e47ca97a5a780896b (diff)
downloadpatches-a7bb6867d30604e52457c7b1b15f12c6d580ef7e.tar.gz
fix sysfs patch and add a kobject dir patch
Diffstat (limited to 'driver')
-rw-r--r--driver/kobject_add_dir.patch80
-rw-r--r--driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch20
2 files changed, 91 insertions, 9 deletions
diff --git a/driver/kobject_add_dir.patch b/driver/kobject_add_dir.patch
new file mode 100644
index 0000000000000..6ed340b11ed7f
--- /dev/null
+++ b/driver/kobject_add_dir.patch
@@ -0,0 +1,80 @@
+From j-nomura@ce.jp.nec.com Mon Mar 13 14:12:55 2006
+Message-ID: <4415EEC1.5080201@ce.jp.nec.com>
+Date: Mon, 13 Mar 2006 17:14:25 -0500
+From: "Jun'ichi Nomura" <j-nomura@ce.jp.nec.com>
+To: Andrew Morton <akpm@osdl.org>, Alasdair Kergon <agk@redhat.com>,
+ Greg KH <gregkh@suse.de>, Neil Brown <neilb@suse.de>
+Cc: Lars Marowsky-Bree <lmb@suse.de>,
+ device-mapper development <dm-devel@redhat.com>,
+ linux-kernel@vger.kernel.org
+Subject: kobject_add_dir
+
+Adding kobject_add_dir() function which creates a subdirectory
+for a given kobject.
+
+Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ include/linux/kobject.h | 2 ++
+ lib/kobject.c | 38 ++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 40 insertions(+)
+
+--- gregkh-2.6.orig/include/linux/kobject.h
++++ gregkh-2.6/include/linux/kobject.h
+@@ -82,6 +82,8 @@ extern void kobject_unregister(struct ko
+ extern struct kobject * kobject_get(struct kobject *);
+ extern void kobject_put(struct kobject *);
+
++extern struct kobject *kobject_add_dir(struct kobject *, const char *);
++
+ extern char * kobject_get_path(struct kobject *, gfp_t);
+
+ struct kobj_type {
+--- gregkh-2.6.orig/lib/kobject.c
++++ gregkh-2.6/lib/kobject.c
+@@ -393,6 +393,44 @@ void kobject_put(struct kobject * kobj)
+ }
+
+
++static void dir_release(struct kobject *kobj)
++{
++ kfree(kobj);
++}
++
++static struct kobj_type dir_ktype = {
++ .release = dir_release,
++ .sysfs_ops = NULL,
++ .default_attrs = NULL,
++};
++
++/**
++ * kobject_add_dir - add sub directory of object.
++ * @parent: object in which a directory is created.
++ * @name: directory name.
++ *
++ * Add a plain directory object as child of given object.
++ */
++struct kobject *kobject_add_dir(struct kobject *parent, const char *name)
++{
++ struct kobject *k;
++
++ if (!parent)
++ return NULL;
++
++ k = kzalloc(sizeof(*k), GFP_KERNEL);
++ if (!k)
++ return NULL;
++
++ k->parent = parent;
++ k->ktype = &dir_ktype;
++ kobject_set_name(k, name);
++ kobject_register(k);
++
++ return k;
++}
++EXPORT_SYMBOL_GPL(kobject_add_dir);
++
+ /**
+ * kset_init - initialize a kset for use
+ * @k: kset
diff --git a/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch b/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch
index c0ffacdb61643..1da39edc88515 100644
--- a/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch
+++ b/driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch
@@ -14,15 +14,15 @@ preparing new one while creating sysfs directories and files.
Signed-off-by: Maneesh Soni <maneesh@in.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
- fs/sysfs/dir.c | 30 +++++++++++++++++++++++++++++-
+ fs/sysfs/dir.c | 32 +++++++++++++++++++++++++++++++-
fs/sysfs/file.c | 6 ++++--
fs/sysfs/symlink.c | 5 +++--
fs/sysfs/sysfs.h | 1 +
- 4 files changed, 37 insertions(+), 5 deletions(-)
+ 4 files changed, 39 insertions(+), 5 deletions(-)
--- gregkh-2.6.orig/fs/sysfs/dir.c
+++ gregkh-2.6/fs/sysfs/dir.c
-@@ -51,6 +51,30 @@ static struct sysfs_dirent * sysfs_new_d
+@@ -51,6 +51,32 @@ static struct sysfs_dirent * sysfs_new_d
return sd;
}
@@ -39,11 +39,13 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+ struct sysfs_dirent * sd;
+
+ list_for_each_entry(sd, &parent_sd->s_children, s_sibling) {
-+ const unsigned char * existing = sysfs_get_name(sd);
-+ if (strcmp(existing, new))
-+ continue;
-+ else
-+ return -EEXIST;
++ if (sd->s_element) {
++ const unsigned char *existing = sysfs_get_name(sd);
++ if (strcmp(existing, new))
++ continue;
++ else
++ return -EEXIST;
++ }
+ }
+
+ return 0;
@@ -53,7 +55,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
int sysfs_make_dirent(struct sysfs_dirent * parent_sd, struct dentry * dentry,
void * element, umode_t mode, int type)
{
-@@ -117,7 +141,11 @@ static int create_dir(struct kobject * k
+@@ -117,7 +143,11 @@ static int create_dir(struct kobject * k
mutex_lock(&p->d_inode->i_mutex);
*d = lookup_one_len(n, p, strlen(n));
if (!IS_ERR(*d)) {