Messages in this thread Patch in this message | | | Date | Fri, 10 Jan 2003 01:30:45 -0800 (PST) | Subject | [Bug fix] delete kobject from list when kobject_add() fail | From | <> |
| |
Dear Mochel, I found there were still issues in failed kobject_add(). For example, if you try to register two kobjects with the same name into subsystem, the second registration will fail but the second will keep in the list of subsystem. Below patch might fix the bug. Please apply.
Yours truly, Louis Zhuang --------------- Fault Injection Test Harness Project BK tree: http://fault-injection.bkbits.net/linux-2.5 Home Page: http://sf.net/projects/fault-injection
You can import this changeset into BK by piping this whole message to: '| bk receive [path to repository]' or apply the patch as usual.
===================================================================
ChangeSet@1.944, 2003-01-10 16:45:01+08:00, louis@hawk.sh.intel.com delete kobject from list when kobject_add() fail. caller have no way to clean the list, so kobjec_add() should remove kobject from list.
kobject.c | 26 ++++++++++++++++---------- 1 files changed, 16 insertions(+), 10 deletions(-)
diff -Nru a/lib/kobject.c b/lib/kobject.c --- a/lib/kobject.c Fri Jan 10 16:48:01 2003 +++ b/lib/kobject.c Fri Jan 10 16:48:01 2003 @@ -66,6 +66,18 @@ return container_of(entry,struct kobject,entry); }
+static inline void __kobject_del(struct kobject * kobj) +{ + if (kobj->kset) { + down_write(&kobj->kset->subsys->rwsem); + list_del_init(&kobj->entry); + up_write(&kobj->kset->subsys->rwsem); + } + if (kobj->parent) + kobject_put(kobj->parent); + kobject_put(kobj); +} +
/** * kobject_init - initialize object. @@ -109,8 +121,8 @@ up_write(&kobj->kset->subsys->rwsem); } error = create_dir(kobj); - if (error && parent) - kobject_put(parent); + if (error) + __kobject_del(kobj); return error; }
@@ -132,6 +144,7 @@ return error; }
+ /** * kobject_del - unlink kobject from hierarchy. * @kobj: object. @@ -140,14 +153,7 @@ void kobject_del(struct kobject * kobj) { sysfs_remove_dir(kobj); - if (kobj->kset) { - down_write(&kobj->kset->subsys->rwsem); - list_del_init(&kobj->entry); - up_write(&kobj->kset->subsys->rwsem); - } - if (kobj->parent) - kobject_put(kobj->parent); - kobject_put(kobj); + __kobject_del(kobj); }
/** ===================================================================
This BitKeeper patch contains the following changesets: 1.944 ## Wrapped with gzip_uu ##
begin 664 bkpatch20054 M'XL(`,&('CX``^5576_3,!1]KG_%E2:AEI'T.H[;-%.KP89@`HEI:&](E9<X M2V@:5[;3JB+[[[CINE$V&*"]D41*['ONN5\GR0%<&JGC3JGJPI`#>*^,C3NY M6,U\D_M%967I)VKN+!=*.4L_5W/9;]']P.>>69O,$&<^%S;)82FUB3O49W<[ M=KV0<>?B[;O+CZ\O"!F/X207U;7\+"V,Q\0JO11E:HZ%S4M5^5:+RLRE%9NH MS1VT"1`#=W(Z9,@'#1U@.&P2FE(J0BI3#,)H$-ZS+61U71>_I6-(<10P&@78 MA!PQ(J=`_5$8`K(^TCY%H(,XY#'20XQB1&BK/G[0&SBDX"%Y`\];RPE)()6E MM!)FZNJK3"QDVD4K"V-AE<MJMST5:=KM02:*TG<^`(DH2ZDA%TL)E8*56+O4 M("FEJ,#FLF5X!49!B]ZRW)*87-5E"EK.U?*1N#X`^0`A'[K\SN\'2;R_/`A! M@60"<Y7DLCQ6)BU]I:^;LKCJWP;UD[9/U,T)*1UAV"`?<=:P(,MH@$)@%&'* MLU]-Y2&7&SAU8PX9QX;3$0];->[!-HI\AIR>YMB(;X@L0#9RXF,CUHJ/\GWM ML9CCD]H;@$?_)_5M1_<)/+UJ+Z>F\_TI_H,<SP81T(`8*VR10%&5125AJ8H4 MIM-=H:X=76-U[5+:I?:R?>J1;Z139-#=++S)S$C;`[?52=6JFJYT867WQ;W- MFYCZRGTWO8E>&3GO'3GDIKQ-@&E1%78'EI75Z]9<+_Z(YN;'-!9".X(>./== M!8O:[AN=S\^VWE&'W)`OY)32``)R1BESMY97:JUTS_'M]V3KY9`L!-IZA@PB AM^9.Q>1Q\-WOP;TGR<S4\[$(Y"#-$D:^`R/H1DJ2!@`` ` end
- 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/
| |