diff options
| author | Pranith Kumar K <pkarampu@redhat.com> | 2013-07-30 12:28:47 +0530 | 
|---|---|---|
| committer | Vijay Bellur <vbellur@redhat.com> | 2013-08-02 02:11:29 -0700 | 
| commit | 423aa0d57a031e865374d18cdcc489273317d785 (patch) | |
| tree | a56ad18294759a62d07fda39a2d4ac0556a06c04 | |
| parent | a1ece79c84c0306d38cb42cfa947dbc387af3ad0 (diff) | |
storage/posix: Enable Open-fd-count query in writev
Change-Id: I86bdf865730416150c10617dcbad5c037579acde
BUG: 910217
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/5433
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
| -rw-r--r-- | xlators/storage/posix/src/posix.c | 40 | 
1 files changed, 39 insertions, 1 deletions
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c index 0a7030213b5..e9502bfe5f4 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -2198,6 +2198,40 @@ err:          return op_ret;  } +dict_t* +_fill_open_fd_count (fd_t *fd, dict_t *xdata, xlator_t *this) +{ +        dict_t  *rsp_xdata = NULL; +        int32_t ret = 0; +        inode_t *inode = NULL; + +        if (fd) +                inode = fd->inode; + +        if (!fd || !fd->inode || uuid_is_null (fd->inode->gfid)) { +                gf_log_callingfn (this->name, GF_LOG_ERROR, "Invalid Args: " +                                  "fd: %p inode: %p gfid:%s", fd, inode?inode:0, +                                  inode?uuid_utoa(inode->gfid):"N/A"); +                goto out; +        } + +        if (!xdata || !dict_get (xdata, GLUSTERFS_OPEN_FD_COUNT)) +                goto out; + +        rsp_xdata = dict_new(); +        if (!rsp_xdata) +                goto out; + +        ret = dict_set_uint32 (rsp_xdata, GLUSTERFS_OPEN_FD_COUNT, +                               fd->inode->fd_count); +        if (ret < 0) { +                gf_log (this->name, GF_LOG_WARNING, "%s: Failed to set " +                        "dictionary value for %s", uuid_utoa (fd->inode->gfid), +                        GLUSTERFS_OPEN_FD_COUNT); +        } +out: +        return rsp_xdata; +}  int32_t  posix_writev (call_frame_t *frame, xlator_t *this, fd_t *fd, @@ -2212,6 +2246,7 @@ posix_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          struct iatt            preop    = {0,};          struct iatt            postop    = {0,};          int                      ret      = -1; +        dict_t                *rsp_xdata = NULL;          VALIDATE_OR_GOTO (frame, out);          VALIDATE_OR_GOTO (this, out); @@ -2259,6 +2294,7 @@ posix_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          UNLOCK (&priv->lock);          if (op_ret >= 0) { +                rsp_xdata = _fill_open_fd_count (fd, xdata, this);                  /* wiretv successful, we also need to get the stat of                   * the file we wrote to                   */ @@ -2289,8 +2325,10 @@ posix_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,  out:          STACK_UNWIND_STRICT (writev, frame, op_ret, op_errno, &preop, &postop, -                             NULL); +                             rsp_xdata); +        if (rsp_xdata) +                dict_unref (rsp_xdata);          return 0;  }  | 
