Messages in this thread Patch in this message | | | Date | Thu, 17 Nov 2005 14:46:32 +0100 | From | Jens Axboe <> | Subject | Re: [PATCH linux-2.6-14-mm2] block: problem unloading I/O-Scheduler Module |
| |
On Thu, Nov 17 2005, Dirk Henning Gerdes wrote: > If you have compiled an I/O-Scheduler as module you cannot unload it, > because of a memory-error. > > Signed-off-by: Dirk Gerdes mail@dirk-gerdes.de > > --- linux-2.6.14-mm2-pagecache/block/elevator.c 2005-11-17 > 12:37:10.000000000 +0100 > +++ linux-2.6.14-mm2-pagecache_fix/block/elevator.c 2005-11-17 > 14:05:41.000000000 +0100 > @@ -656,7 +656,7 @@ > struct io_context *ioc = p->io_context; > struct cfq_io_context *cic; > > - if (ioc->cic_root.rb_node != NULL) { > + if (ioc != NULL && ioc->cic_root.rb_node != NULL) { > cic = rb_entry(rb_first(&ioc->cic_root), struct cfq_io_context, > rb_node); > cic->exit(ioc); > cic->dtor(ioc);
Shouldn't that just read
if (!ioc) continue;
instead? Otherwise you'd crash on 'as' exit next. Ah, it already has that. Ok, so I prefer this (what I merged).
diff --git a/block/elevator.c b/block/elevator.c index 5720409..0c389a0 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -652,13 +652,16 @@ void elv_unregister(struct elevator_type struct io_context *ioc = p->io_context; struct cfq_io_context *cic; + if (!ioc) + continue; + if (ioc->cic_root.rb_node != NULL) { cic = rb_entry(rb_first(&ioc->cic_root), struct cfq_io_context, rb_node); cic->exit(ioc); cic->dtor(ioc); } - if (ioc && ioc->aic) { + if (ioc->aic) { ioc->aic->exit(ioc->aic); ioc->aic->dtor(ioc->aic); ioc->aic = NULL; -- Jens Axboe
- 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/
| |