Commit b24498d477a14680fc3bb3ad884fa9fa76a2d237

Authored by Jens Axboe
1 parent 06a452e5b9

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;