Re: First steps towards importing gvirstor into -current

From: Pawel Jakub Dawidek <pjd_at_FreeBSD.org>
Date: Sat, 3 Feb 2007 14:17:43 +0100
On Sat, Feb 03, 2007 at 01:35:01PM +0100, Ivan Voras wrote:
> Pieter de Goeje wrote:
> 
> > GEOM_VIRSTOR[1]: All physical space allocated for test
> > GEOM_VIRSTOR[5]: Failed to allocate physical chunk for virstor/test
> > g_vfs_done():virstor/test[WRITE(offset=103153664, length=131072)]error = 28
> 
> > It spitted out these messages in a tight loop (100% sys load). I was unable to 
> 
> Yes, it turns out the file system gets confused if the device reports a
> certain size and then returns ENOSPC (error 28) when it shouldn't.
> Unfortunately, yanking the device from under the file system would panic
> the kernel. Returning EIO could either panic it or "just" end up with a
> corrupted file system. Any ideas from the more VFS-savvy?
> 
> The "tight loop" seems to be VFS retrying, inserting the requests to
> GEOM layer over and over...

I don't think so. ENOSPC should be just returned to the application.
What was pasted seems to confirm my thinking:

g_vfs_done():virstor/test[WRITE(offset=101842944, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=101974016, length=131072)]error = 28  
g_vfs_done():virstor/test[WRITE(offset=102105088, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=102236160, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=102367232, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=102498304, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=102760448, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=102891520, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=103022592, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=103153664, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=103284736, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=103415808, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=103546880, length=131072)]error = 28
g_vfs_done():virstor/test[WRITE(offset=103677952, length=131072)]error = 28

As you can see the offset increases, so this is not the same I/O
request.

I'd suggest turning off gvirstor debugging and retry. We should probably
also rate-limit errors from g_vfs_done().

-- 
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd_at_FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!

Received on Sat Feb 03 2007 - 12:18:43 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:05 UTC