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