Message ID | 20090107204143.GR3512@agk.fab.redhat.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Alasdair Kergon |
Headers | show |
On Thu, Jan 8, 2009 at 4:41 AM, Alasdair G Kergon <agk@redhat.com> wrote: > From: Cheng Renquan <crquan@gmail.com> > > The tt_internal's 'use' field is superfluous: the module's refcount can do > the work properly. An acceptable side-effect is that this increases the > reference counts reported by 'lsmod'. > > Remove the superfluous test when removing a target module. Thank you for doing the work, I'm just too busy to have time to take it. I've applied these two patches on the current linus's 2.6.29 kernel head, and have done some simple building and running tests, it seems OK with allyesconfig, allnoconfig(with all DM config enabled), and serverl randconfigs with DM enabled. > Signed-off-by: Cheng Renquan <crquan@gmail.com> > Reviewed-by: Alasdair G Kergon <agk@redhat.com> > Signed-off-by: Alasdair G Kergon <agk@redhat.com> > --- > drivers/md/dm-target.c | 20 +++----------------- > 1 files changed, 3 insertions(+), 17 deletions(-) > > Index: linux-2.6.28/drivers/md/dm-target.c > =================================================================== > --- linux-2.6.28.orig/drivers/md/dm-target.c 2009-01-07 20:29:57.000000000 +0000 > +++ linux-2.6.28/drivers/md/dm-target.c 2009-01-07 20:30:57.000000000 +0000
Reviewed-by: Jonathan Brassow <jbrassow@redhat.com> brassow On Jan 7, 2009, at 2:41 PM, Alasdair G Kergon wrote: > From: Cheng Renquan <crquan@gmail.com> > > The tt_internal's 'use' field is superfluous: the module's refcount > can do > the work properly. An acceptable side-effect is that this increases > the > reference counts reported by 'lsmod'. > > Remove the superfluous test when removing a target module. > > Signed-off-by: Cheng Renquan <crquan@gmail.com> > Reviewed-by: Alasdair G Kergon <agk@redhat.com> > Signed-off-by: Alasdair G Kergon <agk@redhat.com> > --- > drivers/md/dm-target.c | 20 +++----------------- > 1 files changed, 3 insertions(+), 17 deletions(-) > > Index: linux-2.6.28/drivers/md/dm-target.c > =================================================================== > --- linux-2.6.28.orig/drivers/md/dm-target.c 2009-01-07 > 20:29:57.000000000 +0000 > +++ linux-2.6.28/drivers/md/dm-target.c 2009-01-07 > 20:30:57.000000000 +0000 > @@ -18,7 +18,6 @@ struct tt_internal { > struct target_type tt; > > struct list_head list; > - long use; > }; > > static LIST_HEAD(_targets); > @@ -44,12 +43,8 @@ static struct tt_internal *get_target_ty > down_read(&_lock); > > ti = __find_target_type(name); > - if (ti) { > - if ((ti->use == 0) && !try_module_get(ti->tt.module)) > - ti = NULL; > - else > - ti->use++; > - } > + if (ti && !try_module_get(ti->tt.module)) > + ti = NULL; > > up_read(&_lock); > return ti; > @@ -77,10 +72,7 @@ void dm_put_target_type(struct target_ty > struct tt_internal *ti = (struct tt_internal *) t; > > down_read(&_lock); > - if (--ti->use == 0) > - module_put(ti->tt.module); > - > - BUG_ON(ti->use < 0); > + module_put(ti->tt.module); > up_read(&_lock); > > return; > @@ -140,12 +132,6 @@ void dm_unregister_target(struct target_ > BUG(); > } > > - if (ti->use) { > - DMCRIT("Attempt to unregister target still in use: %s", > - t->name); > - BUG(); > - } > - > list_del(&ti->list); > kfree(ti); > > > -- > dm-devel mailing list > dm-devel@redhat.com > https://www.redhat.com/mailman/listinfo/dm-devel -- dm-devel mailing list dm-devel@redhat.com https://www.redhat.com/mailman/listinfo/dm-devel
Index: linux-2.6.28/drivers/md/dm-target.c =================================================================== --- linux-2.6.28.orig/drivers/md/dm-target.c 2009-01-07 20:29:57.000000000 +0000 +++ linux-2.6.28/drivers/md/dm-target.c 2009-01-07 20:30:57.000000000 +0000 @@ -18,7 +18,6 @@ struct tt_internal { struct target_type tt; struct list_head list; - long use; }; static LIST_HEAD(_targets); @@ -44,12 +43,8 @@ static struct tt_internal *get_target_ty down_read(&_lock); ti = __find_target_type(name); - if (ti) { - if ((ti->use == 0) && !try_module_get(ti->tt.module)) - ti = NULL; - else - ti->use++; - } + if (ti && !try_module_get(ti->tt.module)) + ti = NULL; up_read(&_lock); return ti; @@ -77,10 +72,7 @@ void dm_put_target_type(struct target_ty struct tt_internal *ti = (struct tt_internal *) t; down_read(&_lock); - if (--ti->use == 0) - module_put(ti->tt.module); - - BUG_ON(ti->use < 0); + module_put(ti->tt.module); up_read(&_lock); return; @@ -140,12 +132,6 @@ void dm_unregister_target(struct target_ BUG(); } - if (ti->use) { - DMCRIT("Attempt to unregister target still in use: %s", - t->name); - BUG(); - } - list_del(&ti->list); kfree(ti);