|
@@ -852,7 +852,8 @@ static int nvme_queue_rq(struct blk_mq_hw_ctx *hctx,
|
|
|
* stripped/generated by the controller with PRACT=1.
|
|
|
*/
|
|
|
if (ns && ns->ms && !blk_integrity_rq(req)) {
|
|
|
- if (!(ns->pi_type && ns->ms == 8)) {
|
|
|
+ if (!(ns->pi_type && ns->ms == 8) &&
|
|
|
+ req->cmd_type != REQ_TYPE_DRV_PRIV) {
|
|
|
req->errors = -EFAULT;
|
|
|
blk_mq_complete_request(req);
|
|
|
return BLK_MQ_RQ_QUEUE_OK;
|
|
@@ -1747,15 +1748,14 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
|
|
|
meta_len = (io.nblocks + 1) * ns->ms;
|
|
|
write = io.opcode & 1;
|
|
|
|
|
|
+ if (ns->ext) {
|
|
|
+ length += meta_len;
|
|
|
+ meta_len = 0;
|
|
|
+ }
|
|
|
if (meta_len) {
|
|
|
if (((io.metadata & 3) || !io.metadata) && !ns->ext)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (ns->ext) {
|
|
|
- length += meta_len;
|
|
|
- meta_len = 0;
|
|
|
- }
|
|
|
-
|
|
|
meta = dma_alloc_coherent(dev->dev, meta_len,
|
|
|
&meta_dma, GFP_KERNEL);
|
|
|
if (!meta) {
|