projects
/
platform
/
kernel
/
linux-rpi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
drivers: media: pisp_be: Update seqeuence numbers of the buffers
[platform/kernel/linux-rpi.git]
/
drivers
/
md
/
dm-delay.c
diff --git
a/drivers/md/dm-delay.c
b/drivers/md/dm-delay.c
index
7433525
..
3726fae
100644
(file)
--- a/
drivers/md/dm-delay.c
+++ b/
drivers/md/dm-delay.c
@@
-31,7
+31,7
@@
struct delay_c {
struct workqueue_struct *kdelayd_wq;
struct work_struct flush_expired_bios;
struct list_head delayed_bios;
struct workqueue_struct *kdelayd_wq;
struct work_struct flush_expired_bios;
struct list_head delayed_bios;
-
atomic_t
may_delay;
+
bool
may_delay;
struct delay_class read;
struct delay_class write;
struct delay_class read;
struct delay_class write;
@@
-192,7
+192,7
@@
static int delay_ctr(struct dm_target *ti, unsigned int argc, char **argv)
INIT_WORK(&dc->flush_expired_bios, flush_expired_bios);
INIT_LIST_HEAD(&dc->delayed_bios);
mutex_init(&dc->timer_lock);
INIT_WORK(&dc->flush_expired_bios, flush_expired_bios);
INIT_LIST_HEAD(&dc->delayed_bios);
mutex_init(&dc->timer_lock);
-
atomic_set(&dc->may_delay, 1)
;
+
dc->may_delay = true
;
dc->argc = argc;
ret = delay_class_ctr(ti, &dc->read, argv);
dc->argc = argc;
ret = delay_class_ctr(ti, &dc->read, argv);
@@
-247,7
+247,7
@@
static int delay_bio(struct delay_c *dc, struct delay_class *c, struct bio *bio)
struct dm_delay_info *delayed;
unsigned long expires = 0;
struct dm_delay_info *delayed;
unsigned long expires = 0;
- if (!c->delay
|| !atomic_read(&dc->may_delay)
)
+ if (!c->delay)
return DM_MAPIO_REMAPPED;
delayed = dm_per_bio_data(bio, sizeof(struct dm_delay_info));
return DM_MAPIO_REMAPPED;
delayed = dm_per_bio_data(bio, sizeof(struct dm_delay_info));
@@
-256,6
+256,10
@@
static int delay_bio(struct delay_c *dc, struct delay_class *c, struct bio *bio)
delayed->expires = expires = jiffies + msecs_to_jiffies(c->delay);
mutex_lock(&delayed_bios_lock);
delayed->expires = expires = jiffies + msecs_to_jiffies(c->delay);
mutex_lock(&delayed_bios_lock);
+ if (unlikely(!dc->may_delay)) {
+ mutex_unlock(&delayed_bios_lock);
+ return DM_MAPIO_REMAPPED;
+ }
c->ops++;
list_add_tail(&delayed->list, &dc->delayed_bios);
mutex_unlock(&delayed_bios_lock);
c->ops++;
list_add_tail(&delayed->list, &dc->delayed_bios);
mutex_unlock(&delayed_bios_lock);
@@
-269,7
+273,10
@@
static void delay_presuspend(struct dm_target *ti)
{
struct delay_c *dc = ti->private;
{
struct delay_c *dc = ti->private;
- atomic_set(&dc->may_delay, 0);
+ mutex_lock(&delayed_bios_lock);
+ dc->may_delay = false;
+ mutex_unlock(&delayed_bios_lock);
+
del_timer_sync(&dc->delay_timer);
flush_bios(flush_delayed_bios(dc, 1));
}
del_timer_sync(&dc->delay_timer);
flush_bios(flush_delayed_bios(dc, 1));
}
@@
-278,7
+285,7
@@
static void delay_resume(struct dm_target *ti)
{
struct delay_c *dc = ti->private;
{
struct delay_c *dc = ti->private;
-
atomic_set(&dc->may_delay, 1)
;
+
dc->may_delay = true
;
}
static int delay_map(struct dm_target *ti, struct bio *bio)
}
static int delay_map(struct dm_target *ti, struct bio *bio)