diff options
Diffstat (limited to 'xlators/features/locks/src/inodelk.c')
| -rw-r--r-- | xlators/features/locks/src/inodelk.c | 72 | 
1 files changed, 37 insertions, 35 deletions
diff --git a/xlators/features/locks/src/inodelk.c b/xlators/features/locks/src/inodelk.c index 1db08e05858..5785f1f8e3f 100644 --- a/xlators/features/locks/src/inodelk.c +++ b/xlators/features/locks/src/inodelk.c @@ -120,9 +120,10 @@ inodelk_overlap (pl_inode_lock_t *l1, pl_inode_lock_t *l2)  }  /* Returns true if the 2 inodelks have the same owner */ -static int same_inodelk_owner (pl_inode_lock_t *l1, pl_inode_lock_t *l2) +static inline int +same_inodelk_owner (pl_inode_lock_t *l1, pl_inode_lock_t *l2)  { -        return ((l1->owner == l2->owner) && +        return (is_same_lkowner (&l1->owner, &l2->owner) &&                  (l1->transport  == l2->transport));  } @@ -212,10 +213,10 @@ __lock_inodelk (xlator_t *this, pl_inode_t *pl_inode, pl_inode_lock_t *lock,                  list_add_tail (&lock->blocked_locks, &dom->blocked_inodelks);                  gf_log (this->name, GF_LOG_TRACE, -                        "%s (pid=%d) lk-owner:%"PRIu64" %"PRId64" - %"PRId64" => Blocked", +                        "%s (pid=%d) lk-owner:%s %"PRId64" - %"PRId64" => Blocked",                          lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                          lock->client_pid, -                        lock->owner, +                        lkowner_utoa (&lock->owner),                          lock->user_flock.l_start,                          lock->user_flock.l_len); @@ -234,10 +235,10 @@ __lock_inodelk (xlator_t *this, pl_inode_t *pl_inode, pl_inode_lock_t *lock,                  gf_log (this->name, GF_LOG_TRACE,                          "Lock is grantable, but blocking to prevent starvation");                  gf_log (this->name, GF_LOG_TRACE, -                        "%s (pid=%d) (lk-owner=%"PRIu64") %"PRId64" - %"PRId64" => Blocked", +                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" => Blocked",                          lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                          lock->client_pid, -                        lock->owner, +                        lkowner_utoa (&lock->owner),                          lock->user_flock.l_start,                          lock->user_flock.l_len); @@ -352,10 +353,10 @@ grant_blocked_inode_locks (xlator_t *this, pl_inode_t *pl_inode, pl_dom_list_t *          list_for_each_entry_safe (lock, tmp, &granted, blocked_locks) {                  gf_log (this->name, GF_LOG_TRACE, -                        "%s (pid=%d) (lk-owner=%"PRIu64") %"PRId64" - %"PRId64" => Granted", +                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" => Granted",                          lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                          lock->client_pid, -                        lock->owner, +                        lkowner_utoa (&lock->owner),                          lock->user_flock.l_start,                          lock->user_flock.l_len); @@ -405,8 +406,9 @@ release_inode_locks_of_transport (xlator_t *this, pl_dom_list_t *dom,                          gf_log (this->name, GF_LOG_DEBUG,                                  "releasing blocking lock on %s held by " -                                "{transport=%p, pid=%"PRId64" lk-owner=%"PRIu64"}", -                                file, trans, (uint64_t) l->client_pid, l->owner); +                                "{transport=%p, pid=%"PRId64" lk-owner=%s}", +                                file, trans, (uint64_t) l->client_pid, +                                lkowner_utoa (&l->owner));                          list_add (&l->blocked_locks, &released);                          if (path) { @@ -430,8 +432,9 @@ release_inode_locks_of_transport (xlator_t *this, pl_dom_list_t *dom,                          gf_log (this->name, GF_LOG_DEBUG,                                  "releasing granted lock on %s held by " -                                "{transport=%p, pid=%"PRId64" lk-owner=%"PRIu64"}", -                                file, trans, (uint64_t) l->client_pid, l->owner); +                                "{transport=%p, pid=%"PRId64" lk-owner=%s}", +                                file, trans, (uint64_t) l->client_pid, +                                lkowner_utoa (&l->owner));                          if (path) {                                  GF_FREE (path);                                  path = NULL; @@ -468,19 +471,19 @@ pl_inode_setlk (xlator_t *this, pl_inode_t *pl_inode, pl_inode_lock_t *lock,                          ret = __lock_inodelk (this, pl_inode, lock, can_block, dom);                          if (ret == 0)                                  gf_log (this->name, GF_LOG_TRACE, -                                        "%s (pid=%d) (lk-owner=%"PRIu64") %"PRId64" - %"PRId64" => OK", +                                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" => OK",                                          lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                                          lock->client_pid, -                                        lock->owner, +                                        lkowner_utoa (&lock->owner),                                          lock->fl_start,                                          lock->fl_end);                          if (ret == -EAGAIN)                                  gf_log (this->name, GF_LOG_TRACE, -                                        "%s (pid=%d) (lk-owner=%"PRIu64") %"PRId64" - %"PRId64" => NOK", +                                        "%s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" => NOK",                                          lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                                          lock->client_pid, -                                        lock->owner, +                                        lkowner_utoa (&lock->owner),                                          lock->user_flock.l_start,                                          lock->user_flock.l_len); @@ -510,7 +513,7 @@ out:  /* Create a new inode_lock_t */  pl_inode_lock_t *  new_inode_lock (struct gf_flock *flock, void *transport, pid_t client_pid, -                uint64_t owner, const char *volume) +                gf_lkowner_t *owner, const char *volume)  {          pl_inode_lock_t *lock = NULL; @@ -531,8 +534,8 @@ new_inode_lock (struct gf_flock *flock, void *transport, pid_t client_pid,          lock->transport  = transport;          lock->client_pid = client_pid; -        lock->owner      = owner;          lock->volume     = volume; +        lock->owner      = *owner;          INIT_LIST_HEAD (&lock->list);          INIT_LIST_HEAD (&lock->blocked_locks); @@ -546,16 +549,15 @@ pl_common_inodelk (call_frame_t *frame, xlator_t *this,                     const char *volume, inode_t *inode, int32_t cmd,                     struct gf_flock *flock, loc_t *loc, fd_t *fd)  { -        int32_t op_ret   = -1; -        int32_t op_errno = 0; -        int     ret      = -1; -        int     can_block = 0; -        void *                  transport  = NULL; -        pid_t                   client_pid = -1; -        uint64_t                owner      = -1; -        pl_inode_t *            pinode     = NULL; -        pl_inode_lock_t *       reqlock    = NULL; -        pl_dom_list_t *                dom           = NULL; +        int32_t           op_ret     = -1; +        int32_t           op_errno   = 0; +        int               ret        = -1; +        int               can_block  = 0; +        pid_t             client_pid = -1; +        void *            transport  = NULL; +        pl_inode_t *      pinode     = NULL; +        pl_inode_lock_t * reqlock    = NULL; +        pl_dom_list_t *   dom        = NULL;          VALIDATE_OR_GOTO (frame, out);          VALIDATE_OR_GOTO (inode, unwind); @@ -570,7 +572,6 @@ pl_common_inodelk (call_frame_t *frame, xlator_t *this,          transport  = frame->root->trans;          client_pid = frame->root->pid; -        owner      = frame->root->lk_owner;          pinode = pl_inode_get (this, inode);          if (!pinode) { @@ -580,7 +581,7 @@ pl_common_inodelk (call_frame_t *frame, xlator_t *this,          dom = get_domain (pinode, volume); -        if (owner == 0) { +        if (frame->root->lk_owner.len == 0) {                  /*                    special case: this means release all locks                    from this transport @@ -594,7 +595,8 @@ pl_common_inodelk (call_frame_t *frame, xlator_t *this,                  goto unwind;          } -        reqlock = new_inode_lock (flock, transport, client_pid, owner, volume); +        reqlock = new_inode_lock (flock, transport, client_pid, +                                  &frame->root->lk_owner, volume);          if (!reqlock) {                  op_ret = -1; @@ -687,12 +689,12 @@ __get_inodelk_count (xlator_t *this, pl_inode_t *pl_inode)                          gf_log (this->name, GF_LOG_DEBUG,                                  " XATTR DEBUG" -                                " domain: %s %s (pid=%d) (lk-owner=%"PRIu64") %"PRId64" - %"PRId64" " +                                " domain: %s %s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" "                                  "state = Active",                                  dom->domain,                                  lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                                  lock->client_pid, -                                lock->owner, +                                lkowner_utoa (&lock->owner),                                  lock->user_flock.l_start,                                  lock->user_flock.l_len); @@ -703,12 +705,12 @@ __get_inodelk_count (xlator_t *this, pl_inode_t *pl_inode)                          gf_log (this->name, GF_LOG_DEBUG,                                  " XATTR DEBUG" -                                " domain: %s %s (pid=%d) (lk-owner=%"PRIu64") %"PRId64" - %"PRId64" " +                                " domain: %s %s (pid=%d) (lk-owner=%s) %"PRId64" - %"PRId64" "                                  "state = Blocked",                                  dom->domain,                                  lock->fl_type == F_UNLCK ? "Unlock" : "Lock",                                  lock->client_pid, -                                lock->owner, +                                lkowner_utoa (&lock->owner),                                  lock->user_flock.l_start,                                  lock->user_flock.l_len);  | 
