dm.c (ab4c1424882be9cd70b89abf2b484add355712fa) | dm.c (d58168763f74d1edbc296d7038c60efe6493fdd4) |
---|---|
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" --- 963 unchanged lines hidden (view full) --- 972} 973 974static int dm_any_congested(void *congested_data, int bdi_bits) 975{ 976 int r = bdi_bits; 977 struct mapped_device *md = congested_data; 978 struct dm_table *map; 979 | 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" --- 963 unchanged lines hidden (view full) --- 972} 973 974static int dm_any_congested(void *congested_data, int bdi_bits) 975{ 976 int r = bdi_bits; 977 struct mapped_device *md = congested_data; 978 struct dm_table *map; 979 |
980 atomic_inc(&md->pending); 981 | |
982 if (!test_bit(DMF_BLOCK_IO, &md->flags)) { 983 map = dm_get_table(md); 984 if (map) { 985 r = dm_table_any_congested(map, bdi_bits); 986 dm_table_put(map); 987 } 988 } 989 | 980 if (!test_bit(DMF_BLOCK_IO, &md->flags)) { 981 map = dm_get_table(md); 982 if (map) { 983 r = dm_table_any_congested(map, bdi_bits); 984 dm_table_put(map); 985 } 986 } 987 |
990 if (!atomic_dec_return(&md->pending)) 991 /* nudge anyone waiting on suspend queue */ 992 wake_up(&md->wait); 993 | |
994 return r; 995} 996 997/*----------------------------------------------------------------- 998 * An IDR is used to keep track of allocated minor numbers. 999 *---------------------------------------------------------------*/ 1000static DEFINE_IDR(_minor_idr); 1001 --- 243 unchanged lines hidden (view full) --- 1245 /* 1246 * Wipe any geometry if the size of the table changed. 1247 */ 1248 if (size != get_capacity(md->disk)) 1249 memset(&md->geometry, 0, sizeof(md->geometry)); 1250 1251 if (md->suspended_bdev) 1252 __set_size(md, size); | 988 return r; 989} 990 991/*----------------------------------------------------------------- 992 * An IDR is used to keep track of allocated minor numbers. 993 *---------------------------------------------------------------*/ 994static DEFINE_IDR(_minor_idr); 995 --- 243 unchanged lines hidden (view full) --- 1239 /* 1240 * Wipe any geometry if the size of the table changed. 1241 */ 1242 if (size != get_capacity(md->disk)) 1243 memset(&md->geometry, 0, sizeof(md->geometry)); 1244 1245 if (md->suspended_bdev) 1246 __set_size(md, size); |
1253 if (size == 0) | 1247 1248 if (!size) { 1249 dm_table_destroy(t); |
1254 return 0; | 1250 return 0; |
1251 } |
|
1255 | 1252 |
1256 dm_table_get(t); | |
1257 dm_table_event_callback(t, event_callback, md); 1258 1259 write_lock(&md->map_lock); 1260 md->map = t; 1261 dm_table_set_restrictions(t, q); 1262 write_unlock(&md->map_lock); 1263 1264 return 0; --- 5 unchanged lines hidden (view full) --- 1270 1271 if (!map) 1272 return; 1273 1274 dm_table_event_callback(map, NULL, NULL); 1275 write_lock(&md->map_lock); 1276 md->map = NULL; 1277 write_unlock(&md->map_lock); | 1253 dm_table_event_callback(t, event_callback, md); 1254 1255 write_lock(&md->map_lock); 1256 md->map = t; 1257 dm_table_set_restrictions(t, q); 1258 write_unlock(&md->map_lock); 1259 1260 return 0; --- 5 unchanged lines hidden (view full) --- 1266 1267 if (!map) 1268 return; 1269 1270 dm_table_event_callback(map, NULL, NULL); 1271 write_lock(&md->map_lock); 1272 md->map = NULL; 1273 write_unlock(&md->map_lock); |
1278 dm_table_put(map); | 1274 dm_table_destroy(map); |
1279} 1280 1281/* 1282 * Constructor for a new device. 1283 */ 1284int dm_create(int minor, struct mapped_device **result) 1285{ 1286 struct mapped_device *md; --- 456 unchanged lines hidden --- | 1275} 1276 1277/* 1278 * Constructor for a new device. 1279 */ 1280int dm_create(int minor, struct mapped_device **result) 1281{ 1282 struct mapped_device *md; --- 456 unchanged lines hidden --- |