Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b24498d4 authored by Jens Axboe's avatar Jens Axboe
Browse files

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: default avatarJens Axboe <jens.axboe@oracle.com>
parent 06a452e5
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
@@ -217,17 +217,16 @@ static ssize_t integrity_read_store(struct blk_integrity *bi,
	unsigned long val = simple_strtoul(p, &p, 10);

	if (val)
		set_bit(INTEGRITY_FLAG_READ, &bi->flags);
		bi->flags |= INTEGRITY_FLAG_READ;
	else
		clear_bit(INTEGRITY_FLAG_READ, &bi->flags);
		bi->flags &= ~INTEGRITY_FLAG_READ;

	return count;
}

static ssize_t integrity_read_show(struct blk_integrity *bi, char *page)
{
	return sprintf(page, "%d\n",
		       test_bit(INTEGRITY_FLAG_READ, &bi->flags) ? 1 : 0);
	return sprintf(page, "%d\n", (bi->flags & INTEGRITY_FLAG_READ) != 0);
}

static ssize_t integrity_write_store(struct blk_integrity *bi,
@@ -237,17 +236,16 @@ static ssize_t integrity_write_store(struct blk_integrity *bi,
	unsigned long val = simple_strtoul(p, &p, 10);

	if (val)
		set_bit(INTEGRITY_FLAG_WRITE, &bi->flags);
		bi->flags |= INTEGRITY_FLAG_WRITE;
	else
		clear_bit(INTEGRITY_FLAG_WRITE, &bi->flags);
		bi->flags &= ~INTEGRITY_FLAG_WRITE;

	return count;
}

static ssize_t integrity_write_show(struct blk_integrity *bi, char *page)
{
	return sprintf(page, "%d\n",
		       test_bit(INTEGRITY_FLAG_WRITE, &bi->flags) ? 1 : 0);
	return sprintf(page, "%d\n", (bi->flags & INTEGRITY_FLAG_WRITE) != 0);
}

static struct integrity_sysfs_entry integrity_format_entry = {
@@ -340,8 +338,7 @@ int blk_integrity_register(struct gendisk *disk, struct blk_integrity *template)

		kobject_uevent(&bi->kobj, KOBJ_ADD);

		set_bit(INTEGRITY_FLAG_READ, &bi->flags);
		set_bit(INTEGRITY_FLAG_WRITE, &bi->flags);
		bi->flags |= INTEGRITY_FLAG_READ | INTEGRITY_FLAG_WRITE;
		bi->sector_size = disk->queue->hardsect_size;
		disk->integrity = bi;
	} else
+4 −4
Original line number Diff line number Diff line
@@ -870,8 +870,8 @@ void kblockd_flush_work(struct work_struct *work);

#if defined(CONFIG_BLK_DEV_INTEGRITY)

#define INTEGRITY_FLAG_READ	1	/* verify data integrity on read */
#define INTEGRITY_FLAG_WRITE	2	/* generate data integrity on write */
#define INTEGRITY_FLAG_READ	2	/* verify data integrity on read */
#define INTEGRITY_FLAG_WRITE	4	/* generate data integrity on write */

struct blk_integrity_exchg {
	void			*prot_buf;
@@ -940,11 +940,11 @@ static inline int bdev_integrity_enabled(struct block_device *bdev, int rw)
		return 0;

	if (rw == READ && bi->verify_fn != NULL &&
	    test_bit(INTEGRITY_FLAG_READ, &bi->flags))
	    (bi->flags & INTEGRITY_FLAG_READ))
		return 1;

	if (rw == WRITE && bi->generate_fn != NULL &&
	    test_bit(INTEGRITY_FLAG_WRITE, &bi->flags))
	    (bi->flags & INTEGRITY_FLAG_WRITE))
		return 1;

	return 0;