Date: Thu, 10 Jun 2004 22:05:22 +0200 (CEST) From: Lukas Ertl <le@FreeBSD.org> To: geom@FreeBSD.org Subject: Correct GEOM bio handling Message-ID: <20040610214726.G23746@leelou.in.tern>
next in thread | raw e-mail | index | archive | help
Hi there, I've run into a problem with how to correctly handle struct bios in GEOM. I have the following scenario in vinum: A plex needs to be synced because its data is out-of-date. The solution I was thinking of is to create a kthread which reads the data from a 'good' plex and writes it out to the 'bad' plex. Now, it would be ideal if 'normal' requests (which are not part of this rebuild process) are already accepted while the rebuild process is still on-going. Of course, this could be a problem if the new data is later overwritten by the rebuild process. So I was thinking of cloning the incoming bio, check if the adjusted offsets are beyond where the rebuild process currently is, and if they are put the clone on a 'waitlist' where it will be picked up by the rebuilding kthread once the rebuild pointer is far enough and then scheduled down. The rebuilding itself works fine, the requests on the waitqueue are detected, but they seem to be ignored once I g_io_request() them, and the process that initiated them is stuck. So, I'm thinking that I'm missing some important detail in this bio handling, and I could use some input from you guys. Thank you, le -- Lukas Ertl http://homepage.univie.ac.at/l.ertl/ le@FreeBSD.org http://people.freebsd.org/~le/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040610214726.G23746>