summaryrefslogtreecommitdiffstats
path: root/xlators/features/upcall/src
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/features/upcall/src')
-rw-r--r--xlators/features/upcall/src/upcall-cache-invalidation.h3
-rw-r--r--xlators/features/upcall/src/upcall-internal.c71
-rw-r--r--xlators/features/upcall/src/upcall-messages.h1
-rw-r--r--xlators/features/upcall/src/upcall.c153
-rw-r--r--xlators/features/upcall/src/upcall.h32
5 files changed, 123 insertions, 137 deletions
diff --git a/xlators/features/upcall/src/upcall-cache-invalidation.h b/xlators/features/upcall/src/upcall-cache-invalidation.h
index c39962b68c4..edb8285827f 100644
--- a/xlators/features/upcall/src/upcall-cache-invalidation.h
+++ b/xlators/features/upcall/src/upcall-cache-invalidation.h
@@ -33,6 +33,7 @@
delete the cache entry */
#define UP_FORGET 0x00000100 /* inode_forget on server side -
invalidate the cache entry */
+#define UP_PARENT_TIMES 0x00000200 /* update parent dir times */
/* for fops - open, read, lk, */
#define UP_UPDATE_CLIENT (UP_ATIME)
@@ -48,7 +49,7 @@
/* to invalidate parent directory entries for fops -rename, unlink,
* rmdir, mkdir, create */
-#define UP_PARENT_DENTRY_FLAGS (UP_TIMES)
+#define UP_PARENT_DENTRY_FLAGS (UP_PARENT_TIMES)
/* for fop - unlink, link, rmdir, mkdir */
#define UP_NLINK_FLAGS (UP_NLINK | UP_TIMES)
diff --git a/xlators/features/upcall/src/upcall-internal.c b/xlators/features/upcall/src/upcall-internal.c
index af5134034eb..19c9f9e5f24 100644
--- a/xlators/features/upcall/src/upcall-internal.c
+++ b/xlators/features/upcall/src/upcall-internal.c
@@ -294,7 +294,7 @@ upcall_cleanup_expired_clients (xlator_t *this,
goto out;
}
gf_log (THIS->name, GF_LOG_TRACE,
- "Cleaned up client_entry(%s) of",
+ "Cleaned up client_entry(%s)",
up_client->client_uid);
}
}
@@ -450,24 +450,6 @@ upcall_reaper_thread_init (xlator_t *this)
return ret;
}
-void
-upcall_cache_invalidate_dir (call_frame_t *frame, xlator_t *this,
- client_t *client, inode_t *inode, uint32_t flags)
-{
- dentry_t *dentry;
- dentry_t *dentry_tmp;
-
- if (!is_cache_invalidation_enabled(this))
- return;
-
- list_for_each_entry_safe (dentry, dentry_tmp,
- &inode->dentry_list,
- inode_list) {
- upcall_cache_invalidate (frame, this, client,
- dentry->inode, flags);
- }
-}
-
/*
* Given a gfid, client, first fetch upcall_entry_t based on gfid.
* Later traverse through the client list of that upcall entry. If this client
@@ -480,7 +462,8 @@ upcall_cache_invalidate_dir (call_frame_t *frame, xlator_t *this,
*/
void
upcall_cache_invalidate (call_frame_t *frame, xlator_t *this, client_t *client,
- inode_t *inode, uint32_t flags)
+ inode_t *inode, uint32_t flags, struct iatt *stbuf,
+ struct iatt *p_stbuf, struct iatt *oldp_stbuf)
{
upcall_client_t *up_client = NULL;
upcall_client_t *up_client_entry = NULL;
@@ -536,7 +519,8 @@ upcall_cache_invalidate (call_frame_t *frame, xlator_t *this, client_t *client,
upcall_client_cache_invalidate(this,
inode->gfid,
up_client_entry,
- flags);
+ flags, stbuf,
+ p_stbuf, oldp_stbuf);
}
if (!found) {
@@ -556,28 +540,50 @@ upcall_cache_invalidate (call_frame_t *frame, xlator_t *this, client_t *client,
void
upcall_client_cache_invalidate (xlator_t *this, uuid_t gfid,
upcall_client_t *up_client_entry,
- uint32_t flags)
+ uint32_t flags, struct iatt *stbuf,
+ struct iatt *p_stbuf,
+ struct iatt *oldp_stbuf)
{
- notify_event_data_t n_event_data;
- time_t timeout = 0;
+ struct gf_upcall up_req = {0,};
+ struct gf_upcall_cache_invalidation ca_req = {0,};
+ time_t timeout = 0;
+ int ret = -1;
time_t t_expired = time(NULL) - up_client_entry->access_time;
timeout = get_cache_invalidation_timeout(this);
if (t_expired < timeout) {
/* Send notify call */
- gf_uuid_copy(n_event_data.gfid, gfid);
- n_event_data.client_entry = up_client_entry;
- n_event_data.event_type = GF_UPCALL_CACHE_INVALIDATION;
- n_event_data.invalidate_flags = flags;
-
- /* Need to send inode flags */
- this->notify (this, GF_EVENT_UPCALL, &n_event_data);
+ up_req.client_uid = up_client_entry->client_uid;
+ gf_uuid_copy (up_req.gfid, gfid);
+
+ ca_req.flags = flags;
+ ca_req.expire_time_attr =
+ up_client_entry->expire_time_attr;
+ if (stbuf)
+ ca_req.stat = *stbuf;
+ if (p_stbuf)
+ ca_req.p_stat = *p_stbuf;
+ if (oldp_stbuf)
+ ca_req.oldp_stat = *oldp_stbuf;
+
+ up_req.data = &ca_req;
+ up_req.event_type = GF_UPCALL_CACHE_INVALIDATION;
gf_log (THIS->name, GF_LOG_TRACE,
"Cache invalidation notification sent to %s",
up_client_entry->client_uid);
+ /* Need to send inode flags */
+ ret = this->notify (this, GF_EVENT_UPCALL, &up_req);
+
+ /*
+ * notify may fail as the client could have been
+ * dis(re)connected. Cleanup the client entry.
+ */
+ if (ret < 0)
+ __upcall_cleanup_client_entry (up_client_entry);
+
} else {
if (t_expired > (2*timeout)) {
/* Cleanup the entry */
@@ -621,7 +627,8 @@ upcall_cache_forget (xlator_t *this, inode_t *inode, upcall_inode_ctx_t *up_inod
upcall_client_cache_invalidate(this,
inode->gfid,
up_client_entry,
- flags);
+ flags, NULL,
+ NULL, NULL);
}
}
diff --git a/xlators/features/upcall/src/upcall-messages.h b/xlators/features/upcall/src/upcall-messages.h
index 7b004d678c3..5472b4a5cbd 100644
--- a/xlators/features/upcall/src/upcall-messages.h
+++ b/xlators/features/upcall/src/upcall-messages.h
@@ -57,6 +57,7 @@
*/
#define UPCALL_MSG_NO_MEMORY (GLFS_COMP_BASE_UPCALL + 1)
#define UPCALL_MSG_INTERNAL_ERROR (GLFS_COMP_BASE_UPCALL + 2)
+#define UPCALL_MSG_NOTIFY_FAILED (GLFS_COMP_BASE_UPCALL + 3)
#define glfs_msg_end_x GLFS_MSGID_END, "Invalid: End of messages"
diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c
index c68c0258fb8..5f6c29e1b79 100644
--- a/xlators/features/upcall/src/upcall.c
+++ b/xlators/features/upcall/src/upcall.c
@@ -51,7 +51,8 @@ up_open_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (open, frame, op_ret, op_errno, fd, xdata);
@@ -105,7 +106,8 @@ up_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_WRITE_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ postbuf, NULL, NULL);
out:
UPCALL_STACK_UNWIND (writev, frame, op_ret, op_errno,
@@ -166,7 +168,8 @@ up_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (readv, frame, op_ret, op_errno, vector,
@@ -224,7 +227,8 @@ up_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (lk, frame, op_ret, op_errno, lock, xdata);
@@ -278,7 +282,8 @@ up_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_WRITE_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ postbuf, NULL, NULL);
out:
UPCALL_STACK_UNWIND (truncate, frame, op_ret, op_errno,
@@ -339,7 +344,8 @@ up_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
* Bug1200271.
*/
flags = UP_ATTR_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ statpost, NULL, NULL);
out:
UPCALL_STACK_UNWIND (setattr, frame, op_ret, op_errno,
@@ -397,17 +403,9 @@ up_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
if ((op_ret < 0) || !local) {
goto out;
}
- flags = UP_RENAME_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
-
- /* Need to invalidate old and new parent entries as well */
- flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
-
- /* notify oldparent as well */
- flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client,
- local->rename_oldloc.inode, flags);
+ flags = (UP_RENAME_FLAGS | UP_PARENT_DENTRY_FLAGS);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ stbuf, postnewparent, postoldparent);
out:
UPCALL_STACK_UNWIND (rename, frame, op_ret, op_errno,
@@ -466,12 +464,9 @@ up_unlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
if ((op_ret < 0) || !local) {
goto out;
}
- flags = UP_NLINK_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
-
- flags = UP_PARENT_DENTRY_FLAGS;
- /* invalidate parent's entry too */
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
+ flags = (UP_NLINK_FLAGS | UP_PARENT_DENTRY_FLAGS);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, postparent, NULL);
out:
UPCALL_STACK_UNWIND (unlink, frame, op_ret, op_errno,
@@ -526,10 +521,10 @@ up_link_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
if ((op_ret < 0) || !local) {
goto out;
}
- flags = UP_NLINK_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ flags = (UP_NLINK_FLAGS | UP_PARENT_DENTRY_FLAGS);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ stbuf, postparent, NULL);
- /* do we need to update parent as well?? */
out:
UPCALL_STACK_UNWIND (link, frame, op_ret, op_errno,
inode, stbuf, preparent, postparent, xdata);
@@ -584,12 +579,10 @@ up_rmdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
if ((op_ret < 0) || !local) {
goto out;
}
- flags = UP_NLINK_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
- /* invalidate parent's entry too */
- flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
+ flags = (UP_NLINK_FLAGS | UP_PARENT_DENTRY_FLAGS);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, postparent, NULL);
out:
UPCALL_STACK_UNWIND (rmdir, frame, op_ret, op_errno,
@@ -648,7 +641,8 @@ up_mkdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
/* invalidate parent's entry too */
flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ stbuf, postparent, NULL);
out:
UPCALL_STACK_UNWIND (mkdir, frame, op_ret, op_errno,
@@ -709,7 +703,8 @@ up_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
/* As its a new file create, no need of sending notification */
/* However invalidate parent's entry */
flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ stbuf, postparent, NULL);
out:
UPCALL_STACK_UNWIND (create, frame, op_ret, op_errno, fd,
@@ -769,7 +764,8 @@ up_lookup_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (lookup, frame, op_ret, op_errno, inode, stbuf,
@@ -826,7 +822,8 @@ up_stat_cbk (call_frame_t *frame, void *cookie,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (stat, frame, op_ret, op_errno, buf,
@@ -939,7 +936,8 @@ up_access_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (access, frame, op_ret, op_errno, xdata);
@@ -994,7 +992,8 @@ up_readlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (readlink, frame, op_ret, op_errno, path, stbuf,
@@ -1054,7 +1053,8 @@ up_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
/* invalidate parent's entry too */
flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ buf, postparent, NULL);
out:
UPCALL_STACK_UNWIND (mknod, frame, op_ret, op_errno, inode, buf,
@@ -1114,7 +1114,8 @@ up_symlink_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
/* invalidate parent's entry too */
flags = UP_PARENT_DENTRY_FLAGS;
- upcall_cache_invalidate_dir (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ buf, postparent, NULL);
out:
UPCALL_STACK_UNWIND (symlink, frame, op_ret, op_errno, inode, buf,
@@ -1172,7 +1173,8 @@ up_opendir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (opendir, frame, op_ret, op_errno, fd, xdata);
@@ -1227,7 +1229,8 @@ up_statfs_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (statfs, frame, op_ret, op_errno, buf, xdata);
@@ -1282,7 +1285,8 @@ up_readdir_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_UPDATE_CLIENT;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ NULL, NULL, NULL);
out:
UPCALL_STACK_UNWIND (readdir, frame, op_ret, op_errno, entries, xdata);
@@ -1396,7 +1400,8 @@ up_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_WRITE_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ post, NULL, NULL);
out:
UPCALL_STACK_UNWIND (fallocate, frame, op_ret, op_errno, pre,
@@ -1453,7 +1458,8 @@ up_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_WRITE_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ post, NULL, NULL);
out:
UPCALL_STACK_UNWIND (discard, frame, op_ret, op_errno, pre,
@@ -1510,7 +1516,8 @@ up_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,
goto out;
}
flags = UP_WRITE_FLAGS;
- upcall_cache_invalidate (frame, this, client, local->inode, flags);
+ upcall_cache_invalidate (frame, this, client, local->inode, flags,
+ post, NULL, NULL);
out:
UPCALL_STACK_UNWIND (zerofill, frame, op_ret, op_errno, pre,
@@ -1725,10 +1732,7 @@ notify (xlator_t *this, int32_t event, void *data, ...)
{
int ret = -1;
int32_t val = 0;
- notify_event_data_t *notify_event = NULL;
- struct gf_upcall up_req = {0,};
- upcall_client_t *up_client_entry = NULL;
- struct gf_upcall_cache_invalidation ca_req = {0,};
+ struct gf_upcall *up_req = NULL;
switch (event) {
case GF_EVENT_UPCALL:
@@ -1736,41 +1740,20 @@ notify (xlator_t *this, int32_t event, void *data, ...)
gf_log (this->name, GF_LOG_DEBUG, "Upcall Notify event = %d",
event);
- notify_event = (notify_event_data_t *) data;
- up_client_entry = notify_event->client_entry;
+ up_req = (struct gf_upcall *) data;
- if (!up_client_entry) {
- goto out;
- }
+ GF_VALIDATE_OR_GOTO(this->name, up_req, out);
+
+ ret = default_notify (this, event, up_req);
- up_req.client_uid = up_client_entry->client_uid;
-
- gf_uuid_copy (up_req.gfid, notify_event->gfid);
- gf_log (this->name, GF_LOG_DEBUG,
- "Sending notify to the client- %s, gfid - %s",
- up_client_entry->client_uid, up_req.gfid);
-
- switch (notify_event->event_type) {
- case GF_UPCALL_CACHE_INVALIDATION:
- ca_req.flags = notify_event->invalidate_flags;
- ca_req.expire_time_attr =
- up_client_entry->expire_time_attr;
- up_req.data = &ca_req;
- break;
- default:
+ if (ret) {
+ gf_msg (this->name, GF_LOG_WARNING, 0,
+ UPCALL_MSG_NOTIFY_FAILED,
+ "Failed to notify cache invalidation"
+ " to client(%s)",
+ up_req->client_uid);
goto out;
}
-
- up_req.event_type = notify_event->event_type;
-
- ret = default_notify (this, event, &up_req);
-
- /*
- * notify may fail as the client could have been
- * dis(re)connected. Cleanup the client entry.
- */
- if (ret < 0)
- __upcall_cleanup_client_entry (up_client_entry);
}
break;
default:
@@ -1784,7 +1767,15 @@ out:
}
struct xlator_fops fops = {
- /* fops which do not trigger upcall
+ /* fops which change only "ATIME" do not result
+ * in any cache invalidation. Hence upcall
+ * notifications are not sent in this case.
+ * But however, we need to store/update the
+ * client info in the upcall state to be able
+ * to notify them incase of any changes done
+ * to the data.
+ *
+ * Below such fops do not trigger upcall
* notifications but will add/update
* clients info in the upcall inode ctx.*/
.lookup = up_lookup,
diff --git a/xlators/features/upcall/src/upcall.h b/xlators/features/upcall/src/upcall.h
index 41895786382..295ddc26167 100644
--- a/xlators/features/upcall/src/upcall.h
+++ b/xlators/features/upcall/src/upcall.h
@@ -16,15 +16,11 @@
#endif
#include "compat-errno.h"
-#include "stack.h"
-#include "call-stub.h"
#include "upcall-mem-types.h"
#include "client_t.h"
-#include "rpcsvc.h"
-#include "lkowner.h"
-#include "locking.h"
#include "upcall-messages.h"
#include "upcall-cache-invalidation.h"
+#include "upcall-utils.h"
#define EXIT_IF_UPCALL_OFF(this, label) do { \
if (!is_upcall_enabled(this)) \
@@ -84,18 +80,6 @@ struct _upcall_inode_ctx_t {
};
typedef struct _upcall_inode_ctx_t upcall_inode_ctx_t;
-struct _notify_event_data {
- uuid_t gfid;
- upcall_client_t *client_entry;
- gf_upcall_event_t event_type;
- uint32_t invalidate_flags;
- /* any extra data needed, like inode flags
- * to be invalidated incase of cache invalidation,
- * may be fd for lease recalls */
- void *extra;
-};
-typedef struct _notify_event_data notify_event_data_t;
-
struct upcall_local {
/* XXX: need to check if we can store
* pointers in 'local' which may get freed
@@ -137,13 +121,15 @@ int upcall_reaper_thread_init (xlator_t *this);
gf_boolean_t is_upcall_enabled(xlator_t *this);
/* Cache invalidation specific */
-void upcall_cache_invalidate (call_frame_t *frame, xlator_t *this, client_t *client,
- inode_t *inode, uint32_t flags);
+void upcall_cache_invalidate (call_frame_t *frame, xlator_t *this,
+ client_t *client, inode_t *inode,
+ uint32_t flags, struct iatt *stbuf,
+ struct iatt *p_stbuf,
+ struct iatt *oldp_stbuf);
void upcall_client_cache_invalidate (xlator_t *xl, uuid_t gfid,
upcall_client_t *up_client_entry,
- uint32_t flags);
-void upcall_cache_invalidate_dir (call_frame_t *frame, xlator_t *this,
- client_t *client, inode_t *inode,
- uint32_t flags);
+ uint32_t flags, struct iatt *stbuf,
+ struct iatt *p_stbuf,
+ struct iatt *oldp_stbuf);
#endif /* __UPCALL_H__ */