From: Tejun Heo <tj@kernel.org>
To: axboe@kernel.dk, linux-kernel@vger.kernel.org,
kay.sievers@vrfy.org, hch@infradead.org
Cc: Tejun Heo <tj@kernel.org>
Subject: [PATCH 03/16] block: don't check events while open is in progress
Date: Tue, 28 Dec 2010 18:28:59 +0100 [thread overview]
Message-ID: <1293557352-10592-4-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1293557352-10592-1-git-send-email-tj@kernel.org>
Not all block drivers clear events immediately after reporting. Some
do so in ->revalidate_disk() or other steps during ->open(). There is
a slim chance event poll may happen between the clearing event check
from check_disk_change() and the actual clearing of the events which
would result in spurious events.
Block event checks while block device open is in progress. There is
no need to kick explicit event check afterwards as events are always
checked during open.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Jens Axboe <axboe@kernel.dk>
Cc: Kay Sievers <kay.sievers@vrfy.org>
---
fs/block_dev.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/fs/block_dev.c b/fs/block_dev.c
index 58026da..f6390fd 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1016,6 +1016,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
if (!disk)
goto out;
+ disk_block_events(disk);
mutex_lock_nested(&bdev->bd_mutex, for_part);
if (!bdev->bd_openers) {
bdev->bd_disk = disk;
@@ -1041,6 +1042,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
put_disk(disk);
bdev->bd_disk = NULL;
mutex_unlock(&bdev->bd_mutex);
+ disk_unblock_events(disk);
goto restart;
}
if (ret)
@@ -1094,6 +1096,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
if (for_part)
bdev->bd_part_count++;
mutex_unlock(&bdev->bd_mutex);
+ disk_unblock_events(disk);
return 0;
out_clear:
@@ -1106,6 +1109,7 @@ static int __blkdev_get(struct block_device *bdev, fmode_t mode, int for_part)
bdev->bd_contains = NULL;
out_unlock_bdev:
mutex_unlock(&bdev->bd_mutex);
+ disk_unblock_events(disk);
out:
if (disk)
module_put(disk->fops->owner);
--
1.7.1
next prev parent reply other threads:[~2010-12-28 17:32 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-28 17:28 [PATCHSET] block: convert block drivers to ->check_events() Tejun Heo
2010-12-28 17:28 ` [PATCH 01/16] block: don't implicitly trigger event check on disk_unblock_events() Tejun Heo
2010-12-28 17:28 ` [PATCH 02/16] block: don't check events on close unless it was blocked Tejun Heo
2010-12-28 17:28 ` Tejun Heo [this message]
2010-12-28 17:29 ` [PATCH 04/16] ide: convert to bdops->check_events() Tejun Heo
2010-12-28 19:01 ` David Miller
2010-12-28 17:29 ` [PATCH 05/16] floppy,{ami|ata}flop: " Tejun Heo
2011-01-25 13:07 ` [PATCH UPDATED " Tejun Heo
2010-12-28 17:29 ` [PATCH 06/16] gdrom,viocd: " Tejun Heo
2010-12-28 17:29 ` [PATCH 07/16] paride: " Tejun Heo
2010-12-28 17:29 ` [PATCH 08/16] dac960: " Tejun Heo
2010-12-28 17:29 ` [PATCH 09/16] swim[3]: " Tejun Heo
2010-12-28 17:29 ` [PATCH 10/16] ub: " Tejun Heo
2010-12-29 15:53 ` Pete Zaitcev
2010-12-29 16:02 ` Tejun Heo
2010-12-28 17:29 ` [PATCH 11/16] xsysace: " Tejun Heo
2010-12-29 6:37 ` Grant Likely
2010-12-28 17:29 ` [PATCH 12/16] i2o_block: " Tejun Heo
2010-12-28 17:29 ` [PATCH 13/16] s390/tape_block: " Tejun Heo
2010-12-28 17:29 ` [PATCH 14/16] umem: drop dummy ->media_changed() Tejun Heo
2010-12-28 17:29 ` [PATCH 15/16] pktcdvd: convert to bdops->check_events() Tejun Heo
2010-12-28 17:29 ` [PATCH 16/16] staging: " Tejun Heo
2010-12-28 18:39 ` Greg KH
2010-12-28 20:04 ` [PATCHSET] block: convert block drivers to ->check_events() Jeff Garzik
2011-01-25 13:06 ` Tejun Heo
2011-02-01 10:31 ` Tejun Heo
2011-03-05 10:40 ` Tejun Heo
2011-03-07 8:08 ` Jens Axboe
-- strict thread matches above, loose matches on Subject: below --
2011-03-09 9:13 [PATCHSET] block: Convert block drivers to ->check_events(), take#2 Tejun Heo
2011-03-09 9:13 ` [PATCH 03/16] block: Don't check events while open is in progress Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1293557352-10592-4-git-send-email-tj@kernel.org \
--to=tj@kernel.org \
--cc=axboe@kernel.dk \
--cc=hch@infradead.org \
--cc=kay.sievers@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox