summaryrefslogtreecommitdiffstats
path: root/xlators/storage/posix/src/posix.h
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/storage/posix/src/posix.h')
-rw-r--r--xlators/storage/posix/src/posix.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h
index 81ea3d0f0b8..c2dcfdae9a1 100644
--- a/xlators/storage/posix/src/posix.h
+++ b/xlators/storage/posix/src/posix.h
@@ -76,6 +76,35 @@ struct posix_fd {
struct list_head list; /* to add to the janitor list */
};
+#define GFID_NULL_CHECK_AND_GOTO(frame, this, loc, xattr_req, op_ret, \
+ op_errno, out) \
+ do { \
+ void *_uuid_req = NULL; \
+ int _ret = 0; \
+ /* TODO: Remove pid check once trash implements client side \
+ * logic to assign gfid for entry creations inside .trashcan \
+ */ \
+ if (frame->root->pid == GF_SERVER_PID_TRASH) \
+ break; \
+ _ret = dict_get_ptr (xattr_req, "gfid-req", &_uuid_req); \
+ if (_ret) { \
+ gf_msg (this->name, GF_LOG_ERROR, EINVAL, \
+ P_MSG_NULL_GFID, "failed to get the gfid from" \
+ " dict for %s", loc->path); \
+ op_ret = -1; \
+ op_errno = EINVAL; \
+ goto out; \
+ } \
+ if (gf_uuid_is_null (_uuid_req)) { \
+ gf_msg (this->name, GF_LOG_ERROR, EINVAL, \
+ P_MSG_NULL_GFID, "gfid is null for %s", \
+ loc->path); \
+ op_ret = -1; \
+ op_errno = EINVAL; \
+ goto out; \
+ } \
+ } while (0)
+
struct posix_private {
char *base_path;