Fixes large dirreads on 9ns

When reading from large dirs, we would fill the c->buf with lots of Ms,
such that we couldn't fit any more in there, and then we'd error out.
We get lots of Ms because we'd read more than one M per read call, but
extract only one M per read (M2kdirent).

The fix is to attempt to extract an M2kdirent before even performing
the underlying read, to keep the c->bufused size down.  Also avoids
unnecessary reads.

Also, successful dirreads return the sizeof(struct kdirent), which is
the actual amount of memory we are writing back to userspace, instead of
the size of an M.