Skip to content

Commit

Permalink
dlm: fix use count with multiple joins
Browse files Browse the repository at this point in the history
When a lockspace was joined multiple times, the global dlm
use count was incremented when it should not have been.  This
caused the global dlm threads to not be stopped when all
lockspaces were eventually be removed.

Signed-off-by: David Teigland <[email protected]>
  • Loading branch information
teigland committed May 7, 2009
1 parent 08ce4c9 commit 8511a27
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions fs/dlm/lockspace.c
Original file line number Diff line number Diff line change
Expand Up @@ -419,16 +419,14 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
break;
}
ls->ls_create_count++;
module_put(THIS_MODULE);
error = 1; /* not an error, return 0 */
*lockspace = ls;
error = 1;
break;
}
spin_unlock(&lslist_lock);

if (error < 0)
goto out;
if (error)
goto ret_zero;
goto out;

error = -ENOMEM;

Expand Down Expand Up @@ -583,7 +581,6 @@ static int new_lockspace(const char *name, int namelen, void **lockspace,
dlm_create_debug_file(ls);

log_debug(ls, "join complete");
ret_zero:
*lockspace = ls;
return 0;

Expand Down Expand Up @@ -628,7 +625,9 @@ int dlm_new_lockspace(const char *name, int namelen, void **lockspace,
error = new_lockspace(name, namelen, lockspace, flags, lvblen);
if (!error)
ls_count++;
else if (!ls_count)
if (error > 0)
error = 0;
if (!ls_count)
threads_stop();
out:
mutex_unlock(&ls_lock);
Expand Down

0 comments on commit 8511a27

Please sign in to comment.