Showing error 1155

User: Jiri Slaby
Error type: Double Lock
Error type description: Some lock is locked twice unintentionally in a sequence
File location: mm/swapfile.c
Line in file: 1299
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-29 14:49:11 UTC


Source:

1269        else {
1270                err = -ENOMEM;
1271                spin_unlock(&swap_lock);
1272                goto out_dput;
1273        }
1274        if (prev < 0) {
1275                swap_list.head = p->next;
1276        } else {
1277                swap_info[prev].next = p->next;
1278        }
1279        if (type == swap_list.next) {
1280                /* just pick something that's safe... */
1281                swap_list.next = swap_list.head;
1282        }
1283        if (p->prio < 0) {
1284                for (i = p->next; i >= 0; i = swap_info[i].next)
1285                        swap_info[i].prio = p->prio--;
1286                least_priority++;
1287        }
1288        nr_swap_pages -= p->pages;
1289        total_swap_pages -= p->pages;
1290        p->flags &= ~SWP_WRITEOK;
1291        spin_unlock(&swap_lock);
1292
1293        current->flags |= PF_SWAPOFF;
1294        err = try_to_unuse(type);
1295        current->flags &= ~PF_SWAPOFF;
1296
1297        if (err) {
1298                /* re-insert swap space back into swap_list */
1299                spin_lock(&swap_lock);
1300                if (p->prio < 0)
1301                        p->prio = --least_priority;
1302                prev = -1;
1303                for (i = swap_list.head; i >= 0; i = swap_info[i].next) {
1304                        if (p->prio >= swap_info[i].prio)
1305                                break;
1306                        prev = i;
1307                }
1308                p->next = i;
1309                if (prev < 0)
Show full sources