dm.c (51e5b2bd34ded40ef48cade8a6a8f1baa0b4275e) dm.c (7a8c3d3b92883798e4ead21dd48c16db0ec0ff6f)
1/*
2 * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
4 *
5 * This file is released under the GPL.
6 */
7
8#include "dm.h"

--- 99 unchanged lines hidden (view full) ---

108
109 struct bio_set *bs;
110
111 /*
112 * Event handling.
113 */
114 atomic_t event_nr;
115 wait_queue_head_t eventq;
1/*
2 * Copyright (C) 2001, 2002 Sistina Software (UK) Limited.
3 * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
4 *
5 * This file is released under the GPL.
6 */
7
8#include "dm.h"

--- 99 unchanged lines hidden (view full) ---

108
109 struct bio_set *bs;
110
111 /*
112 * Event handling.
113 */
114 atomic_t event_nr;
115 wait_queue_head_t eventq;
116 atomic_t uevent_seq;
117 struct list_head uevent_list;
118 spinlock_t uevent_lock; /* Protect access to uevent_list */
116
117 /*
118 * freeze/thaw support require holding onto a super block
119 */
120 struct super_block *frozen_sb;
121 struct block_device *suspended_bdev;
122
123 /* forced geometry settings */

--- 856 unchanged lines hidden (view full) ---

980 memset(md, 0, sizeof(*md));
981 init_rwsem(&md->io_lock);
982 init_MUTEX(&md->suspend_lock);
983 spin_lock_init(&md->pushback_lock);
984 rwlock_init(&md->map_lock);
985 atomic_set(&md->holders, 1);
986 atomic_set(&md->open_count, 0);
987 atomic_set(&md->event_nr, 0);
119
120 /*
121 * freeze/thaw support require holding onto a super block
122 */
123 struct super_block *frozen_sb;
124 struct block_device *suspended_bdev;
125
126 /* forced geometry settings */

--- 856 unchanged lines hidden (view full) ---

983 memset(md, 0, sizeof(*md));
984 init_rwsem(&md->io_lock);
985 init_MUTEX(&md->suspend_lock);
986 spin_lock_init(&md->pushback_lock);
987 rwlock_init(&md->map_lock);
988 atomic_set(&md->holders, 1);
989 atomic_set(&md->open_count, 0);
990 atomic_set(&md->event_nr, 0);
991 atomic_set(&md->uevent_seq, 0);
992 INIT_LIST_HEAD(&md->uevent_list);
993 spin_lock_init(&md->uevent_lock);
988
989 md->queue = blk_alloc_queue(GFP_KERNEL);
990 if (!md->queue)
991 goto bad1_free_minor;
992
993 md->queue->queuedata = md;
994 md->queue->backing_dev_info.congested_fn = dm_any_congested;
995 md->queue->backing_dev_info.congested_data = md;

--- 82 unchanged lines hidden (view full) ---

1078 kfree(md);
1079}
1080
1081/*
1082 * Bind a table to the device.
1083 */
1084static void event_callback(void *context)
1085{
994
995 md->queue = blk_alloc_queue(GFP_KERNEL);
996 if (!md->queue)
997 goto bad1_free_minor;
998
999 md->queue->queuedata = md;
1000 md->queue->backing_dev_info.congested_fn = dm_any_congested;
1001 md->queue->backing_dev_info.congested_data = md;

--- 82 unchanged lines hidden (view full) ---

1084 kfree(md);
1085}
1086
1087/*
1088 * Bind a table to the device.
1089 */
1090static void event_callback(void *context)
1091{
1092 unsigned long flags;
1093 LIST_HEAD(uevents);
1086 struct mapped_device *md = (struct mapped_device *) context;
1087
1094 struct mapped_device *md = (struct mapped_device *) context;
1095
1096 spin_lock_irqsave(&md->uevent_lock, flags);
1097 list_splice_init(&md->uevent_list, &uevents);
1098 spin_unlock_irqrestore(&md->uevent_lock, flags);
1099
1100 dm_send_uevents(&uevents, &md->disk->kobj);
1101
1088 atomic_inc(&md->event_nr);
1089 wake_up(&md->eventq);
1090}
1091
1092static void __set_size(struct mapped_device *md, sector_t size)
1093{
1094 set_capacity(md->disk, size);
1095

--- 401 unchanged lines hidden (view full) ---

1497 up(&md->suspend_lock);
1498
1499 return r;
1500}
1501
1502/*-----------------------------------------------------------------
1503 * Event notification.
1504 *---------------------------------------------------------------*/
1102 atomic_inc(&md->event_nr);
1103 wake_up(&md->eventq);
1104}
1105
1106static void __set_size(struct mapped_device *md, sector_t size)
1107{
1108 set_capacity(md->disk, size);
1109

--- 401 unchanged lines hidden (view full) ---

1511 up(&md->suspend_lock);
1512
1513 return r;
1514}
1515
1516/*-----------------------------------------------------------------
1517 * Event notification.
1518 *---------------------------------------------------------------*/
1519uint32_t dm_next_uevent_seq(struct mapped_device *md)
1520{
1521 return atomic_add_return(1, &md->uevent_seq);
1522}
1523
1505uint32_t dm_get_event_nr(struct mapped_device *md)
1506{
1507 return atomic_read(&md->event_nr);
1508}
1509
1510int dm_wait_event(struct mapped_device *md, int event_nr)
1511{
1512 return wait_event_interruptible(md->eventq,
1513 (event_nr != atomic_read(&md->event_nr)));
1514}
1515
1524uint32_t dm_get_event_nr(struct mapped_device *md)
1525{
1526 return atomic_read(&md->event_nr);
1527}
1528
1529int dm_wait_event(struct mapped_device *md, int event_nr)
1530{
1531 return wait_event_interruptible(md->eventq,
1532 (event_nr != atomic_read(&md->event_nr)));
1533}
1534
1535void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
1536{
1537 unsigned long flags;
1538
1539 spin_lock_irqsave(&md->uevent_lock, flags);
1540 list_add(elist, &md->uevent_list);
1541 spin_unlock_irqrestore(&md->uevent_lock, flags);
1542}
1543
1516/*
1517 * The gendisk is only valid as long as you have a reference
1518 * count on 'md'.
1519 */
1520struct gendisk *dm_disk(struct mapped_device *md)
1521{
1522 return md->disk;
1523}

--- 38 unchanged lines hidden ---
1544/*
1545 * The gendisk is only valid as long as you have a reference
1546 * count on 'md'.
1547 */
1548struct gendisk *dm_disk(struct mapped_device *md)
1549{
1550 return md->disk;
1551}

--- 38 unchanged lines hidden ---