diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-14 11:40:36 -0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-03-14 11:40:36 -0800 |
commit | a7bb6867d30604e52457c7b1b15f12c6d580ef7e (patch) | |
tree | c58bd5a85f7806b01a5a63c270532ff7117319cc /driver | |
parent | ac63f62557c52e30e4b8882e47ca97a5a780896b (diff) | |
download | patches-a7bb6867d30604e52457c7b1b15f12c6d580ef7e.tar.gz |
fix sysfs patch and add a kobject dir patch
Diffstat (limited to 'driver')
-rw-r--r-- | driver/kobject_add_dir.patch | 80 | ||||
-rw-r--r-- | driver/sysfs-fix-problem-with-duplicate-sysfs-directories-and-files.patch | 20 |
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)) { |