Architecture - Open by fid

Purpose
Open by fid returns a file descriptor based on a FID. This is quite similar to the controversial open by inode calls found elsewhere.

Implementation Choices
There several considerations for implementation:
 * 1) use an ioctl on the root directory of the lustre file system - advantage: simple implementation
 * 2) open the file /proc/fs/lustre/.../open_by_fid/FID - major advantage: this is a standard open call, so it can be used by unmodified utilities
 * 3) an easy to use, in kernel API is also required

Decomposition of the design
The architecture of open by fid decomposes into several pieces:
 * 1) a local mechanism to generate a file descriptor from a ficticious pathname in /proc and/or through an ioctl
 * 2) the rpc mechanisms with the MDS to get that file descriptor (based on existing re-open by fid code, used during recovery)
 * 3) a mechanism to set flags and default flags on fid file descriptors
 * 4) verification and implementation of the recovery of the file descriptor during an MDS failure
 * 5) verification and implementation of correct behavior when file descriptor calls are made
 * 6) IO using the file descriptor: this can be dependent on flags, e.g. IO may or may not trigger cache miss handling
 * 7) fstat, fchown, ftruncate etc.