Showing error 1052

User: Jiri Slaby
Error type: Leaving function in locked state
Error type description: Some lock is not unlocked on all paths of a function, so it is leaked
File location: fs/ocfs2/dlm/dlmmaster.c
Line in file: 2720
Project: Linux Kernel
Project version: 2.6.28
Tools: Undetermined 1
Entered: 2012-03-04 17:07:06 UTC


Source:

2690        }
2691
2692        /* No need to migrate a lockres having no locks */
2693        ret = dlm_is_lockres_migrateable(dlm, res, &numlocks);
2694        if (ret >= 0 && numlocks == 0) {
2695                spin_unlock(&res->spinlock);
2696                goto leave;
2697        }
2698        spin_unlock(&res->spinlock);
2699
2700        /* Wheee! Migrate lockres here! Will sleep so drop spinlock. */
2701        spin_unlock(&dlm->spinlock);
2702        lock_dropped = 1;
2703        while (1) {
2704                ret = dlm_migrate_lockres(dlm, res, O2NM_MAX_NODES);
2705                if (ret >= 0)
2706                        break;
2707                if (ret == -ENOTEMPTY) {
2708                        mlog(ML_ERROR, "lockres %.*s still has local locks!\n",
2709                                     res->lockname.len, res->lockname.name);
2710                        BUG();
2711                }
2712
2713                mlog(0, "lockres %.*s: migrate failed, "
2714                     "retrying\n", res->lockname.len,
2715                     res->lockname.name);
2716                msleep(DLM_MIGRATION_RETRY_MS);
2717        }
2718        spin_lock(&dlm->spinlock);
2719leave:
2720        return lock_dropped;
2721}
2722
2723int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock)
2724{
2725        int ret;
2726        spin_lock(&dlm->ast_lock);
2727        spin_lock(&lock->spinlock);
2728        ret = (list_empty(&lock->bast_list) && !lock->bast_pending);
2729        spin_unlock(&lock->spinlock);
2730        spin_unlock(&dlm->ast_lock);
Show full sources