diff options
| author | Amar Tumballi <amar@gluster.com> | 2012-01-17 05:28:51 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2012-01-24 20:14:17 -0800 | 
| commit | b02afc6d008f9959db28244eb2b9dd3b9ef92393 (patch) | |
| tree | c0bad790fb34f8ab2747b480d334cf9af75c5514 /xlators/protocol/client/src | |
| parent | 0694749c3e5039be327110a64dd66619b5d9121c (diff) | |
core: change lk-owner as a 1k buffer
so, NLM can send the lk-owner field directly to the locks translators,
while doing the same effort, also enabled sending maximum of 500 aux gid
over protocol.
Change-Id: I87c2514392748416f7ffe21d5154faad2e413969
Signed-off-by: Amar Tumballi <amar@gluster.com>
BUG: 767229
Reviewed-on: http://review.gluster.com/779
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@gluster.com>
Diffstat (limited to 'xlators/protocol/client/src')
| -rw-r--r-- | xlators/protocol/client/src/client-handshake.c | 1 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client-lk.c | 35 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client.h | 11 | ||||
| -rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 8 | 
4 files changed, 25 insertions, 30 deletions
diff --git a/xlators/protocol/client/src/client-handshake.c b/xlators/protocol/client/src/client-handshake.c index 7bf95e912d0..85e10cb0b97 100644 --- a/xlators/protocol/client/src/client-handshake.c +++ b/xlators/protocol/client/src/client-handshake.c @@ -31,6 +31,7 @@  #include "glusterfs3.h"  #include "portmap-xdr.h" +#include "rpc-common-xdr.h"  extern rpc_clnt_prog_t clnt3_1_fop_prog;  extern rpc_clnt_prog_t clnt_pmap_prog; diff --git a/xlators/protocol/client/src/client-lk.c b/xlators/protocol/client/src/client-lk.c index 5334500a96c..d08d2a413b7 100644 --- a/xlators/protocol/client/src/client-lk.c +++ b/xlators/protocol/client/src/client-lk.c @@ -20,6 +20,7 @@  #include "common-utils.h"  #include "xlator.h"  #include "client.h" +#include "lkowner.h"  static void  __insert_and_merge (clnt_fd_ctx_t *fdctx, client_posix_lock_t *lock); @@ -36,11 +37,11 @@ __dump_client_lock (client_posix_lock_t *lock)          gf_log (this->name, GF_LOG_INFO,                  "{fd=%p}" -                "{%s lk-owner:%"PRIu64" %"PRId64" - %"PRId64"}" +                "{%s lk-owner:%s %"PRId64" - %"PRId64"}"                  "{start=%"PRId64" end=%"PRId64"}",                  lock->fd,                  lock->fl_type == F_WRLCK ? "Write-Lock" : "Read-Lock", -                lock->owner, +                lkowner_utoa (&lock->owner),                  lock->user_flock.l_start,                  lock->user_flock.l_len,                  lock->fl_start, @@ -133,12 +134,6 @@ add_locks (client_posix_lock_t *l1, client_posix_lock_t *l2)  	return sum;  } -/* Return true if the locks have the same owner */ -static int -same_owner (client_posix_lock_t *l1, client_posix_lock_t *l2) -{ -        return ((l1->owner == l2->owner)); -}  /* Return true if the locks overlap, false otherwise */  static int @@ -285,11 +280,11 @@ __insert_and_merge (clnt_fd_ctx_t *fdctx, client_posix_lock_t *lock)                  if (!locks_overlap (conf, lock))                          continue; -                if (same_owner (conf, lock)) { +                if (is_same_lkowner (&conf->owner, &lock->owner)) {                          if (conf->fl_type == lock->fl_type) {                                  sum = add_locks (lock, conf); -                                sum->fd         = lock->fd; +                                sum->fd = lock->fd;                                  __delete_client_lock (conf);                                  __destroy_client_lock (conf); @@ -301,8 +296,8 @@ __insert_and_merge (clnt_fd_ctx_t *fdctx, client_posix_lock_t *lock)                          } else {                                  sum = add_locks (lock, conf); -                                sum->fd         = conf->fd; -                                sum->owner      = conf->owner; +                                sum->fd = conf->fd; +                                sum->owner = conf->owner;                                  v = subtract_locks (sum, lock); @@ -365,7 +360,7 @@ destroy_client_lock (client_posix_lock_t *lock)  }  int32_t -delete_granted_locks_owner (fd_t *fd, uint64_t owner) +delete_granted_locks_owner (fd_t *fd, gf_lkowner_t *owner)  {          clnt_fd_ctx_t     *fdctx = NULL;          client_posix_lock_t *lock  = NULL; @@ -389,7 +384,7 @@ delete_granted_locks_owner (fd_t *fd, uint64_t owner)          pthread_mutex_lock (&fdctx->mutex);          {                  list_for_each_entry_safe (lock, tmp, &fdctx->lock_list, list) { -                        if (lock->owner == owner) { +                        if (!is_same_lkowner (&lock->owner, owner)) {                                  list_del_init (&lock->list);                                  list_add_tail (&lock->list, &delete_list);                                  count++; @@ -486,7 +481,7 @@ client_cmd_to_gf_cmd (int32_t cmd, int32_t *gf_cmd)  }  static client_posix_lock_t * -new_client_lock (struct gf_flock *flock, uint64_t owner, +new_client_lock (struct gf_flock *flock, gf_lkowner_t *owner,                   int32_t cmd, fd_t *fd)  {          client_posix_lock_t *new_lock = NULL; @@ -509,7 +504,8 @@ new_client_lock (struct gf_flock *flock, uint64_t owner,  	else  		new_lock->fl_end = flock->l_start + flock->l_len - 1; -        new_lock->owner = owner; +        new_lock->owner = *owner; +          new_lock->cmd = cmd; /* Not really useful */  out: @@ -527,8 +523,8 @@ client_save_number_fds (clnt_conf_t *conf, int count)  }  int -client_add_lock_for_recovery (fd_t *fd, struct gf_flock *flock, uint64_t owner, -                              int32_t cmd) +client_add_lock_for_recovery (fd_t *fd, struct gf_flock *flock, +                              gf_lkowner_t *owner, int32_t cmd)  {          clnt_fd_ctx_t       *fdctx = NULL;          xlator_t            *this  = NULL; @@ -572,13 +568,13 @@ construct_reserve_unlock (struct gf_flock *lock, call_frame_t *frame,  {          GF_ASSERT (lock);          GF_ASSERT (frame); -        GF_ASSERT (frame->root->lk_owner);          lock->l_type = F_UNLCK;          lock->l_start = 0;          lock->l_whence = SEEK_SET;          lock->l_len = 0; /* Whole file */          lock->l_pid = (uint64_t)(unsigned long)frame->root; +        lock->l_owner = client_lock->owner;          frame->root->lk_owner = client_lock->owner; @@ -827,7 +823,6 @@ static int  client_send_recovery_lock (call_frame_t *frame, xlator_t *this,                             client_posix_lock_t *lock)  { -          frame->root->lk_owner = lock->owner;          /* Send all locks as F_SETLK to prevent the frame diff --git a/xlators/protocol/client/src/client.h b/xlators/protocol/client/src/client.h index 69830db9dc1..6d0b6491a10 100644 --- a/xlators/protocol/client/src/client.h +++ b/xlators/protocol/client/src/client.h @@ -111,8 +111,7 @@ typedef struct _client_posix_lock {          off_t              fl_end;          short              fl_type;          int32_t            cmd;           /* the cmd for the lock call */ -        uint64_t           owner;         /* lock owner from fuse */ - +        gf_lkowner_t       owner; /* lock owner from fuse */          struct list_head   list;          /* reference used to add to the fdctx list of locks */  } client_posix_lock_t; @@ -126,7 +125,7 @@ typedef struct client_local {          struct iobref       *iobref;          client_posix_lock_t *client_lock; -        uint64_t             owner; +        gf_lkowner_t         owner;          int32_t              cmd;          struct list_head     lock_list;          pthread_mutex_t      mutex; @@ -190,9 +189,9 @@ int unserialize_rsp_direntp (struct gfs3_readdirp_rsp *rsp, gf_dirent_t *entries  int clnt_readdir_rsp_cleanup (gfs3_readdir_rsp *rsp);  int clnt_readdirp_rsp_cleanup (gfs3_readdirp_rsp *rsp);  int client_attempt_lock_recovery (xlator_t *this, clnt_fd_ctx_t *fdctx); -int32_t delete_granted_locks_owner (fd_t *fd, uint64_t owner); -int client_add_lock_for_recovery (fd_t *fd, struct gf_flock *flock, uint64_t owner, -                                  int32_t cmd); +int32_t delete_granted_locks_owner (fd_t *fd, gf_lkowner_t *owner); +int client_add_lock_for_recovery (fd_t *fd, struct gf_flock *flock, +                                  gf_lkowner_t *owner, int32_t cmd);  uint64_t decrement_reopen_fd_count (xlator_t *this, clnt_conf_t *conf);  int32_t delete_granted_locks_fd (clnt_fd_ctx_t *fdctx);  int32_t client_cmd_to_gf_cmd (int32_t cmd, int32_t *gf_cmd); diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c index 6300b264fb1..036e297de38 100644 --- a/xlators/protocol/client/src/client3_1-fops.c +++ b/xlators/protocol/client/src/client3_1-fops.c @@ -725,10 +725,10 @@ client3_1_flush_cbk (struct rpc_req *req, struct iovec *iov, int count,          if (rsp.op_ret >= 0) {                  /* Delete all saved locks of the owner issuing flush */ -                ret = delete_granted_locks_owner (local->fd, local->owner); +                ret = delete_granted_locks_owner (local->fd, &local->owner);                  gf_log (this->name, GF_LOG_TRACE, -                        "deleting locks of owner (%llu) returned %d", -                        (long long unsigned) local->owner, ret); +                        "deleting locks of owner (%s) returned %d", +                        lkowner_utoa (&local->owner), ret);          }  out: @@ -3655,7 +3655,7 @@ client3_1_flush (call_frame_t *frame, xlator_t *this,          gfs3_flush_req  req      = {{0,},};          int64_t         remote_fd = -1;          clnt_conf_t    *conf     = NULL; -        clnt_local_t *local    = NULL; +        clnt_local_t   *local    = NULL;          int             op_errno = ESTALE;          int             ret      = 0;  | 
