void remove_client_cap(CInode *in, Capability *cap, bool kill=false);
- std::vector<client_t> get_late_revoking_clients(double timeout) const;
+ std::set<client_t> get_late_revoking_clients(double timeout) const;
- private:
- bool any_late_revoking_caps(xlist<Capability*> const &revoking, double timeout) const;
-
- protected:
- bool _need_flush_mdlog(CInode *in, int wanted_caps);
- void adjust_cap_wanted(Capability *cap, int wanted, int issue_seq);
- void handle_client_caps(const cref_t<MClientCaps> &m);
- void _update_cap_fields(CInode *in, int dirty, const cref_t<MClientCaps> &m, CInode::mempool_inode *pi);
- void _do_snap_update(CInode *in, snapid_t snap, int dirty, snapid_t follows, client_t client, const cref_t<MClientCaps> &m, const ref_t<MClientCaps> &ack);
- void _do_null_snapflush(CInode *head_in, client_t client, snapid_t last=CEPH_NOSNAP);
- bool _do_cap_update(CInode *in, Capability *cap, int dirty, snapid_t follows, const cref_t<MClientCaps> &m,
- const ref_t<MClientCaps> &ack, bool *need_flush=NULL);
- void handle_client_cap_release(const cref_t<MClientCapRelease> &m);
- void _do_cap_release(client_t client, inodeno_t ino, uint64_t cap_id, ceph_seq_t mseq, ceph_seq_t seq);
- void caps_tick();
-
- // Maintain a global list to quickly find if any caps are late revoking
- xlist<Capability*> revoking_caps;
- // Maintain a per-client list to find clients responsible for late ones quickly
- std::map<client_t, xlist<Capability*> > revoking_caps_by_client;
-
- elist<CInode*> need_snapflush_inodes;
- public:
void snapflush_nudge(CInode *in);
void mark_need_snapflush_inode(CInode *in);
bool is_revoking_any_caps_from(client_t client);