Fixes large dirreads on 9ns
authorBarret Rhoden <brho@cs.berkeley.edu>
Sun, 20 Jul 2014 22:07:44 +0000 (15:07 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sun, 20 Jul 2014 22:07:44 +0000 (15:07 -0700)
commiteb3531d37a94cdc2ff5b36ce2c5315fc3ccc4874
treea45ec819cfaf48c20e7d2c32b4e80a8fe655a8dc
parent4628b59c476ceddf7235ef34bc2fffb23c66f86a
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.
kern/src/ns/sysfile.c