summaryrefslogtreecommitdiffstats
path: root/src/client/Fh.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/client/Fh.h
parentInitial commit. (diff)
downloadceph-upstream/16.2.11+ds.tar.xz
ceph-upstream/16.2.11+ds.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--src/client/Fh.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/client/Fh.h b/src/client/Fh.h
new file mode 100644
index 000000000..c3355ba6c
--- /dev/null
+++ b/src/client/Fh.h
@@ -0,0 +1,62 @@
+#ifndef CEPH_CLIENT_FH_H
+#define CEPH_CLIENT_FH_H
+
+#include "common/Readahead.h"
+#include "include/types.h"
+#include "InodeRef.h"
+#include "UserPerm.h"
+#include "mds/flock.h"
+
+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
+ uint64_t gen;
+
+ int flags;
+ bool pos_locked; // pos is currently in use
+ std::list<ceph::condition_variable*> pos_waiters; // waiters for pos
+
+ UserPerm actor_perms; // perms I opened the file with
+
+ Readahead readahead;
+
+ // file lock
+ std::unique_ptr<ceph_lock_state_t> fcntl_locks;
+ std::unique_ptr<ceph_lock_state_t> flock_locks;
+
+ bool has_any_filelocks() {
+ return
+ (fcntl_locks && !fcntl_locks->empty()) ||
+ (flock_locks && !flock_locks->empty());
+ }
+
+ // 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() = delete;
+ Fh(InodeRef in, int flags, int cmode, uint64_t gen, const UserPerm &perms);
+ ~Fh();
+
+ void get() { ++_ref; }
+ int put() { return --_ref; }
+};
+
+
+#endif