* PATCPATCH -- add unlimited name lengths support to sysfs
@ 2003-12-16 23:07 Linda Xie
2003-12-16 23:14 ` Greg KH
0 siblings, 1 reply; 6+ messages in thread
From: Linda Xie @ 2003-12-16 23:07 UTC (permalink / raw)
To: linux-kernel; +Cc: scheel, wortman, Greg KH
Hi All,
In the development of RPA PCI Hot Plug Controller driver, I have found
it is needed to create some kernel objects which have more than 20
(KOBJECT_NAME_SIZE) charaters in their name strings. At a later time the
names will be used for creating some symlinks. The attached patch adds
unlimited name lengths support to sysfs symlink.c.
Comments are welcome.
Linda
diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
--- a/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003
+++ b/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003
@@ -42,7 +42,10 @@
struct kobject * p = kobj;
int length = 1;
do {
- length += strlen(p->name) + 1;
+ if (p->k_name)
+ length += strlen(p->k_name) + 1;
+ else
+ length += strlen(p->name) + 1;
p = p->parent;
} while (p);
return length;
@@ -54,11 +57,20 @@
--length;
for (p = kobj; p; p = p->parent) {
- int cur = strlen(p->name);
-
+ int cur;
+ char *name;
+
+ if (p->k_name) {
+ cur = strlen(p->k_name);
+ name = p->k_name;
+ }
+ else {
+ cur = strlen(p->name);
+ name = p->name;
+ }
/* back up enough to print this bus id with '/' */
length -= cur;
- strncpy(buffer + length,p->name,cur);
+ strncpy(buffer + length,name,cur);
*(buffer + --length) = '/';
}
}
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: PATCPATCH -- add unlimited name lengths support to sysfs 2003-12-16 23:07 PATCPATCH -- add unlimited name lengths support to sysfs Linda Xie @ 2003-12-16 23:14 ` Greg KH 2003-12-17 20:27 ` Linda Xie 0 siblings, 1 reply; 6+ messages in thread From: Greg KH @ 2003-12-16 23:14 UTC (permalink / raw) To: Linda Xie; +Cc: linux-kernel, scheel, wortman On Tue, Dec 16, 2003 at 05:07:22PM -0600, Linda Xie wrote: > diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c > --- a/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 > +++ b/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 > @@ -42,7 +42,10 @@ > struct kobject * p = kobj; > int length = 1; > do { > - length += strlen(p->name) + 1; > + if (p->k_name) > + length += strlen(p->k_name) + 1; > + else > + length += strlen(p->name) + 1; Shouldn't this just be: length += strlen(kobject_name(p)) + 1; > @@ -54,11 +57,20 @@ > > --length; > for (p = kobj; p; p = p->parent) { > - int cur = strlen(p->name); > - > + int cur; > + char *name; > + > + if (p->k_name) { > + cur = strlen(p->k_name); > + name = p->k_name; > + } > + else { > + cur = strlen(p->name); > + name = p->name; > + } Same here, just use kobject_name() to get the proper pointer. thanks, greg k-h ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: PATCPATCH -- add unlimited name lengths support to sysfs 2003-12-16 23:14 ` Greg KH @ 2003-12-17 20:27 ` Linda Xie 2003-12-17 20:41 ` Greg KH 0 siblings, 1 reply; 6+ messages in thread From: Linda Xie @ 2003-12-17 20:27 UTC (permalink / raw) To: Greg KH; +Cc: Linda Xie, linux-kernel, scheel, wortman Greg KH wrote: > On Tue, Dec 16, 2003 at 05:07:22PM -0600, Linda Xie wrote: > >>diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c >>--- a/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 >>+++ b/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 >>@@ -42,7 +42,10 @@ >> struct kobject * p = kobj; >> int length = 1; >> do { >>- length += strlen(p->name) + 1; >>+ if (p->k_name) >>+ length += strlen(p->k_name) + 1; >>+ else >>+ length += strlen(p->name) + 1; > > > Shouldn't this just be: > length += strlen(kobject_name(p)) + 1; > That is correct. But here is my concern: Some of the callers of sysfs_create_link() set p->name instead of p->k_name. So for them, the length calculated using kobject_name(p) will be incorrect. Correct me if I am wrong. Thanks, Linda > >>@@ -54,11 +57,20 @@ >> >> --length; >> for (p = kobj; p; p = p->parent) { >>- int cur = strlen(p->name); >>- >>+ int cur; >>+ char *name; >>+ >>+ if (p->k_name) { >>+ cur = strlen(p->k_name); >>+ name = p->k_name; >>+ } >>+ else { >>+ cur = strlen(p->name); >>+ name = p->name; >>+ } > > > Same here, just use kobject_name() to get the proper pointer. > > thanks, > > greg k-h Thanks, Linda ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: PATCPATCH -- add unlimited name lengths support to sysfs 2003-12-17 20:27 ` Linda Xie @ 2003-12-17 20:41 ` Greg KH 2003-12-18 2:23 ` Linda Xie 0 siblings, 1 reply; 6+ messages in thread From: Greg KH @ 2003-12-17 20:41 UTC (permalink / raw) To: Linda Xie; +Cc: linux-kernel, scheel, wortman On Wed, Dec 17, 2003 at 02:27:57PM -0600, Linda Xie wrote: > Greg KH wrote: > >On Tue, Dec 16, 2003 at 05:07:22PM -0600, Linda Xie wrote: > > > >>diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c > >>--- a/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 > >>+++ b/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 > >>@@ -42,7 +42,10 @@ > >> struct kobject * p = kobj; > >> int length = 1; > >> do { > >>- length += strlen(p->name) + 1; > >>+ if (p->k_name) > >>+ length += strlen(p->k_name) + 1; > >>+ else > >>+ length += strlen(p->name) + 1; > > > > > >Shouldn't this just be: > > length += strlen(kobject_name(p)) + 1; > > > > That is correct. But here is my concern: Some of the callers of > sysfs_create_link() > set p->name instead of p->k_name. So for them, the length calculated > using kobject_name(p) will be incorrect. Correct me if I am wrong. Well if a kobject only uses the .name field, .k_name will point to it (see kobject_add()), so the kobject_name() call will work in the above case (as it should always do.) Actually that if (p->k_name) statement will always be true because of this fact :) This lets people like the edd driver which does: snprintf(edev->kobj.name, EDD_DEVICE_NAME_SIZE, "int13_dev%02x", edd[i].device); still work properly. Ideally, callers like this should change to use the kobject_set_name() function, but there's no rush. thanks, greg k-h ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: PATCPATCH -- add unlimited name lengths support to sysfs 2003-12-17 20:41 ` Greg KH @ 2003-12-18 2:23 ` Linda Xie 2004-02-02 23:26 ` Greg KH 0 siblings, 1 reply; 6+ messages in thread From: Linda Xie @ 2003-12-18 2:23 UTC (permalink / raw) To: Greg KH; +Cc: Linda Xie, linux-kernel, scheel, wortman Greg KH wrote: > On Wed, Dec 17, 2003 at 02:27:57PM -0600, Linda Xie wrote: > >>Greg KH wrote: >> >>>On Tue, Dec 16, 2003 at 05:07:22PM -0600, Linda Xie wrote: >>> >>> >>>>diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c >>>>--- a/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 >>>>+++ b/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 >>>>@@ -42,7 +42,10 @@ >>>> struct kobject * p = kobj; >>>> int length = 1; >>>> do { >>>>- length += strlen(p->name) + 1; >>>>+ if (p->k_name) >>>>+ length += strlen(p->k_name) + 1; >>>>+ else >>>>+ length += strlen(p->name) + 1; >>> >>> >>>Shouldn't this just be: >>> length += strlen(kobject_name(p)) + 1; >>> >> >>That is correct. But here is my concern: Some of the callers of >>sysfs_create_link() >>set p->name instead of p->k_name. So for them, the length calculated >>using kobject_name(p) will be incorrect. Correct me if I am wrong. > > > Well if a kobject only uses the .name field, .k_name will point to it > (see kobject_add()), so the kobject_name() call will work in the above > case (as it should always do.) Actually that if (p->k_name) statement > will always be true because of this fact :) > > This lets people like the edd driver which does: > snprintf(edev->kobj.name, EDD_DEVICE_NAME_SIZE, "int13_dev%02x", edd[i].device); > still work properly. Ideally, callers like this should change to use > the kobject_set_name() function, but there's no rush. > > thanks, > > greg k-h > Thank you very much. Below is an updated patch: diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c --- a/fs/sysfs/symlink.c Wed Dec 17 20:08:01 2003 +++ b/fs/sysfs/symlink.c Wed Dec 17 20:08:01 2003 @@ -42,7 +42,7 @@ struct kobject * p = kobj; int length = 1; do { - length += strlen(p->name) + 1; + length += strlen(kobject_name(p)) + 1; p = p->parent; } while (p); return length; @@ -54,11 +54,11 @@ --length; for (p = kobj; p; p = p->parent) { - int cur = strlen(p->name); + int cur = strlen(kobject_name(p)); /* back up enough to print this bus id with '/' */ length -= cur; - strncpy(buffer + length,p->name,cur); + strncpy(buffer + length,kobject_name(p),cur); *(buffer + --length) = '/'; } Linda ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: PATCPATCH -- add unlimited name lengths support to sysfs 2003-12-18 2:23 ` Linda Xie @ 2004-02-02 23:26 ` Greg KH 0 siblings, 0 replies; 6+ messages in thread From: Greg KH @ 2004-02-02 23:26 UTC (permalink / raw) To: Linda Xie; +Cc: linux-kernel, scheel, wortman On Wed, Dec 17, 2003 at 08:23:06PM -0600, Linda Xie wrote: > Greg KH wrote: > >On Wed, Dec 17, 2003 at 02:27:57PM -0600, Linda Xie wrote: > > > >>Greg KH wrote: > >> > >>>On Tue, Dec 16, 2003 at 05:07:22PM -0600, Linda Xie wrote: > >>> > >>> > >>>>diff -Nru a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c > >>>>--- a/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 > >>>>+++ b/fs/sysfs/symlink.c Sun Dec 14 21:19:29 2003 > >>>>@@ -42,7 +42,10 @@ > >>>> struct kobject * p = kobj; > >>>> int length = 1; > >>>> do { > >>>>- length += strlen(p->name) + 1; > >>>>+ if (p->k_name) > >>>>+ length += strlen(p->k_name) + 1; > >>>>+ else > >>>>+ length += strlen(p->name) + 1; > >>> > >>> > >>>Shouldn't this just be: > >>> length += strlen(kobject_name(p)) + 1; > >>> > >> > >>That is correct. But here is my concern: Some of the callers of > >>sysfs_create_link() > >>set p->name instead of p->k_name. So for them, the length calculated > >>using kobject_name(p) will be incorrect. Correct me if I am wrong. > > > > > >Well if a kobject only uses the .name field, .k_name will point to it > >(see kobject_add()), so the kobject_name() call will work in the above > >case (as it should always do.) Actually that if (p->k_name) statement > >will always be true because of this fact :) > > > >This lets people like the edd driver which does: > > snprintf(edev->kobj.name, EDD_DEVICE_NAME_SIZE, "int13_dev%02x", > > edd[i].device); > >still work properly. Ideally, callers like this should change to use > >the kobject_set_name() function, but there's no rush. > > > >thanks, > > > >greg k-h > > > > Thank you very much. Below is an updated patch: Ick, that patch had no tabs :( Care to fix your email client and send it to me again? thanks, greg k-h ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2004-02-02 23:26 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2003-12-16 23:07 PATCPATCH -- add unlimited name lengths support to sysfs Linda Xie 2003-12-16 23:14 ` Greg KH 2003-12-17 20:27 ` Linda Xie 2003-12-17 20:41 ` Greg KH 2003-12-18 2:23 ` Linda Xie 2004-02-02 23:26 ` Greg KH
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox