From 14eae9d6bcf68eccf28478694ca764ab8fd2067b Mon Sep 17 00:00:00 2001 From: "zhangyi (F)" Date: Sat, 11 May 2019 17:29:44 +0800 Subject: [PATCH] block: add info when opening an exclusive opened block device for write euler inclusion category: feature bugzilla: 14367 CVE: NA --------------------------- Currently, we don't have an easy way to figure out a corrupted file system which has been writen data through the raw block device. This patch add an info message when opening an exclusive opened block device for write to hint the potential data corruption. Note that there are some legal cases such as file system or device mapper online resize, so this message is just a hint and isn't always mean that a risky written happens. Signed-off-by: zhangyi (F) Reviewed-by: Miao Xie Signed-off-by: Yang Yingliang --- fs/block_dev.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/fs/block_dev.c b/fs/block_dev.c index 1c25dae083a8..e5c9842662ff 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c @@ -1624,13 +1624,13 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder) res = __blkdev_get(bdev, mode, 0); + mutex_lock(&bdev->bd_mutex); + spin_lock(&bdev_lock); + if (whole) { struct gendisk *disk = whole->bd_disk; /* finish claiming */ - mutex_lock(&bdev->bd_mutex); - spin_lock(&bdev_lock); - if (!res) { BUG_ON(!bd_may_claim(bdev, whole, holder)); /* @@ -1667,6 +1667,22 @@ int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder) mutex_unlock(&bdev->bd_mutex); bdput(whole); + } else { + if (!res && (mode & FMODE_WRITE) && bdev->bd_holders) { + char name[BDEVNAME_SIZE]; + + /* + * Open an exclusive opened device for write may + * probability corrupt the device, such as a + * mounted file system, give a hint here. + */ + pr_info_ratelimited("VFS: Open an exclusive opened " + "block device for write %s [%d %s].\n", + bdevname(bdev, name), current->pid, + current->comm); + } + spin_unlock(&bdev_lock); + mutex_unlock(&bdev->bd_mutex); } return res; -- GitLab