Thanks for replying. >>I am a bit puzzled why a new ARC entry could not be cloned in arc_release..... > >We have already handed out a reference to the data at the point that >buffer is being released, so we cannot allocate a new block "JIT".
I think I get it. Each colliding thread threads need a separate copy of the buffer from the point of the read collision, so that they can dirty these if they so desire. You have to be prepared for the worst case scenario, where all threads end up modifying their buffer. We may end up with N different buffer contents for N possible colliding threads. COW is a bit of a mind-bender to get used to. So if we have a number of threads colliding on read, we have to maintain all of the cloned data in the ARC, even if none of the threads ends up modifying their buffer. -- This message posted from opensolaris.org