From 12a5801ad24f0a80ce293ecb063f0323bca76d5f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 19 Aug 2010 19:34:30 -0700 Subject: [PATCH] mds: drop projected_xattrs_ptr We don't need these if we just look at the projected_nodes list, just like get_projected_inode() and get_previous_projected_inode(). --- src/mds/CInode.h | 48 +++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 52e0b824d7b2..328da12f0a77 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -186,23 +186,24 @@ public: //bool hack_accessed; //utime_t hack_load_stamp; - struct projection_node { + struct projected_inode_t { inode_t *inode; map *xattrs; sr_t *snapnode; - projection_node() : inode(NULL), xattrs(NULL), snapnode(NULL) {} - projection_node(inode_t *in, sr_t *sn) : inode(in), xattrs(NULL), snapnode(sn) {} - projection_node(inode_t *in, map *xp = NULL, sr_t *sn = NULL) : + projected_inode_t() : inode(NULL), xattrs(NULL), snapnode(NULL) {} + projected_inode_t(inode_t *in, sr_t *sn) : inode(in), xattrs(NULL), snapnode(sn) {} + projected_inode_t(inode_t *in, map *xp = NULL, sr_t *sn = NULL) : inode(in), xattrs(xp), snapnode(sn) {} }; // projected values (only defined while dirty) - list projected_nodes; + list projected_nodes; sr_t *projected_snaprealm_ptr; - map *projected_xattrs_ptr; - map *previous_projected_xattrs_ptr; + inode_t *project_inode(map *px=0); + void pop_and_dirty_projected_inode(LogSegment *ls); + version_t get_projected_version() { if (projected_nodes.empty()) return inode.version; @@ -219,21 +220,9 @@ public: else return projected_nodes.back()->inode; } - map *get_projected_xattrs() { - if (projected_xattrs_ptr) return projected_xattrs_ptr; - return &xattrs; - } - map *get_previous_projected_xattrs() { - if (previous_projected_xattrs_ptr) return previous_projected_xattrs_ptr; - return &xattrs; - } - - inode_t *project_inode(map *px=0); - void pop_and_dirty_projected_inode(LogSegment *ls); - inode_t *get_previous_projected_inode() { assert(!projected_nodes.empty()); - list::reverse_iterator p = projected_nodes.rbegin(); + list::reverse_iterator p = projected_nodes.rbegin(); p++; if (p != projected_nodes.rend()) return (*p)->inode; @@ -241,6 +230,24 @@ public: return &inode; } + map *get_projected_xattrs() { + for (list::reverse_iterator p = projected_nodes.rbegin(); + p != projected_nodes.rend(); + p++) + if ((*p)->xattrs) + return (*p)->xattrs; + return &xattrs; + } + map *get_previous_projected_xattrs() { + list::reverse_iterator p = projected_nodes.rbegin(); + for (p++; // skip the most recent projected value + p != projected_nodes.rend(); + p++) + if ((*p)->xattrs) + return (*p)->xattrs; + return &xattrs; + } + sr_t *project_snaprealm(snapid_t snapid=0); sr_t *get_projected_srnode() { if (!projected_snaprealm_ptr) @@ -358,7 +365,6 @@ private: last_journaled(0), //last_open_journaled(0), //hack_accessed(true), projected_snaprealm_ptr(NULL), - projected_xattrs_ptr(NULL), previous_projected_xattrs_ptr(NULL), stickydir_ref(0), parent(0), inode_auth(CDIR_AUTH_DEFAULT), -- 2.47.3