Showing error 1154

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: 1326
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2012-04-29 14:49:11 UTC


Source:

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)
1310                        swap_list.head = swap_list.next = p - swap_info;
1311                else
1312                        swap_info[prev].next = p - swap_info;
1313                nr_swap_pages += p->pages;
1314                total_swap_pages += p->pages;
1315                p->flags |= SWP_WRITEOK;
1316                spin_unlock(&swap_lock);
1317                goto out_dput;
1318        }
1319
1320        /* wait for any unplug function to finish */
1321        down_write(&swap_unplug_sem);
1322        up_write(&swap_unplug_sem);
1323
1324        destroy_swap_extents(p);
1325        mutex_lock(&swapon_mutex);
1326        spin_lock(&swap_lock);
1327        drain_mmlist();
1328
1329        /* wait for anyone still in scan_swap_map */
1330        p->highest_bit = 0;                /* cuts scans short */
1331        while (p->flags >= SWP_SCANNING) {
1332                spin_unlock(&swap_lock);
1333                schedule_timeout_uninterruptible(1);
1334                spin_lock(&swap_lock);
1335        }
1336
Show full sources