diff options
| -rw-r--r-- | xlators/features/marker/src/marker-quota.c | 18 | ||||
| -rw-r--r-- | xlators/features/quota/src/quota.c | 10 | 
2 files changed, 26 insertions, 2 deletions
diff --git a/xlators/features/marker/src/marker-quota.c b/xlators/features/marker/src/marker-quota.c index 902b8e5c272..b4c3eb395bd 100644 --- a/xlators/features/marker/src/marker-quota.c +++ b/xlators/features/marker/src/marker-quota.c @@ -214,6 +214,15 @@ mq_build_ancestry (xlator_t *this, loc_t *loc)          list_for_each_entry (entry, &entries.list, list) {                  if (__is_root_gfid (entry->inode->gfid)) { +                        /* The list contains a sub-list for each possible path +                         * to the target inode. Each sub-list starts with the +                         * root entry of the tree and is followed by the child +                         * entries for a particular path to the target entry. +                         * The root entry is an implied sub-list delimiter, +                         * as it denotes we have started processing a new path. +                         * Reset the parent pointer and continue +                         */ +                          tmp_parent = NULL;                  } else {                          linked_inode = inode_link (entry->inode, tmp_parent, @@ -240,7 +249,14 @@ mq_build_ancestry (xlator_t *this, loc_t *loc)                          goto out;                  } -                tmp_parent = entry->inode; +                /* For non-directory, posix_get_ancestry_non_directory returns +                 * all hard-links that are represented by nodes adjacent to +                 * each other in the dentry-list. +                 * (Unlike the directory case where adjacent nodes either have +                 *  a parent/child relationship or belong to different paths). +                 */ +                if (entry->inode->ia_type == IA_IFDIR) +                        tmp_parent = entry->inode;          }          if (loc->parent) diff --git a/xlators/features/quota/src/quota.c b/xlators/features/quota/src/quota.c index 7a84aeb9aba..a3078453f78 100644 --- a/xlators/features/quota/src/quota.c +++ b/xlators/features/quota/src/quota.c @@ -801,7 +801,15 @@ quota_build_ancestry_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                          quota_fill_inodectx (this, entry->inode, entry->dict,                                               &loc, &entry->d_stat, &op_errno); -                        tmp_parent = entry->inode; +                        /* For non-directory, posix_get_ancestry_non_directory +                         * returns all hard-links that are represented by nodes +                         * adjacent to each other in the dentry-list. +                         * (Unlike the directory case where adjacent nodes +                         * either have a parent/child relationship or belong to +                         * different paths). +                         */ +                        if (entry->inode->ia_type == IA_IFDIR) +                                tmp_parent = entry->inode;                          loc_wipe (&loc);                  }  | 
