Vivek Goyal wrote: ... > + > +ssize_t elv_slice_idle_store(struct request_queue *q, const char *name, > + size_t count) > +{ > + struct elv_fq_data *efqd; > + unsigned int data; > + unsigned long flags; > + > + char *p = (char *)name; > + > + data = simple_strtoul(p, &p, 10); > + > + if (data < 0) Hi Vivek, data can never be less than zero. Same problems also exist for other sysfs entry. Signed-off-by: Gui Jianfeng <guijianfeng@xxxxxxxxxxxxxx> --- block/elevator-fq.c | 40 +++++++++++++--------------------------- block/elevator-fq.h | 6 +++--- 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/block/elevator-fq.c b/block/elevator-fq.c index 42d4279..8027f4c 100644 --- a/block/elevator-fq.c +++ b/block/elevator-fq.c @@ -2643,32 +2643,27 @@ ssize_t elv_fairness_store(struct request_queue *q, const char *name, ssize_t elv_slice_idle_show(struct request_queue *q, char *name) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; spin_lock_irqsave(q->queue_lock, flags); efqd = &q->elevator->efqd; data = jiffies_to_msecs(efqd->elv_slice_idle); spin_unlock_irqrestore(q->queue_lock, flags); - return sprintf(name, "%d\n", data); + return sprintf(name, "%lu\n", data); } ssize_t elv_slice_idle_store(struct request_queue *q, const char *name, size_t count) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; char *p = (char *)name; data = simple_strtoul(p, &p, 10); - if (data < 0) - data = 0; - else if (data > INT_MAX) - data = INT_MAX; - data = msecs_to_jiffies(data); spin_lock_irqsave(q->queue_lock, flags); @@ -2683,32 +2678,27 @@ ssize_t elv_slice_idle_store(struct request_queue *q, const char *name, ssize_t elv_async_slice_idle_show(struct request_queue *q, char *name) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; spin_lock_irqsave(q->queue_lock, flags); efqd = &q->elevator->efqd; data = jiffies_to_msecs(efqd->elv_async_slice_idle); spin_unlock_irqrestore(q->queue_lock, flags); - return sprintf(name, "%d\n", data); + return sprintf(name, "%lu\n", data); } ssize_t elv_async_slice_idle_store(struct request_queue *q, const char *name, size_t count) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; char *p = (char *)name; data = simple_strtoul(p, &p, 10); - if (data < 0) - data = 0; - else if (data > INT_MAX) - data = INT_MAX; - data = msecs_to_jiffies(data); spin_lock_irqsave(q->queue_lock, flags); @@ -2730,24 +2720,22 @@ ssize_t elv_slice_sync_show(struct request_queue *q, char *name) efqd = &q->elevator->efqd; data = efqd->elv_slice[1]; spin_unlock_irqrestore(q->queue_lock, flags); - return sprintf(name, "%d\n", data); + return sprintf(name, "%lu\n", data); } ssize_t elv_slice_sync_store(struct request_queue *q, const char *name, size_t count) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; char *p = (char *)name; data = simple_strtoul(p, &p, 10); - if (data < 0) - data = 0; /* 100ms is the limit for now*/ - else if (data > 100) + if (data > 100) data = 100; spin_lock_irqsave(q->queue_lock, flags); @@ -2762,31 +2750,29 @@ ssize_t elv_slice_sync_store(struct request_queue *q, const char *name, ssize_t elv_slice_async_show(struct request_queue *q, char *name) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; spin_lock_irqsave(q->queue_lock, flags); efqd = &q->elevator->efqd; data = efqd->elv_slice[0]; spin_unlock_irqrestore(q->queue_lock, flags); - return sprintf(name, "%d\n", data); + return sprintf(name, "%lu\n", data); } ssize_t elv_slice_async_store(struct request_queue *q, const char *name, size_t count) { struct elv_fq_data *efqd; - unsigned int data; + unsigned long data; unsigned long flags; char *p = (char *)name; data = simple_strtoul(p, &p, 10); - if (data < 0) - data = 0; /* 100ms is the limit for now*/ - else if (data > 100) + if (data > 100) data = 100; spin_lock_irqsave(q->queue_lock, flags); diff --git a/block/elevator-fq.h b/block/elevator-fq.h index 4fe843a..46e4dbc 100644 --- a/block/elevator-fq.h +++ b/block/elevator-fq.h @@ -338,13 +338,13 @@ struct elv_fq_data { * have any notion of anticipation/idling. As of now, these are the * users of this functionality. */ - unsigned int elv_slice_idle; + unsigned long elv_slice_idle; /* idle slice for async queue */ - unsigned int elv_async_slice_idle; + unsigned long elv_async_slice_idle; struct timer_list idle_slice_timer; struct work_struct unplug_work; - unsigned int elv_slice[2]; + unsigned long elv_slice[2]; /* Fields for keeping track of average disk rate */ unsigned long rate_sectors; /* number of sectors finished */ -- 1.5.4.rc3 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel