#ifndef CEPH_CLIENT_FH_H #define CEPH_CLIENT_FH_H #include "common/Readahead.h" #include "include/types.h" #include "InodeRef.h" #include "UserPerm.h" class Cond; class ceph_lock_state_t; class Inode; // file handle for any open file state struct Fh { InodeRef inode; int _ref; loff_t pos; int mds; // have to talk to mds we opened with (for now) int mode; // the mode i opened the file with int flags; bool pos_locked; // pos is currently in use list pos_waiters; // waiters for pos UserPerm actor_perms; // perms I opened the file with Readahead readahead; // file lock ceph_lock_state_t *fcntl_locks; ceph_lock_state_t *flock_locks; // IO error encountered by any writeback on this Inode while // this Fh existed (i.e. an fsync on another Fh will still show // up as an async_err here because it could have been the same // bytes we wrote via this Fh). int async_err = {0}; int take_async_err() { int e = async_err; async_err = 0; return e; } Fh(Inode *in); ~Fh(); void get() { ++_ref; } int put() { return --_ref; } }; #endif