summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libglusterfs/src/glusterfs.h4
-rw-r--r--libglusterfs/src/upcall-utils.h2
-rw-r--r--xlators/cluster/afr/src/afr-common.c3
-rw-r--r--xlators/cluster/ec/src/ec.c13
-rw-r--r--xlators/performance/md-cache/src/md-cache.c4
5 files changed, 18 insertions, 8 deletions
diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h
index c1bb29ad974..ab24e9a45f8 100644
--- a/libglusterfs/src/glusterfs.h
+++ b/libglusterfs/src/glusterfs.h
@@ -287,10 +287,6 @@
#define GF_LK_ADVISORY 0
#define GF_LK_MANDATORY 1
-/* md-cache keys */
-#define MDC_INVALIDATE_IATT "mdc.invalidate.iatt"
-#define MDC_INVALIDATE_XATT "mdc.invalidate.xatt"
-
const char *fop_enum_to_pri_string (glusterfs_fop_t fop);
const char *fop_enum_to_string (glusterfs_fop_t fop);
diff --git a/libglusterfs/src/upcall-utils.h b/libglusterfs/src/upcall-utils.h
index 47049fd7014..3b5dce33e45 100644
--- a/libglusterfs/src/upcall-utils.h
+++ b/libglusterfs/src/upcall-utils.h
@@ -35,6 +35,8 @@
#define UP_EXPLICIT_LOOKUP 0x00001000 /* Request an explicit lookup */
+#define UP_INVAL_ATTR 0x00002000 /* Request to invalidate iatt and xatt */
+
/* for fops - open, read, lk, */
#define UP_UPDATE_CLIENT (UP_ATIME)
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 46396cf1163..a400031b404 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -4807,8 +4807,7 @@ afr_notify (xlator_t *this, int32_t event,
break;
for (i = 0; i < priv->child_count; i++) {
if (dict_get (up_ci->dict, priv->pending_key[i])) {
- ret = dict_set_int8 (up_ci->dict,
- MDC_INVALIDATE_IATT, 0);
+ up_ci->flags |= UP_INVAL_ATTR;
itable = ((xlator_t *)this->graph->top)->itable;
/*Internal processes may not have itable for top xlator*/
if (itable)
diff --git a/xlators/cluster/ec/src/ec.c b/xlators/cluster/ec/src/ec.c
index 677761256b4..4d550176f19 100644
--- a/xlators/cluster/ec/src/ec.c
+++ b/xlators/cluster/ec/src/ec.c
@@ -11,6 +11,7 @@
#include "defaults.h"
#include "statedump.h"
#include "compat-errno.h"
+#include "upcall-utils.h"
#include "ec.h"
#include "ec-messages.h"
@@ -472,10 +473,21 @@ ec_notify (xlator_t *this, int32_t event, void *data, void *data2)
dict_t *output = NULL;
gf_boolean_t propagate = _gf_true;
int32_t orig_event = event;
+ struct gf_upcall *up_data = NULL;
+ struct gf_upcall_cache_invalidation *up_ci = NULL;
gf_msg_trace (this->name, 0, "NOTIFY(%d): %p, %p",
event, data, data2);
+ if (event == GF_EVENT_UPCALL) {
+ up_data = (struct gf_upcall *)data;
+ if (up_data->event_type == GF_UPCALL_CACHE_INVALIDATION) {
+ up_ci = (struct gf_upcall_cache_invalidation *)up_data->data;
+ up_ci->flags |= UP_INVAL_ATTR;
+ }
+ goto done;
+ }
+
if (event == GF_EVENT_TRANSLATOR_OP) {
if (!ec->up) {
error = -1;
@@ -542,6 +554,7 @@ ec_notify (xlator_t *this, int32_t event, void *data, void *data2)
unlock:
UNLOCK (&ec->lock);
+done:
if (propagate) {
error = default_notify (this, event, data);
}
diff --git a/xlators/performance/md-cache/src/md-cache.c b/xlators/performance/md-cache/src/md-cache.c
index 9edbdf4aebe..9806e642c9a 100644
--- a/xlators/performance/md-cache/src/md-cache.c
+++ b/xlators/performance/md-cache/src/md-cache.c
@@ -2644,8 +2644,8 @@ mdc_invalidate (xlator_t *this, void *data)
goto out;
}
- if ((up_ci->flags & (UP_NLINK | UP_RENAME_FLAGS | UP_FORGET)) ||
- (up_ci->dict && dict_get (up_ci->dict, MDC_INVALIDATE_IATT))) {
+ if (up_ci->flags &
+ (UP_NLINK | UP_RENAME_FLAGS | UP_FORGET | UP_INVAL_ATTR)) {
mdc_inode_iatt_invalidate (this, inode);
mdc_inode_xatt_invalidate (this, inode);
INCREMENT_ATOMIC (conf->mdc_counter.lock,