I find depth-pass tech gives wrong stencil buffer if the camera is in the shadow volume when i learn the sample of ShadowVolume in DXSDK.
But the depth-fail tech works at all circumstances whether the camera is in the shadow or not.
The classical z-pass technique decrements the stencil value when a front face is rendered. If that’s not visible, well, then shadowed and lit areas are reversed… Everything that should not be in shadow suddenly is (and vice versa).
Carmack’s z-fail shadows can handle this case, but unfortunately they are a slower, since the GPU can’t do hierarchical z-culling anymore (c.f. Persson, "Depth In-depth", page 6). If your shadow casting geometries are not too complex, don’t worry.
Another reason z-fail is more expensive is because you have to render a lot more triangles for the endcaps. You should you z-pass as much as possible, and use z-fail only when necessary. You can determine when z-fail is necessary as described here: