block: revert block_dev read-only check

This reverts commit 75f1dc0d076d ("block: check bdev_read_only() from
blkdev_get()"). That commit added stricter checking to make sure
devices that were being used read-only were actually opened in that
mode.

It turns out that the change breaks a bunch of kernel code that opens
block devices. Affected systems include dm, md, and the loop device.
Because strict checking for read-only opens of block devices was not
done before this, the code that opens the devices was opening them
read-write even if they were being used read-only. Auditing all that
code will take time, and new userspace packages for dm, mdadm, etc.
will also be required.

Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Chuck Ebbert and committed by Linus Torvalds e51900f7 a2640111

+5 -6
+5 -6
fs/block_dev.c
··· 1215 1215 1216 1216 res = __blkdev_get(bdev, mode, 0); 1217 1217 1218 - /* __blkdev_get() may alter read only status, check it afterwards */ 1219 - if (!res && (mode & FMODE_WRITE) && bdev_read_only(bdev)) { 1220 - __blkdev_put(bdev, mode, 0); 1221 - res = -EACCES; 1222 - } 1223 - 1224 1218 if (whole) { 1225 1219 /* finish claiming */ 1226 1220 mutex_lock(&bdev->bd_mutex); ··· 1291 1297 err = blkdev_get(bdev, mode, holder); 1292 1298 if (err) 1293 1299 return ERR_PTR(err); 1300 + 1301 + if ((mode & FMODE_WRITE) && bdev_read_only(bdev)) { 1302 + blkdev_put(bdev, mode); 1303 + return ERR_PTR(-EACCES); 1304 + } 1294 1305 1295 1306 return bdev; 1296 1307 }