]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - include/linux/blkdev.h
Merge tag 'pull-bd_flags-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[thirdparty/linux.git] / include / linux / blkdev.h
index c78f500c27b0a4148b688925b5ac99e5a22c9036..aefdda9f4ec711cba939e15722f0372cef1ac035 100644 (file)
@@ -718,15 +718,35 @@ void invalidate_disk(struct gendisk *disk);
 void set_disk_ro(struct gendisk *disk, bool read_only);
 void disk_uevent(struct gendisk *disk, enum kobject_action action);
 
+static inline u8 bdev_partno(const struct block_device *bdev)
+{
+       return atomic_read(&bdev->__bd_flags) & BD_PARTNO;
+}
+
+static inline bool bdev_test_flag(const struct block_device *bdev, unsigned flag)
+{
+       return atomic_read(&bdev->__bd_flags) & flag;
+}
+
+static inline void bdev_set_flag(struct block_device *bdev, unsigned flag)
+{
+       atomic_or(flag, &bdev->__bd_flags);
+}
+
+static inline void bdev_clear_flag(struct block_device *bdev, unsigned flag)
+{
+       atomic_andnot(flag, &bdev->__bd_flags);
+}
+
 static inline int get_disk_ro(struct gendisk *disk)
 {
-       return disk->part0->bd_read_only ||
+       return bdev_test_flag(disk->part0, BD_READ_ONLY) ||
                test_bit(GD_READ_ONLY, &disk->state);
 }
 
 static inline int bdev_read_only(struct block_device *bdev)
 {
-       return bdev->bd_read_only || get_disk_ro(bdev->bd_disk);
+       return bdev_test_flag(bdev, BD_READ_ONLY) || get_disk_ro(bdev->bd_disk);
 }
 
 bool set_capacity_and_notify(struct gendisk *disk, sector_t size);
@@ -1086,7 +1106,7 @@ static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
 
 static inline bool bdev_is_partition(struct block_device *bdev)
 {
-       return bdev->bd_partno;
+       return bdev_partno(bdev) != 0;
 }
 
 enum blk_default_limits {