diff options
| -rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 38 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix.c | 28 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix.h | 8 | 
3 files changed, 68 insertions, 6 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index 7b130d4b9..5aa09d977 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -394,7 +394,7 @@ out:  int -posix_set_file_contents (xlator_t *this, char *real_path, +posix_set_file_contents (xlator_t *this, const char *real_path,                           data_pair_t *trav, int flags)  {          char *      key                        = NULL; @@ -476,7 +476,7 @@ out:  int -posix_get_file_contents (xlator_t *this, char *real_path, +posix_get_file_contents (xlator_t *this, const char *real_path,                           const char *name, char **contents)  {          char        real_filepath[ZR_PATH_MAX] = {0,}; @@ -546,7 +546,7 @@ out:  static int gf_xattr_enotsup_log;  int -posix_handle_pair (xlator_t *this, char *real_path, +posix_handle_pair (xlator_t *this, const char *real_path,                     data_pair_t *trav, int flags)  {          int sys_ret = -1; @@ -885,3 +885,35 @@ out:          return ret;  } +int +posix_entry_create_xattr_set (xlator_t *this, const char *path, +                             dict_t *dict) +{ +        data_pair_t *trav = NULL; +        int ret = -1; + +        trav = dict->members_list; +        while (trav) { +                if (!strcmp (GFID_XATTR_KEY, trav->key) || +                    !strcmp ("gfid-req", trav->key) || +                    !strcmp ("system.posix_acl_default", trav->key) || +                    !strcmp ("system.posix_acl_access", trav->key) || +                    ZR_FILE_CONTENT_REQUEST(trav->key)) { +                        trav = trav->next; +                        continue; +                } + +                ret = posix_handle_pair (this, path, trav, XATTR_CREATE); +                if (ret < 0) { +                        errno = -ret; +                        ret = -1; +                        goto out; +                } +                trav = trav->next; +        } + +        ret = 0; + +out: +        return ret; +} diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index d2cd79a75..fd9798007 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -827,6 +827,13 @@ posix_mknod (call_frame_t *frame, xlator_t *this,                          strerror (errno));          } +        op_ret = posix_entry_create_xattr_set (this, real_path, params); +        if (op_ret) { +                gf_log (this->name, GF_LOG_ERROR, +                        "setting xattrs on %s failed (%s)", loc->path, +                        strerror (errno)); +        } +          op_ret = posix_lstat_with_gfid (this, real_path, &stbuf);          if (op_ret == -1) {                  op_errno = errno; @@ -953,6 +960,13 @@ posix_mkdir (call_frame_t *frame, xlator_t *this,                          strerror (errno));          } +        op_ret = posix_entry_create_xattr_set (this, real_path, params); +        if (op_ret) { +                gf_log (this->name, GF_LOG_ERROR, +                        "setting xattrs on %s failed (%s)", loc->path, +                        strerror (errno)); +        } +          op_ret = posix_lstat_with_gfid (this, real_path, &stbuf);          if (op_ret == -1) {                  op_errno = errno; @@ -1265,6 +1279,13 @@ posix_symlink (call_frame_t *frame, xlator_t *this,                          strerror (errno));          } +        op_ret = posix_entry_create_xattr_set (this, real_path, params); +        if (op_ret) { +                gf_log (this->name, GF_LOG_ERROR, +                        "setting xattrs on %s failed (%s)", loc->path, +                        strerror (errno)); +        } +          op_ret = posix_lstat_with_gfid (this, real_path, &stbuf);          if (op_ret == -1) {                  op_errno = errno; @@ -1718,6 +1739,13 @@ posix_create (call_frame_t *frame, xlator_t *this,                          strerror (errno));          } +        op_ret = posix_entry_create_xattr_set (this, real_path, params); +        if (op_ret) { +                gf_log (this->name, GF_LOG_ERROR, +                        "setting xattrs on %s failed (%s)", loc->path, +                        strerror (errno)); +        } +          op_ret = posix_fstat_with_gfid (this, _fd, &stbuf);          if (op_ret == -1) {                  op_errno = errno; diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h index f57bc0d7b..b49401810 100644 --- a/xlators/storage/posix/src/posix.h +++ b/xlators/storage/posix/src/posix.h @@ -134,16 +134,18 @@ int posix_fstat_with_gfid (xlator_t *this, int fd, struct iatt *stbuf_p);  int posix_lstat_with_gfid (xlator_t *this, const char *path, struct iatt *buf);  dict_t *posix_lookup_xattr_fill (xlator_t *this, const char *path,                                   loc_t *loc, dict_t *xattr, struct iatt *buf); -int posix_handle_pair (xlator_t *this, char *real_path, +int posix_handle_pair (xlator_t *this, const char *real_path,                         data_pair_t *trav, int flags);  int posix_fhandle_pair (xlator_t *this, int fd, data_pair_t *trav, int flags);  void posix_spawn_janitor_thread (xlator_t *this); -int posix_get_file_contents (xlator_t *this, char *path, +int posix_get_file_contents (xlator_t *this, const char *path,                               const char *name, char **contents); -int posix_set_file_contents (xlator_t *this, char *path, +int posix_set_file_contents (xlator_t *this, const char *path,                               data_pair_t *trav, int flags);  int posix_acl_xattr_set (xlator_t *this, const char *path, dict_t *xattr_req);  int posix_gfid_heal (xlator_t *this, const char *path, dict_t *xattr_req); +int posix_entry_create_xattr_set (xlator_t *this, const char *path, +                                  dict_t *dict);  #endif /* _POSIX_H */  | 
