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 --- |