projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dm: disable interrupt when taking map_lock
[deliverable/linux.git]
/
drivers
/
md
/
dm.c
diff --git
a/drivers/md/dm.c
b/drivers/md/dm.c
index 00c76886081878353002dec7b6cba30eecfe458c..3c6d4ee8921d23ae0e63850ec47ca7185ef93953 100644
(file)
--- a/
drivers/md/dm.c
+++ b/
drivers/md/dm.c
@@
-512,12
+512,13
@@
static void queue_io(struct mapped_device *md, struct bio *bio)
struct dm_table *dm_get_table(struct mapped_device *md)
{
struct dm_table *t;
struct dm_table *dm_get_table(struct mapped_device *md)
{
struct dm_table *t;
+ unsigned long flags;
- read_lock
(&md->map_lock
);
+ read_lock
_irqsave(&md->map_lock, flags
);
t = md->map;
if (t)
dm_table_get(t);
t = md->map;
if (t)
dm_table_get(t);
- read_unlock
(&md->map_lock
);
+ read_unlock
_irqrestore(&md->map_lock, flags
);
return t;
}
return t;
}
@@
-1910,6
+1911,7
@@
static int __bind(struct mapped_device *md, struct dm_table *t,
{
struct request_queue *q = md->queue;
sector_t size;
{
struct request_queue *q = md->queue;
sector_t size;
+ unsigned long flags;
size = dm_table_get_size(t);
size = dm_table_get_size(t);
@@
-1940,10
+1942,10
@@
static int __bind(struct mapped_device *md, struct dm_table *t,
__bind_mempools(md, t);
__bind_mempools(md, t);
- write_lock
(&md->map_lock
);
+ write_lock
_irqsave(&md->map_lock, flags
);
md->map = t;
dm_table_set_restrictions(t, q, limits);
md->map = t;
dm_table_set_restrictions(t, q, limits);
- write_unlock
(&md->map_lock
);
+ write_unlock
_irqrestore(&md->map_lock, flags
);
return 0;
}
return 0;
}
@@
-1951,14
+1953,15
@@
static int __bind(struct mapped_device *md, struct dm_table *t,
static void __unbind(struct mapped_device *md)
{
struct dm_table *map = md->map;
static void __unbind(struct mapped_device *md)
{
struct dm_table *map = md->map;
+ unsigned long flags;
if (!map)
return;
dm_table_event_callback(map, NULL, NULL);
if (!map)
return;
dm_table_event_callback(map, NULL, NULL);
- write_lock
(&md->map_lock
);
+ write_lock
_irqsave(&md->map_lock, flags
);
md->map = NULL;
md->map = NULL;
- write_unlock
(&md->map_lock
);
+ write_unlock
_irqrestore(&md->map_lock, flags
);
dm_table_destroy(map);
}
dm_table_destroy(map);
}
This page took
0.027886 seconds
and
5
git commands to generate.