summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlators/cluster/dht/src/dht-common.h18
-rw-r--r--xlators/cluster/dht/src/dht-linkfile.c23
-rw-r--r--xlators/cluster/dht/src/dht-rename.c16
-rw-r--r--xlators/features/changelog/src/changelog.c2
4 files changed, 36 insertions, 23 deletions
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h
index 03518197ab6..c04e85da5ca 100644
--- a/xlators/cluster/dht/src/dht-common.h
+++ b/xlators/cluster/dht/src/dht-common.h
@@ -582,6 +582,24 @@ typedef struct dht_migrate_info {
} while (0)
#define is_greater_time(a, an, b, bn) (((a) < (b)) || (((a) == (b)) && ((an) < (bn))))
+
+#define DHT_MARK_FOP_INTERNAL(xattr) do { \
+ int tmp = -1; \
+ if (!xattr) { \
+ xattr = dict_new (); \
+ if (!xattr) \
+ break; \
+ } \
+ tmp = dict_set_str (xattr, GLUSTERFS_INTERNAL_FOP_KEY, "yes"); \
+ if (tmp) { \
+ gf_msg (this->name, GF_LOG_ERROR, 0, \
+ DHT_MSG_DICT_SET_FAILED, \
+ "Failed to set dictionary value: key = %s," \
+ " path = %s", GLUSTERFS_INTERNAL_FOP_KEY, \
+ local->loc.path); \
+ } \
+ } while (0)
+
dht_layout_t *dht_layout_new (xlator_t *this, int cnt);
dht_layout_t *dht_layout_get (xlator_t *this, inode_t *inode);
dht_layout_t *dht_layout_for_subvol (xlator_t *this, xlator_t *subvol);
diff --git a/xlators/cluster/dht/src/dht-linkfile.c b/xlators/cluster/dht/src/dht-linkfile.c
index 14df3187097..923dde09455 100644
--- a/xlators/cluster/dht/src/dht-linkfile.c
+++ b/xlators/cluster/dht/src/dht-linkfile.c
@@ -312,12 +312,13 @@ dht_linkfile_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
int
dht_linkfile_attr_heal (call_frame_t *frame, xlator_t *this)
{
- int ret = -1;
- call_frame_t *copy = NULL;
- dht_local_t *local = NULL;
- dht_local_t *copy_local = NULL;
- xlator_t *subvol = NULL;
- struct iatt stbuf = {0,};
+ int ret = -1;
+ call_frame_t *copy = NULL;
+ dht_local_t *local = NULL;
+ dht_local_t *copy_local = NULL;
+ xlator_t *subvol = NULL;
+ struct iatt stbuf = {0,};
+ dict_t *xattr = NULL;
local = frame->local;
@@ -327,6 +328,8 @@ dht_linkfile_attr_heal (call_frame_t *frame, xlator_t *this)
if (local->stbuf.ia_type == IA_INVAL)
return 0;
+ DHT_MARK_FOP_INTERNAL (xattr);
+
gf_uuid_copy (local->loc.gfid, local->stbuf.ia_gfid);
copy = copy_frame (frame);
@@ -348,8 +351,14 @@ dht_linkfile_attr_heal (call_frame_t *frame, xlator_t *this)
STACK_WIND (copy, dht_linkfile_setattr_cbk, subvol,
subvol->fops->setattr, &copy_local->loc,
- &stbuf, (GF_SET_ATTR_UID | GF_SET_ATTR_GID), NULL);
+ &stbuf, (GF_SET_ATTR_UID | GF_SET_ATTR_GID), xattr);
ret = 0;
out:
+ if ((ret < 0) && (copy))
+ DHT_STACK_DESTROY (copy);
+
+ if (xattr)
+ dict_unref (xattr);
+
return ret;
}
diff --git a/xlators/cluster/dht/src/dht-rename.c b/xlators/cluster/dht/src/dht-rename.c
index 4e4e9869685..097ae9ae200 100644
--- a/xlators/cluster/dht/src/dht-rename.c
+++ b/xlators/cluster/dht/src/dht-rename.c
@@ -369,22 +369,6 @@ dht_rename_track_for_changelog (xlator_t *this, dict_t *xattr,
}
-#define DHT_MARK_FOP_INTERNAL(xattr) do { \
- int tmp = -1; \
- if (!xattr) { \
- xattr = dict_new (); \
- if (!xattr) \
- break; \
- } \
- tmp = dict_set_str (xattr, GLUSTERFS_INTERNAL_FOP_KEY, "yes"); \
- if (tmp) { \
- gf_msg (this->name, GF_LOG_ERROR, 0, \
- DHT_MSG_DICT_SET_FAILED, \
- "Failed to set dictionary value: key = %s," \
- " path = %s", GLUSTERFS_INTERNAL_FOP_KEY, \
- local->loc.path); \
- } \
- }while (0)
#define DHT_MARKER_DONT_ACCOUNT(xattr) do { \
int tmp = -1; \
diff --git a/xlators/features/changelog/src/changelog.c b/xlators/features/changelog/src/changelog.c
index ed589793a37..bea733450c8 100644
--- a/xlators/features/changelog/src/changelog.c
+++ b/xlators/features/changelog/src/changelog.c
@@ -1220,6 +1220,8 @@ changelog_setattr (call_frame_t *frame,
priv = this->private;
CHANGELOG_NOT_ACTIVE_THEN_GOTO (frame, priv, wind);
+ CHANGELOG_IF_INTERNAL_FOP_THEN_GOTO (frame, xdata, wind);
+
CHANGELOG_OP_BOUNDARY_CHECK (frame, wind);
CHANGELOG_INIT (this, frame->local,