is it needed just so the caller can see what the layout is, or is it also necessary to pass an arbitrary struct in to the block read/write methods?  if it's just the former, we could make a set of calls to get the individual fields, perhaps.  or use a different simpler struct that drops teh unused ones (cas_hash, preferred, object_stripe_unit).