diff options
| -rw-r--r-- | libglusterfs/src/fd.c | 4 | ||||
| -rw-r--r-- | libglusterfs/src/fd.h | 5 | ||||
| -rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 16 | 
3 files changed, 13 insertions, 12 deletions
diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c index 297d7036216..7d9a0cc1c5e 100644 --- a/libglusterfs/src/fd.c +++ b/libglusterfs/src/fd.c @@ -314,8 +314,7 @@ gf_fd_put (fdtable_t *fdtable, int32_t fd)          fd_t *fdptr = NULL;          fdentry_t *fde = NULL; -        if (fd == -2) -                /* anonymous fd */ +        if (fd == GF_ANON_FD_NO)                  return;          if (fdtable == NULL || fd < 0) { @@ -786,6 +785,7 @@ __fd_anonymous (inode_t *inode)                          return NULL;                  fd->anonymous = _gf_true; +                fd->flags = GF_ANON_FD_FLAGS;                  __fd_bind (fd); diff --git a/libglusterfs/src/fd.h b/libglusterfs/src/fd.h index 412fcc5d6a4..2e93f76988a 100644 --- a/libglusterfs/src/fd.h +++ b/libglusterfs/src/fd.h @@ -25,6 +25,7 @@  #include "common-utils.h"  #define GF_ANON_FD_NO -2 +#define GF_ANON_FD_FLAGS (O_RDWR|O_LARGEFILE)  struct _inode;  struct _dict; @@ -52,7 +53,9 @@ struct _fd {  	struct _fd_ctx   *_ctx;          int               xl_count; /* Number of xl referred in this fd */          struct fd_lk_ctx *lk_ctx; -        gf_boolean_t      anonymous; /* geo-rep anonymous fd */ +        gf_boolean_t      anonymous; /* fd which does not have counterpart open +                                        fd on backend (server for client, posix +                                        for server). */  };  typedef struct _fd fd_t; diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index ba42272065b..aaa9ac1ee29 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -1633,18 +1633,12 @@ __posix_fd_ctx_get (fd_t *fd, xlator_t *this, struct posix_fd **pfd_p)                  goto out;          }          if (!fd_is_anonymous(fd)) { -                gf_msg (this->name, GF_LOG_ERROR, 0, -                        P_MSG_READ_FAILED, +                gf_msg (this->name, GF_LOG_ERROR, 0, P_MSG_READ_FAILED,                          "Failed to get fd context for a non-anonymous fd, " -                        "file: %s, gfid: %s", real_path, -                        uuid_utoa (fd->inode->gfid)); +                        "gfid: %s", uuid_utoa (fd->inode->gfid));                  goto out;          } -        if (!fd_is_anonymous(fd)) -                /* anonymous fd */ -                goto out; -          MAKE_HANDLE_PATH (real_path, this, fd->inode->gfid, NULL);          if (!real_path) {                  gf_msg (this->name, GF_LOG_ERROR, 0, @@ -1671,8 +1665,12 @@ __posix_fd_ctx_get (fd_t *fd, xlator_t *this, struct posix_fd **pfd_p)                  _fd = dirfd (dir);          } +        /* Using fd->flags in case we choose to have anonymous +         * fds with different flags some day. As of today it +         * would be GF_ANON_FD_FLAGS and nothing else. +         */          if (fd->inode->ia_type == IA_IFREG) { -                _fd = open (real_path, O_RDWR|O_LARGEFILE); +                _fd = open (real_path, fd->flags);                  if (_fd == -1) {                          POSIX_GET_FILE_UNLINK_PATH (priv->base_path,                                                      fd->inode->gfid,  | 
