Jens Axboe wrote: > On Wed, Aug 31 2005, Brian King wrote: > >>Jens Axboe wrote: >> >>>On Tue, Aug 30 2005, brking@us.ibm.com wrote: >>> >>> >>>>I ran across a memory leak related to the cfq scheduler. The cfq >>>>init function increments the refcnt of the associated request_queue. >>>>This refcount gets decremented in cfq's exit function. Since blk_cleanup_queue >>>>only calls the elevator exit function when its refcnt goes to zero, the >>>>request_q never gets cleaned up. It didn't look like other io schedulers were >>>>incrementing this refcnt, so I removed the refcnt increment and it fixed the >>>>memory leak for me. >>>> >>>>To reproduce the problem, simply use cfq and use the scsi_host scan sysfs >>>>attribute to scan "- - -" repeatedly on a scsi host and watch the memory >>>>vanish. >>> >>> >>>Yeah, that actually looks like a dangling reference. I assume you tested >>>this properly? >> >>Yes. I applied the patch, booted my system (which was crashing on >>bootup before due to out of memory errors due to the leak) ran the >>scan a few times and verified /proc/meminfo didn't continually >>decrease like without it, and rebooted again. If there is anything >>else you would like me to do, I would be happy to do so. > > > I think you need to remove the blk_put_queue() in cfq_put_cfqd() as > well, otherwise I don't see how this can work without looking at freed > memory. I'll audit the other paths as well. Good catch. Here is an updated patch. -- Brian King eServer Storage I/O IBM Linux Technology Center