From 8facd588f20ef8305b6f6b53da0f6d54d300093b Mon Sep 17 00:00:00 2001 From: Poornima G Date: Wed, 16 Dec 2015 05:45:03 -0500 Subject: upcall: pass dict with xattrs on xattr invalidation In case of xattr invalidation, return a dict containing the updated xattrs. [ndevos: move chunks to change 12995 and only address the xattrs-dict here] Change-Id: I8733f06a519a9a0f24be1bb4b2c38c9c9dce0ce2 BUG: 1211863 Signed-off-by: Poornima G Reviewed-on: http://review.gluster.org/12996 Smoke: Gluster Build System CentOS-regression: Gluster Build System NetBSD-regression: NetBSD Build System Reviewed-by: Niels de Vos Reviewed-by: soumya k Tested-by: soumya k --- libglusterfs/src/common-utils.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'libglusterfs/src/common-utils.c') diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 45886dae3ee..a225c957f2e 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -36,6 +36,7 @@ #endif #include +#include "glusterfs-acl.h" #include "compat-errno.h" #include "logging.h" #include "common-utils.h" @@ -4449,3 +4450,36 @@ gf_zero_fill_stat (struct iatt *buf) buf->ia_nlink = 0; buf->ia_ctime = 0; } + +/* This function checks if the input key is a virtual or on disk xattr. + * Its not simple to identify a virtual xattr as there is no common + * format used to identify virtual xattrs. One way is to list each of the + * xattrs in different categories and compare the input against every xattr + * in the list, this is very inefficient as there are 100s of xattrs. + * + * Currently the only consumer of this function is upcall and md-cache, + * hence tailoring this function to their needs; in their case its allowed + * to consider disk xattrs as virtual xattrs, but not vice versa, i.e. + * virtual xattrs should not be considered as on disk xattr. Hence, being + * conservative, we consider anything that starts from user.*, security.*, + * system.* as on disk xattrs. trusted.* and glusterfs.* cannot be considered + * as virtual xattrs as there are some on disk xattrs which start from + * glusterfs.* and trusted.* + * + * Hence, this function could return an on disk xattr as virtual xattr but + * never a virtual xattr as on disk xattr. + */ +gf_boolean_t +is_virtual_xattr (const char *k) +{ + gf_boolean_t ret = _gf_true; + + if ((strncmp (k, "user.", strlen ("user.")) == 0) || + (strncmp (k, "security.", strlen ("security.")) == 0) || + (strncmp (k, "system.", strlen ("system.")) == 0) || + (GF_POSIX_ACL_REQUEST (k))) { + ret = _gf_false; + } + + return ret; +} -- cgit