On 11/16/2011 04:31 PM, Christoph Hellwig wrote: > On Wed, Nov 16, 2011 at 04:11:36PM +0800, Liu Yuan wrote: >> +struct store_driver { >> + const char *driver_name; >> + int (*init)(char *path); >> + int (*open)(uint32_t epoch, uint64_t oid, int flags, int *ret); >> + ssize_t (*write)(uint64_t oid, int fd, void *buf, int len, off_t offset); >> + ssize_t (*read)(uint64_t oid, int fd, void *buf, int len, off_t offset); >> + int (*close)(int fd); >> +}; > > Passing an fd round seems to make the interface fairly non-generic. > > A void pointer would allow the driver to store whatever it needs > there (and simple drivers can still cast the fd into them without memory > allocation). > Okay. I don't like fd either. Even more, I don't like open/rw/close group to interface with a kv-store. Void pointer is a nice way to return something back if store driver doesn't care fd. Anyway, I hope this interface is just provisional. > Also in the open routine I would: > > - return the return value, and the private data in the arguments, that > makes the code a bit more readable > - not pass posix open flags, but your own. It seems like the only one > for now would be the create new file flag. > - shouldn't the check for short writes, and the error code translation > side inside the write method? > Okay, I'll submit V2. Thanks, Yuan |