[Ocfs2-devel] cluster/heartbeat.c::compute_max_sectors is invalid.

Mark Fasheh mark.fasheh at oracle.com
Fri Sep 8 11:28:33 PDT 2006


On Thu, Sep 07, 2006 at 12:05:58PM +0200, Mathieu Avila wrote:
> One of the device i use has "q->max_sectors"=8. Therefore, max_pages 
> should be 1. This is not the case, due to the :
> max_pages--; /* Handle I/Os that straddle a page */
> Therefore heartbeating doesn't work on my cluster, as it is defined. 
> When i force pow_two_sectors to be 8, it works fine, it heartbeats and i 
> can mount the device. 
Hmm, interesting. Can I trouble you to send us a patch for that? It's
trivial, but since I don't have access to any of that hardware around here I
can't test it.


> Allocating BIOs in advance by making assumptions on the behaviour of the 
> device (o2hb_compute_request_limits) is a bad idea, it seems. Instead, 
> it should add pages until the device refuses to add another one. With 
> the current code, i don't know whether it would take time to correct 
> that, however...
It doesn't allocate bios in advance. That function, "setup_one_bio()" does
the allocation. One bio at a time. We just figure out how many bio's we'll
need ahead of time so that we can size an array. Your problem was initially
with o2hb_compute_request_limits() which definitely has a bug. Everything
that happened after that was a result of the bad calculation.
	--Mark

--
Mark Fasheh
Senior Software Developer, Oracle
mark.fasheh at oracle.com



More information about the Ocfs2-devel mailing list