Commit b24498d477a14680fc3bb3ad884fa9fa76a2d237
1 parent
06a452e5b9
Exists in
master
and in
20 other branches
block: integrity flags can't use bit ops on unsigned short
Just use normal open coded bit operations instead, they need not be atomic. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Showing 2 changed files with 11 additions and 14 deletions Side-by-side Diff
block/blk-integrity.c
... | ... | @@ -217,17 +217,16 @@ |
217 | 217 | unsigned long val = simple_strtoul(p, &p, 10); |
218 | 218 | |
219 | 219 | if (val) |
220 | - set_bit(INTEGRITY_FLAG_READ, &bi->flags); | |
220 | + bi->flags |= INTEGRITY_FLAG_READ; | |
221 | 221 | else |
222 | - clear_bit(INTEGRITY_FLAG_READ, &bi->flags); | |
222 | + bi->flags &= ~INTEGRITY_FLAG_READ; | |
223 | 223 | |
224 | 224 | return count; |
225 | 225 | } |
226 | 226 | |
227 | 227 | static ssize_t integrity_read_show(struct blk_integrity *bi, char *page) |
228 | 228 | { |
229 | - return sprintf(page, "%d\n", | |
230 | - test_bit(INTEGRITY_FLAG_READ, &bi->flags) ? 1 : 0); | |
229 | + return sprintf(page, "%d\n", (bi->flags & INTEGRITY_FLAG_READ) != 0); | |
231 | 230 | } |
232 | 231 | |
233 | 232 | static ssize_t integrity_write_store(struct blk_integrity *bi, |
234 | 233 | |
235 | 234 | |
... | ... | @@ -237,17 +236,16 @@ |
237 | 236 | unsigned long val = simple_strtoul(p, &p, 10); |
238 | 237 | |
239 | 238 | if (val) |
240 | - set_bit(INTEGRITY_FLAG_WRITE, &bi->flags); | |
239 | + bi->flags |= INTEGRITY_FLAG_WRITE; | |
241 | 240 | else |
242 | - clear_bit(INTEGRITY_FLAG_WRITE, &bi->flags); | |
241 | + bi->flags &= ~INTEGRITY_FLAG_WRITE; | |
243 | 242 | |
244 | 243 | return count; |
245 | 244 | } |
246 | 245 | |
247 | 246 | static ssize_t integrity_write_show(struct blk_integrity *bi, char *page) |
248 | 247 | { |
249 | - return sprintf(page, "%d\n", | |
250 | - test_bit(INTEGRITY_FLAG_WRITE, &bi->flags) ? 1 : 0); | |
248 | + return sprintf(page, "%d\n", (bi->flags & INTEGRITY_FLAG_WRITE) != 0); | |
251 | 249 | } |
252 | 250 | |
253 | 251 | static struct integrity_sysfs_entry integrity_format_entry = { |
... | ... | @@ -340,8 +338,7 @@ |
340 | 338 | |
341 | 339 | kobject_uevent(&bi->kobj, KOBJ_ADD); |
342 | 340 | |
343 | - set_bit(INTEGRITY_FLAG_READ, &bi->flags); | |
344 | - set_bit(INTEGRITY_FLAG_WRITE, &bi->flags); | |
341 | + bi->flags |= INTEGRITY_FLAG_READ | INTEGRITY_FLAG_WRITE; | |
345 | 342 | bi->sector_size = disk->queue->hardsect_size; |
346 | 343 | disk->integrity = bi; |
347 | 344 | } else |
include/linux/blkdev.h
... | ... | @@ -870,8 +870,8 @@ |
870 | 870 | |
871 | 871 | #if defined(CONFIG_BLK_DEV_INTEGRITY) |
872 | 872 | |
873 | -#define INTEGRITY_FLAG_READ 1 /* verify data integrity on read */ | |
874 | -#define INTEGRITY_FLAG_WRITE 2 /* generate data integrity on write */ | |
873 | +#define INTEGRITY_FLAG_READ 2 /* verify data integrity on read */ | |
874 | +#define INTEGRITY_FLAG_WRITE 4 /* generate data integrity on write */ | |
875 | 875 | |
876 | 876 | struct blk_integrity_exchg { |
877 | 877 | void *prot_buf; |
878 | 878 | |
... | ... | @@ -940,11 +940,11 @@ |
940 | 940 | return 0; |
941 | 941 | |
942 | 942 | if (rw == READ && bi->verify_fn != NULL && |
943 | - test_bit(INTEGRITY_FLAG_READ, &bi->flags)) | |
943 | + (bi->flags & INTEGRITY_FLAG_READ)) | |
944 | 944 | return 1; |
945 | 945 | |
946 | 946 | if (rw == WRITE && bi->generate_fn != NULL && |
947 | - test_bit(INTEGRITY_FLAG_WRITE, &bi->flags)) | |
947 | + (bi->flags & INTEGRITY_FLAG_WRITE)) | |
948 | 948 | return 1; |
949 | 949 | |
950 | 950 | return 0; |