LockType CInode::flocklock_type(CEPH_LOCK_IFLOCK);
LockType CInode::policylock_type(CEPH_LOCK_IPOLICY);
+std::string_view CInode::pin_name(int p) const
+{
+ switch (p) {
+ case PIN_DIRFRAG: return "dirfrag";
+ case PIN_CAPS: return "caps";
+ case PIN_IMPORTING: return "importing";
+ case PIN_OPENINGDIR: return "openingdir";
+ case PIN_REMOTEPARENT: return "remoteparent";
+ case PIN_BATCHOPENJOURNAL: return "batchopenjournal";
+ case PIN_SCATTERED: return "scattered";
+ case PIN_STICKYDIRS: return "stickydirs";
+ //case PIN_PURGING: return "purging";
+ case PIN_FREEZING: return "freezing";
+ case PIN_FROZEN: return "frozen";
+ case PIN_IMPORTINGCAPS: return "importingcaps";
+ case PIN_EXPORTINGCAPS: return "exportingcaps";
+ case PIN_PASTSNAPPARENT: return "pastsnapparent";
+ case PIN_OPENINGSNAPPARENTS: return "openingsnapparents";
+ case PIN_TRUNCATING: return "truncating";
+ case PIN_STRAY: return "stray";
+ case PIN_NEEDSNAPFLUSH: return "needsnapflush";
+ case PIN_DIRTYRSTAT: return "dirtyrstat";
+ case PIN_DIRTYPARENT: return "dirtyparent";
+ case PIN_DIRWAITER: return "dirwaiter";
+ case PIN_SCRUBQUEUE: return "scrubqueue";
+ default: return generic_pin_name(p);
+ }
+}
+
//int cinode_pins[CINODE_NUM_PINS]; // counts
ostream& CInode::print_db_line_prefix(ostream& out)
{
};
int num_cinode_locks = sizeof(cinode_lock_info) / sizeof(cinode_lock_info[0]);
-
-
ostream& operator<<(ostream& out, const CInode& in)
{
string path;
projected_nodes.pop_front();
}
+CInode::mempool_xattr_map *CInode::get_projected_xattrs()
+{
+ if (num_projected_xattrs > 0) {
+ for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it)
+ if (it->xattrs)
+ return it->xattrs.get();
+ }
+ return &xattrs;
+}
+
+CInode::mempool_xattr_map *CInode::get_previous_projected_xattrs()
+{
+ if (num_projected_xattrs > 0) {
+ for (auto it = ++projected_nodes.rbegin(); it != projected_nodes.rend(); ++it)
+ if (it->xattrs)
+ return it->xattrs.get();
+ }
+ return &xattrs;
+}
+
sr_t *CInode::prepare_new_srnode(snapid_t snapid)
{
const sr_t *cur_srnode = get_projected_srnode();
return new_srnode;
}
+const sr_t *CInode::get_projected_srnode() const {
+ if (num_projected_srnodes > 0) {
+ for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it)
+ if (it->snapnode != projected_inode::UNDEF_SRNODE)
+ return it->snapnode;
+ }
+ if (snaprealm)
+ return &snaprealm->srnode;
+ else
+ return NULL;
+}
+
void CInode::project_snaprealm(sr_t *new_srnode)
{
dout(10) << __func__ << " " << new_srnode << dendl;
// ------------------
// locking
+SimpleLock* CInode::get_lock(int type)
+{
+ switch (type) {
+ case CEPH_LOCK_IFILE: return &filelock;
+ case CEPH_LOCK_IAUTH: return &authlock;
+ case CEPH_LOCK_ILINK: return &linklock;
+ case CEPH_LOCK_IDFT: return &dirfragtreelock;
+ case CEPH_LOCK_IXATTR: return &xattrlock;
+ case CEPH_LOCK_ISNAP: return &snaplock;
+ case CEPH_LOCK_INEST: return &nestlock;
+ case CEPH_LOCK_IFLOCK: return &flocklock;
+ case CEPH_LOCK_IPOLICY: return &policylock;
+ }
+ return 0;
+}
+
void CInode::set_object_info(MDSCacheObjectInfo &info)
{
info.ino = ino();
choose_lock_state(&linklock, issued);
}
+int CInode::count_nonstale_caps()
+{
+ int n = 0;
+ for (const auto &p : client_caps) {
+ if (!p.second.is_stale())
+ n++;
+ }
+ return n;
+}
+
+bool CInode::multiple_nonstale_caps()
+{
+ int n = 0;
+ for (const auto &p : client_caps) {
+ if (!p.second.is_stale()) {
+ if (n)
+ return true;
+ n++;
+ }
+ }
+ return false;
+}
+
void CInode::set_mds_caps_wanted(mempool::mds_co::compact_map<int32_t,int32_t>& m)
{
bool old_empty = mds_caps_wanted.empty();
ceph_assert(num_exporting_dirs == 0);
}
- std::string_view pin_name(int p) const override {
- switch (p) {
- case PIN_DIRFRAG: return "dirfrag";
- case PIN_CAPS: return "caps";
- case PIN_IMPORTING: return "importing";
- case PIN_OPENINGDIR: return "openingdir";
- case PIN_REMOTEPARENT: return "remoteparent";
- case PIN_BATCHOPENJOURNAL: return "batchopenjournal";
- case PIN_SCATTERED: return "scattered";
- case PIN_STICKYDIRS: return "stickydirs";
- //case PIN_PURGING: return "purging";
- case PIN_FREEZING: return "freezing";
- case PIN_FROZEN: return "frozen";
- case PIN_IMPORTINGCAPS: return "importingcaps";
- case PIN_EXPORTINGCAPS: return "exportingcaps";
- case PIN_PASTSNAPPARENT: return "pastsnapparent";
- case PIN_OPENINGSNAPPARENTS: return "openingsnapparents";
- case PIN_TRUNCATING: return "truncating";
- case PIN_STRAY: return "stray";
- case PIN_NEEDSNAPFLUSH: return "needsnapflush";
- case PIN_DIRTYRSTAT: return "dirtyrstat";
- case PIN_DIRTYPARENT: return "dirtyparent";
- case PIN_DIRWAITER: return "dirwaiter";
- case PIN_SCRUBQUEUE: return "scrubqueue";
- default: return generic_pin_name(p);
- }
- }
+ std::string_view pin_name(int p) const override;
ostream& print_db_line_prefix(ostream& out) override;
return &inode;
}
- mempool_xattr_map *get_projected_xattrs() {
- if (num_projected_xattrs > 0) {
- for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it)
- if (it->xattrs)
- return it->xattrs.get();
- }
- return &xattrs;
- }
- mempool_xattr_map *get_previous_projected_xattrs() {
- if (num_projected_xattrs > 0) {
- for (auto it = ++projected_nodes.rbegin(); it != projected_nodes.rend(); ++it)
- if (it->xattrs)
- return it->xattrs.get();
- }
- return &xattrs;
- }
+ mempool_xattr_map *get_projected_xattrs();
+ mempool_xattr_map *get_previous_projected_xattrs();
sr_t *prepare_new_srnode(snapid_t snapid);
void project_snaprealm(sr_t *new_srnode);
project_snaprealm(new_srnode);
return new_srnode;
}
- const sr_t *get_projected_srnode() const {
- if (num_projected_srnodes > 0) {
- for (auto it = projected_nodes.rbegin(); it != projected_nodes.rend(); ++it)
- if (it->snapnode != projected_inode::UNDEF_SRNODE)
- return it->snapnode;
- }
- if (snaprealm)
- return &snaprealm->srnode;
- else
- return NULL;
- }
+ const sr_t *get_projected_srnode() const;
void mark_snaprealm_global(sr_t *new_srnode);
void clear_snaprealm_global(sr_t *new_srnode);
int getattr_wants=0);
void encode_cap_message(const ref_t<MClientCaps> &m, Capability *cap);
- SimpleLock* get_lock(int type) override {
- switch (type) {
- case CEPH_LOCK_IFILE: return &filelock;
- case CEPH_LOCK_IAUTH: return &authlock;
- case CEPH_LOCK_ILINK: return &linklock;
- case CEPH_LOCK_IDFT: return &dirfragtreelock;
- case CEPH_LOCK_IXATTR: return &xattrlock;
- case CEPH_LOCK_ISNAP: return &snaplock;
- case CEPH_LOCK_INEST: return &nestlock;
- case CEPH_LOCK_IFLOCK: return &flocklock;
- case CEPH_LOCK_IPOLICY: return &policylock;
- }
- return 0;
- }
+ SimpleLock* get_lock(int type) override;
void set_object_info(MDSCacheObjectInfo &info) override;
void encode_lock_state(int type, bufferlist& bl) override;
void choose_lock_state(SimpleLock *lock, int allissued);
void choose_lock_states(int dirty_caps);
- int count_nonstale_caps() {
- int n = 0;
- for (const auto &p : client_caps) {
- if (!p.second.is_stale())
- n++;
- }
- return n;
- }
- bool multiple_nonstale_caps() {
- int n = 0;
- for (const auto &p : client_caps) {
- if (!p.second.is_stale()) {
- if (n)
- return true;
- n++;
- }
- }
- return false;
- }
+ int count_nonstale_caps();
+ bool multiple_nonstale_caps();
bool is_any_caps() { return !client_caps.empty(); }
bool is_any_nonstale_caps() { return count_nonstale_caps(); }