]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commit - block/blk-integrity.c
block: move blk_integrity to request_queue
authorDan Williams <dan.j.williams@intel.com>
Wed, 21 Oct 2015 17:20:18 +0000 (13:20 -0400)
committerJens Axboe <axboe@fb.com>
Wed, 21 Oct 2015 20:43:42 +0000 (14:43 -0600)
commitac6fc48c9fb7d3220ec4e0be0c29bb314ea75f9f
treeb9f2aed362449db3f27c233202eb08d5267c5812
parent3ef28e83ab15799742e55fd13243a5f678b04242
block: move blk_integrity to request_queue

A trace like the following proceeds a crash in bio_integrity_process()
when it goes to use an already freed blk_integrity profile.

 BUG: unable to handle kernel paging request at ffff8800d31b10d8
 IP: [<ffff8800d31b10d8>] 0xffff8800d31b10d8
 PGD 2f65067 PUD 21fffd067 PMD 80000000d30001e3
 Oops: 0011 [#1] SMP
 Dumping ftrace buffer:
 ---------------------------------
    ndctl-2222    2.... 44526245us : disk_release: pmem1s
 systemd--2223    4.... 44573945us : bio_integrity_endio: pmem1s
    <...>-409     4.... 44574005us : bio_integrity_process: pmem1s
 ---------------------------------
[..]
  Call Trace:
  [<ffffffff8144e0f9>] ? bio_integrity_process+0x159/0x2d0
  [<ffffffff8144e4f6>] bio_integrity_verify_fn+0x36/0x60
  [<ffffffff810bd2dc>] process_one_work+0x1cc/0x4e0

Given that a request_queue is pinned while i/o is in flight and that a
gendisk is allowed to have a shorter lifetime, move blk_integrity to
request_queue to satisfy requests arriving after the gendisk has been
torn down.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
[martin: fix the CONFIG_BLK_DEV_INTEGRITY=n case]
Tested-by: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
block/blk-integrity.c
drivers/nvme/host/pci.c
include/linux/blkdev.h
include/linux/genhd.h