diff options
| author | N Balachandran <nbalacha@redhat.com> | 2017-08-04 08:52:31 +0530 | 
|---|---|---|
| committer | N Balachandran <nbalacha@redhat.com> | 2017-08-04 08:56:21 +0000 | 
| commit | 6d1068ddb35be19df36210c9fcaa7ce97e2a376a (patch) | |
| tree | a5afde2e2ad369086cac2d044f505275c40c8937 | |
| parent | 2e7daeffef05c6100cbcc39f1be62935711db3eb (diff) | |
Revert "cluster/dht: Check for open fd only on EBADF"
This reverts commit 91c9f4a19fde4894576b398252c77f730832a26a.
This patch needs to be reworked.
Change-Id: I4c24f647c2b1abc68fc4e9fe6eb810418e2033aa
BUG: 1476665
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Reviewed-on: https://review.gluster.org/17970
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
| -rw-r--r-- | xlators/cluster/dht/src/dht-inode-read.c | 102 | ||||
| -rw-r--r-- | xlators/cluster/dht/src/dht-inode-write.c | 174 | 
2 files changed, 160 insertions, 116 deletions
diff --git a/xlators/cluster/dht/src/dht-inode-read.c b/xlators/cluster/dht/src/dht-inode-read.c index 664c4adf4eb..58a04302888 100644 --- a/xlators/cluster/dht/src/dht-inode-read.c +++ b/xlators/cluster/dht/src/dht-inode-read.c @@ -173,13 +173,6 @@ dht_file_attr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (local->call_cnt != 1)                  goto out; @@ -384,6 +377,8 @@ dht_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)          dht_layout_t *layout = NULL;          int           i = 0;          int           call_cnt = 0; +        int           ret      = -1; +          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -409,10 +404,19 @@ dht_fstat (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)                  local->call_cnt = 1;                  subvol = local->cached_subvol; +                if (dht_fd_open_on_dst (this, fd, subvol)) { + +                        STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol, +                                           subvol, subvol->fops->fstat, fd, +                                           xdata); + +                } else { +                        ret = dht_check_and_open_fd_on_subvol (this, frame); + +                        if (ret) +                                goto err; +                } -                STACK_WIND_COOKIE (frame, dht_file_attr_cbk, subvol, -                                   subvol, subvol->fops->fstat, fd, -                                   xdata);                  return 0;          } @@ -458,13 +462,6 @@ dht_readv_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if ((op_ret == -1) && !dht_inode_missing(op_errno))                  goto out; -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          local->op_errno = op_errno;          if ((op_ret == -1) || IS_DHT_MIGRATION_PHASE2 (stbuf)) { @@ -548,6 +545,7 @@ dht_readv (call_frame_t *frame, xlator_t *this,          xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; +        int           ret      = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -575,10 +573,19 @@ dht_readv (call_frame_t *frame, xlator_t *this,          local->rebalance.flags  = flags;          local->call_cnt = 1; -        STACK_WIND (frame, dht_readv_cbk, subvol, subvol->fops->readv, -                    local->fd, local->rebalance.size, -                    local->rebalance.offset, -                    local->rebalance.flags, local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND (frame, dht_readv_cbk, subvol, subvol->fops->readv, +                            local->fd, local->rebalance.size, +                            local->rebalance.offset, +                            local->rebalance.flags, local->xattr_req); + +        } else { +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        } +          return 0; @@ -736,13 +743,6 @@ dht_flush_cbk (call_frame_t *frame, void *cookie, xlator_t *this,          if (local->call_cnt != 1)                  goto out; -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          local->rebalance.target_op_fn = dht_flush2;          local->op_ret = op_ret; @@ -804,6 +804,7 @@ dht_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)          xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; +        int           ret      = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -828,8 +829,18 @@ dht_flush (call_frame_t *frame, xlator_t *this, fd_t *fd, dict_t *xdata)          local->call_cnt = 1; -        STACK_WIND (frame, dht_flush_cbk, -                    subvol, subvol->fops->flush, fd, local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND (frame, dht_flush_cbk, +                            subvol, subvol->fops->flush, fd, local->xattr_req); +                return 0; + +        } else { + +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        }          return 0;  err: @@ -863,13 +874,6 @@ dht_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this, int op_ret,                  goto out;          } -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (local->call_cnt != 1) {                  if (local->stbuf.ia_blocks) {                          dht_iatt_merge (this, postbuf, &local->stbuf, NULL); @@ -970,6 +974,7 @@ dht_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync,          xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; +        int           ret      = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -989,9 +994,20 @@ dht_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int datasync,          subvol = local->cached_subvol; -        STACK_WIND_COOKIE (frame, dht_fsync_cbk, subvol, subvol, -                           subvol->fops->fsync, local->fd, -                           local->rebalance.flags, local->xattr_req); + +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND_COOKIE (frame, dht_fsync_cbk, subvol, subvol, +                                   subvol->fops->fsync, local->fd, +                                   local->rebalance.flags, local->xattr_req); + +        } else { +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        } + +          return 0;  err: @@ -1285,7 +1301,8 @@ dht_xattrop (call_frame_t *frame, xlator_t *this, loc_t *loc,          local->call_cnt = 1; -        STACK_WIND (frame, dht_xattrop_cbk, +        STACK_WIND (frame, +                    dht_xattrop_cbk,                      subvol, subvol->fops->xattrop,                      loc, flags, dict, xdata); @@ -1384,7 +1401,8 @@ dht_inodelk (call_frame_t *frame, xlator_t *this, const char *volume,          local->call_cnt = 1; -        STACK_WIND (frame, dht_inodelk_cbk, +        STACK_WIND (frame, +                    dht_inodelk_cbk,                      lock_subvol, lock_subvol->fops->inodelk,                      volume, loc, cmd, lock, xdata); diff --git a/xlators/cluster/dht/src/dht-inode-write.c b/xlators/cluster/dht/src/dht-inode-write.c index 954a914e9cd..f925d4b59ed 100644 --- a/xlators/cluster/dht/src/dht-inode-write.c +++ b/xlators/cluster/dht/src/dht-inode-write.c @@ -44,13 +44,6 @@ dht_writev_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (op_ret == -1 && !dht_inode_missing(op_errno)) {                  local->op_errno = op_errno;                  local->op_ret = -1; @@ -169,6 +162,7 @@ dht_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          xlator_t     *subvol   = NULL;          int           op_errno = -1;          dht_local_t  *local    = NULL; +        int           ret      = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -189,6 +183,7 @@ dht_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,                  goto err;          } +          if (xdata)                  local->xattr_req = dict_ref (xdata); @@ -199,13 +194,22 @@ dht_writev (call_frame_t *frame, xlator_t *this, fd_t *fd,          local->rebalance.iobref = iobref_ref (iobref);          local->call_cnt = 1; -        STACK_WIND_COOKIE (frame, dht_writev_cbk, subvol, subvol, -                           subvol->fops->writev, fd, -                           local->rebalance.vector, -                           local->rebalance.count, -                           local->rebalance.offset, -                           local->rebalance.flags, -                           local->rebalance.iobref, local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND_COOKIE (frame, dht_writev_cbk, subvol, subvol, +                                   subvol->fops->writev, fd, +                                   local->rebalance.vector, +                                   local->rebalance.count, +                                   local->rebalance.offset, +                                   local->rebalance.flags, +                                   local->rebalance.iobref, local->xattr_req); +                return 0; + +        } else { +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        }          return 0; @@ -249,14 +253,6 @@ dht_truncate_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -        /* Can only occur for ftruncate */ -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (local->call_cnt != 1) {                  if (local->stbuf.ia_blocks) {                          dht_iatt_merge (this, postbuf, &local->stbuf, NULL); @@ -412,6 +408,7 @@ dht_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; +        int           ret   = -1;          VALIDATE_OR_GOTO (frame, err); @@ -437,9 +434,20 @@ dht_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          if (xdata)                  local->xattr_req = dict_ref (xdata); -        STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol, -                           subvol->fops->ftruncate, fd, -                           local->rebalance.offset, local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND_COOKIE (frame, dht_truncate_cbk, subvol, subvol, +                                   subvol->fops->ftruncate, fd, +                                   local->rebalance.offset, local->xattr_req); +                return 0; + +        } else { + +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        } +          return 0;  err: @@ -479,13 +487,6 @@ dht_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (local->call_cnt != 1) {                  if (local->stbuf.ia_blocks) {                          dht_iatt_merge (this, postbuf, &local->stbuf, NULL); @@ -585,6 +586,7 @@ dht_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,          xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; +        int           ret      = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -612,12 +614,22 @@ dht_fallocate (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t mode,          if (xdata)                  local->xattr_req = dict_ref (xdata); -        STACK_WIND_COOKIE (frame, dht_fallocate_cbk, subvol, subvol, -                           subvol->fops->fallocate, fd, -                           local->rebalance.flags, -                           local->rebalance.offset, -                           local->rebalance.size, -                           local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND_COOKIE (frame, dht_fallocate_cbk, subvol, subvol, +                                   subvol->fops->fallocate, fd, +                                   local->rebalance.flags, +                                   local->rebalance.offset, +                                   local->rebalance.size, +                                   local->xattr_req); +                return 0; + +        } else { + +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        }          return 0; @@ -658,13 +670,6 @@ dht_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (local->call_cnt != 1) {                  if (local->stbuf.ia_blocks) {                          dht_iatt_merge (this, postbuf, &local->stbuf, NULL); @@ -764,6 +769,7 @@ dht_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          xlator_t     *subvol = NULL;          int           op_errno = -1;          dht_local_t  *local = NULL; +        int           ret      = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -790,11 +796,22 @@ dht_discard (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          if (xdata)                  local->xattr_req = dict_ref (xdata); -        STACK_WIND_COOKIE (frame, dht_discard_cbk, subvol, subvol, -                           subvol->fops->discard, fd, -                           local->rebalance.offset, -                           local->rebalance.size, -                           local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND_COOKIE (frame, dht_discard_cbk, subvol, subvol, +                                   subvol->fops->discard, fd, +                                   local->rebalance.offset, +                                   local->rebalance.size, +                                   local->xattr_req); +                return 0; + +        } else { + +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; + +        }          return 0; @@ -832,13 +849,6 @@ dht_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          if (local->call_cnt != 1) {                  if (local->stbuf.ia_blocks) {                          dht_iatt_merge (this, postbuf, &local->stbuf, NULL); @@ -942,6 +952,7 @@ dht_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          xlator_t     *subvol       = NULL;          int           op_errno     = -1;          dht_local_t  *local        = NULL; +        int           ret          = -1;          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -968,10 +979,21 @@ dht_zerofill (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset,          if (xdata)                  local->xattr_req = dict_ref (xdata); -        STACK_WIND_COOKIE (frame, dht_zerofill_cbk, subvol, subvol, -                           subvol->fops->zerofill, fd, -                           local->rebalance.offset, -                           local->rebalance.size, local->xattr_req); +        if (dht_fd_open_on_dst (this, fd, subvol)) { + +                STACK_WIND_COOKIE (frame, dht_zerofill_cbk, subvol, subvol, +                                   subvol->fops->zerofill, fd, +                                   local->rebalance.offset, +                                   local->rebalance.size, local->xattr_req); +                return 0; + +        } else { + +                ret = dht_check_and_open_fd_on_subvol (this, frame); +                if (ret) +                        goto err; +        } +          return 0; @@ -1005,17 +1027,9 @@ dht_file_setattr_cbk (call_frame_t *frame, void *cookie, xlator_t *this,                  goto out;          } -          if (local->call_cnt != 1)                  goto out; -        if (op_ret == -1 && (op_errno == EBADF)) { -                ret = dht_check_and_open_fd_on_subvol (this, frame); -                if (ret) -                        goto out; -                return 0; -        } -          local->op_ret = op_ret;          local->op_errno = op_errno; @@ -1227,6 +1241,8 @@ dht_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,          int           op_errno = -1;          int           i = -1;          int           call_cnt = 0; +        int           ret      = -1; +          VALIDATE_OR_GOTO (frame, err);          VALIDATE_OR_GOTO (this, err); @@ -1263,11 +1279,21 @@ dht_fsetattr (call_frame_t *frame, xlator_t *this, fd_t *fd, struct iatt *stbuf,                  local->call_cnt = 1;                  subvol = local->cached_subvol; -                STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol, -                                   subvol, subvol->fops->fsetattr, fd, -                                   &local->rebalance.stbuf, -                                   local->rebalance.flags, -                                   local->xattr_req); +                if (dht_fd_open_on_dst (this, fd, subvol)) { + +                        STACK_WIND_COOKIE (frame, dht_file_setattr_cbk, subvol, +                                           subvol, subvol->fops->fsetattr, fd, +                                           &local->rebalance.stbuf, +                                           local->rebalance.flags, +                                           local->xattr_req); +                        return 0; + +                } else { +                        ret = dht_check_and_open_fd_on_subvol (this, frame); +                        if (ret) +                                goto err; + +                }                  return 0;          }  | 
