Just use normal open coded bit operations instead, they need not be atomic.
Unified · Split
| @@ -217,17 +217,16 @@ static ssize_t integrity_read_store(struct blk_integrity *bi, · 216 unmodified lines | ||
| 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, |
| @@ -237,17 +236,16 @@ static ssize_t integrity_write_store(struct blk_integrity *bi, · 3 unmodified lines | ||
| 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 @@ int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template) · 86 unmodified lines | ||
| 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 |
| @@ -870,8 +870,8 @@ void kblockd_flush_work(struct work_struct *work); · 869 unmodified lines | ||
| 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; |
| @@ -940,11 +940,11 @@ static inline int bdev_integrity_enabled(struct block_device *bdev, int rw) · 62 unmodified lines | ||
| 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; |