Messages in this thread | | | Date | Thu, 04 Apr 2013 22:24:56 +0800 | From | Aaron Lu <> | Subject | Re: [PATCH] blk: start bypass mode in blk_unregister_queue |
| |
On 04/04/2013 10:20 PM, Tejun Heo wrote: > Hello, > > On Thu, Apr 04, 2013 at 10:16:39PM +0800, Aaron Lu wrote: >> It probably wouldn't happen for normal user, only for some SCSI driver >> developers like me, e.g. the sr_mod will normally load during boot, and >> when I made some changes to the code, I'll unload the driver and reload >> it. This is found when I was developing ZPODD code and I just found some >> time to see what happened. > > Does that unregister and register the same queue? Ah, crap, it does. > >> The queue for the scsi device will always be there, the queue(and the >> device) will not go away on driver unregistration. So it will be left in >> normal mode, and on next blk_register_queue call, the warning will show >> up. >> >>> Starting a bypass mode can be very expensive and some drivers create >>> and destroy a lot of queues during probing. We don't want a call to >>> blk_queue_bypass_start() on every queue creation / destruction cycle. >> >> By expensive, do you mean the drain of the queue? Since the queue is to >> be unregistered, I suppose the queue has to be drained somewhere? > > The problematic one is synchronize_rcu(). It adds up pretty quickly. > I'd suggest just skipping blk_queue_bypass_end() during registration > if the queue is not bypassing.
OK, thanks for the suggestion!
-Aaron
| |