Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f35ac346bc48b2086aa94f031baf1f6237a89de6
Commit:     f35ac346bc48b2086aa94f031baf1f6237a89de6
Parent:     254da030dfb1b13d42d07e4292a4790d88c6874f
Author:     Steven Whitehouse <[EMAIL PROTECTED]>
AuthorDate: Sun Mar 18 17:04:15 2007 +0000
Committer:  Steven Whitehouse <[EMAIL PROTECTED]>
CommitDate: Tue May 1 09:10:47 2007 +0100

    [GFS2] Speed up lock_dlm's locking (move sprintf)
    
    The following patch speeds up lock_dlm's locking by moving the sprintf
    out from the lock acquisition path and into the lock creation path. This
    reduces the amount of CPU time used in acquiring locks by a fair amount.
    
    Signed-off-by: Steven Whitehouse <[EMAIL PROTECTED]>
    Acked-by: David Teigland <[EMAIL PROTECTED]>
---
 fs/gfs2/locking/dlm/lock.c     |   10 ++++------
 fs/gfs2/locking/dlm/lock_dlm.h |    1 +
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/fs/gfs2/locking/dlm/lock.c b/fs/gfs2/locking/dlm/lock.c
index b167add..f9c8bda 100644
--- a/fs/gfs2/locking/dlm/lock.c
+++ b/fs/gfs2/locking/dlm/lock.c
@@ -151,7 +151,7 @@ static inline unsigned int make_flags(struct gdlm_lock *lp,
 
 /* make_strname - convert GFS lock numbers to a string */
 
-static inline void make_strname(struct lm_lockname *lockname,
+static inline void make_strname(const struct lm_lockname *lockname,
                                struct gdlm_strname *str)
 {
        sprintf(str->name, "%8x%16llx", lockname->ln_type,
@@ -169,6 +169,7 @@ static int gdlm_create_lp(struct gdlm_ls *ls, struct 
lm_lockname *name,
                return -ENOMEM;
 
        lp->lockname = *name;
+       make_strname(name, &lp->strname);
        lp->ls = ls;
        lp->cur = DLM_LOCK_IV;
        lp->lvb = NULL;
@@ -227,7 +228,6 @@ void gdlm_put_lock(void *lock)
 unsigned int gdlm_do_lock(struct gdlm_lock *lp)
 {
        struct gdlm_ls *ls = lp->ls;
-       struct gdlm_strname str;
        int error, bast = 1;
 
        /*
@@ -249,8 +249,6 @@ unsigned int gdlm_do_lock(struct gdlm_lock *lp)
        if (test_bit(LFL_NOBAST, &lp->flags))
                bast = 0;
 
-       make_strname(&lp->lockname, &str);
-
        set_bit(LFL_ACTIVE, &lp->flags);
 
        log_debug("lk %x,%llx id %x %d,%d %x", lp->lockname.ln_type,
@@ -258,8 +256,8 @@ unsigned int gdlm_do_lock(struct gdlm_lock *lp)
                  lp->cur, lp->req, lp->lkf);
 
        error = dlm_lock(ls->dlm_lockspace, lp->req, &lp->lksb, lp->lkf,
-                        str.name, str.namelen, 0, gdlm_ast, lp,
-                        bast ? gdlm_bast : NULL);
+                        lp->strname.name, lp->strname.namelen, 0, gdlm_ast,
+                        lp, bast ? gdlm_bast : NULL);
 
        if ((error == -EAGAIN) && (lp->lkf & DLM_LKF_NOQUEUE)) {
                lp->lksb.sb_status = -EAGAIN;
diff --git a/fs/gfs2/locking/dlm/lock_dlm.h b/fs/gfs2/locking/dlm/lock_dlm.h
index a87c7bf..6888bd4 100644
--- a/fs/gfs2/locking/dlm/lock_dlm.h
+++ b/fs/gfs2/locking/dlm/lock_dlm.h
@@ -106,6 +106,7 @@ enum {
 struct gdlm_lock {
        struct gdlm_ls          *ls;
        struct lm_lockname      lockname;
+       struct gdlm_strname     strname;
        char                    *lvb;
        struct dlm_lksb         lksb;
 
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to