diff options
Diffstat (limited to 'include/linux/blkdev.h')
| -rw-r--r-- | include/linux/blkdev.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 9f921bf4bf8c..520d8618ed76 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -257,7 +257,7 @@ struct queue_limits { | |||
| 257 | unsigned char misaligned; | 257 | unsigned char misaligned; |
| 258 | unsigned char discard_misaligned; | 258 | unsigned char discard_misaligned; |
| 259 | unsigned char cluster; | 259 | unsigned char cluster; |
| 260 | signed char discard_zeroes_data; | 260 | unsigned char discard_zeroes_data; |
| 261 | }; | 261 | }; |
| 262 | 262 | ||
| 263 | struct request_queue | 263 | struct request_queue |
| @@ -1069,13 +1069,16 @@ static inline int queue_limit_discard_alignment(struct queue_limits *lim, sector | |||
| 1069 | { | 1069 | { |
| 1070 | unsigned int alignment = (sector << 9) & (lim->discard_granularity - 1); | 1070 | unsigned int alignment = (sector << 9) & (lim->discard_granularity - 1); |
| 1071 | 1071 | ||
| 1072 | if (!lim->max_discard_sectors) | ||
| 1073 | return 0; | ||
| 1074 | |||
| 1072 | return (lim->discard_granularity + lim->discard_alignment - alignment) | 1075 | return (lim->discard_granularity + lim->discard_alignment - alignment) |
| 1073 | & (lim->discard_granularity - 1); | 1076 | & (lim->discard_granularity - 1); |
| 1074 | } | 1077 | } |
| 1075 | 1078 | ||
| 1076 | static inline unsigned int queue_discard_zeroes_data(struct request_queue *q) | 1079 | static inline unsigned int queue_discard_zeroes_data(struct request_queue *q) |
| 1077 | { | 1080 | { |
| 1078 | if (q->limits.discard_zeroes_data == 1) | 1081 | if (q->limits.max_discard_sectors && q->limits.discard_zeroes_data == 1) |
| 1079 | return 1; | 1082 | return 1; |
| 1080 | 1083 | ||
| 1081 | return 0; | 1084 | return 0; |
