diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2008-08-16 14:10:05 +0900 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2008-08-27 09:50:19 +0200 |
commit | abf5439370491dd6fbb4fe1a7939680d2a9bc9d4 (patch) | |
tree | aa3630557fe4a4bc6313617f5770af30eec68515 /drivers/ata | |
parent | 1941246dd98089dd637f44d3bd4f6cc1c61aa9e4 (diff) | |
download | blackbird-op-linux-abf5439370491dd6fbb4fe1a7939680d2a9bc9d4.tar.gz blackbird-op-linux-abf5439370491dd6fbb4fe1a7939680d2a9bc9d4.zip |
block: move cmdfilter from gendisk to request_queue
cmd_filter works only for the block layer SG_IO with SCSI block
devices. It breaks scsi/sg.c, bsg, and the block layer SG_IO with SCSI
character devices (such as st). We hit a kernel crash with them.
The problem is that cmd_filter code accesses to gendisk (having struct
blk_scsi_cmd_filter) via inode->i_bdev->bd_disk. It works for only
SCSI block device files. With character device files, inode->i_bdev
leads you to struct cdev. inode->i_bdev->bd_disk->blk_scsi_cmd_filter
isn't safe.
SCSI ULDs don't expose gendisk; they keep it private. bsg needs to be
independent on any protocols. We shouldn't change ULDs to expose their
gendisk.
This patch moves struct blk_scsi_cmd_filter from gendisk to
request_queue, a common object, which eveyone can access to.
The user interface doesn't change; users can change the filters via
/sys/block/. gendisk has a pointer to request_queue so the cmd_filter
code accesses to struct blk_scsi_cmd_filter.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'drivers/ata')
0 files changed, 0 insertions, 0 deletions