We're creating a new file descriptor for every op on a file, right? It occurs to me that that makes it quite hard to limit the number of open fds in the system, in addition to making our flush and sync behavior less efficient (or maybe broken?) when we have multiple ops outstanding on a file.