On Jan 23, 2007, at 11:28 AM, Ricardo Correia wrote: > On Tuesday 23 January 2007 19:01, Ricardo Correia wrote: >> My current code is tripping the following assertion: >> lib/libzpool/build-kernel/arc.c:736: arc_change_state: Assertion >> `new_state->size + to_delta >= new_state->lsize (0x2a60000 >= >> 0x2a64000)` >> failed. > > (snip) > >> (gdb) print new_state->size >> $1 = 44695552 >> (gdb) print to_delta >> $2 = 131072 >> (gdb) print new_state->lsize >> $3 = 44449792 > > I've just noticed how the "new_state->size + to_delta" value from > the crash > dump is different from the assertion. > > I guess it might be a race condition, since I've just implemented > multithreaded operation, but I think I'm missing some locks that > are done by > the Solaris VFS. > _______________________________________________
Right, i would verify your locks are working correctly (especially make sure atomic_add_64() is truly atomic). Note, these locks are in the ARC - so they are not in the VFS. eric