~ubuntu-branches/debian/experimental/linux-2.6/experimental

« back to all changes in this revision

Viewing changes to block/genhd.c

  • Committer: Package Import Robot
  • Author(s): Ben Hutchings, Ben Hutchings
  • Date: 2012-03-21 03:08:36 UTC
  • mfrom: (1.2.34)
  • Revision ID: package-import@ubuntu.com-20120321030836-rvavg03lkz15wj2q
Tags: 3.3-1~experimental.1
* New upstream release: http://kernelnewbies.org/Linux_3.3

[ Ben Hutchings ]
* [x86] crypto: Enable CRYPTO_SERPENT_SSE2_586, CRYPTO_SERPENT_SSE2_X86_64
* aufs: Update to aufs3.x-rcN-20120312
* IB: Enable INFINIBAND_SRPT as module (Closes: #663041)

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
 
36
36
static struct device_type disk_type;
37
37
 
 
38
static void disk_alloc_events(struct gendisk *disk);
38
39
static void disk_add_events(struct gendisk *disk);
39
40
static void disk_del_events(struct gendisk *disk);
40
41
static void disk_release_events(struct gendisk *disk);
601
602
        disk->major = MAJOR(devt);
602
603
        disk->first_minor = MINOR(devt);
603
604
 
 
605
        disk_alloc_events(disk);
 
606
 
604
607
        /* Register BDI before referencing it from bdev */
605
608
        bdi = &disk->queue->backing_dev_info;
606
609
        bdi_register_dev(bdi, disk_devt(disk));
1475
1478
        intv = disk_events_poll_jiffies(disk);
1476
1479
        set_timer_slack(&ev->dwork.timer, intv / 4);
1477
1480
        if (check_now)
1478
 
                queue_delayed_work(system_nrt_wq, &ev->dwork, 0);
 
1481
                queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, 0);
1479
1482
        else if (intv)
1480
 
                queue_delayed_work(system_nrt_wq, &ev->dwork, intv);
 
1483
                queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, intv);
1481
1484
out_unlock:
1482
1485
        spin_unlock_irqrestore(&ev->lock, flags);
1483
1486
}
1521
1524
        ev->clearing |= mask;
1522
1525
        if (!ev->block) {
1523
1526
                cancel_delayed_work(&ev->dwork);
1524
 
                queue_delayed_work(system_nrt_wq, &ev->dwork, 0);
 
1527
                queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, 0);
1525
1528
        }
1526
1529
        spin_unlock_irq(&ev->lock);
1527
1530
}
1558
1561
 
1559
1562
        /* uncondtionally schedule event check and wait for it to finish */
1560
1563
        disk_block_events(disk);
1561
 
        queue_delayed_work(system_nrt_wq, &ev->dwork, 0);
 
1564
        queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, 0);
1562
1565
        flush_delayed_work(&ev->dwork);
1563
1566
        __disk_unblock_events(disk, false);
1564
1567
 
1595
1598
 
1596
1599
        intv = disk_events_poll_jiffies(disk);
1597
1600
        if (!ev->block && intv)
1598
 
                queue_delayed_work(system_nrt_wq, &ev->dwork, intv);
 
1601
                queue_delayed_work(system_nrt_freezable_wq, &ev->dwork, intv);
1599
1602
 
1600
1603
        spin_unlock_irq(&ev->lock);
1601
1604
 
1733
1736
                &disk_events_dfl_poll_msecs, 0644);
1734
1737
 
1735
1738
/*
1736
 
 * disk_{add|del|release}_events - initialize and destroy disk_events.
 
1739
 * disk_{alloc|add|del|release}_events - initialize and destroy disk_events.
1737
1740
 */
1738
 
static void disk_add_events(struct gendisk *disk)
 
1741
static void disk_alloc_events(struct gendisk *disk)
1739
1742
{
1740
1743
        struct disk_events *ev;
1741
1744
 
1748
1751
                return;
1749
1752
        }
1750
1753
 
1751
 
        if (sysfs_create_files(&disk_to_dev(disk)->kobj,
1752
 
                               disk_events_attrs) < 0) {
1753
 
                pr_warn("%s: failed to create sysfs files for events\n",
1754
 
                        disk->disk_name);
1755
 
                kfree(ev);
1756
 
                return;
1757
 
        }
1758
 
 
1759
 
        disk->ev = ev;
1760
 
 
1761
1754
        INIT_LIST_HEAD(&ev->node);
1762
1755
        ev->disk = disk;
1763
1756
        spin_lock_init(&ev->lock);
1766
1759
        ev->poll_msecs = -1;
1767
1760
        INIT_DELAYED_WORK(&ev->dwork, disk_events_workfn);
1768
1761
 
 
1762
        disk->ev = ev;
 
1763
}
 
1764
 
 
1765
static void disk_add_events(struct gendisk *disk)
 
1766
{
 
1767
        if (!disk->ev)
 
1768
                return;
 
1769
 
 
1770
        /* FIXME: error handling */
 
1771
        if (sysfs_create_files(&disk_to_dev(disk)->kobj, disk_events_attrs) < 0)
 
1772
                pr_warn("%s: failed to create sysfs files for events\n",
 
1773
                        disk->disk_name);
 
1774
 
1769
1775
        mutex_lock(&disk_events_mutex);
1770
 
        list_add_tail(&ev->node, &disk_events);
 
1776
        list_add_tail(&disk->ev->node, &disk_events);
1771
1777
        mutex_unlock(&disk_events_mutex);
1772
1778
 
1773
1779
        /*