From f94ae2d20408e095b418acc865023469d75e4329 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 16 Jan 2020 10:30:04 +0100 Subject: [PATCH] 4.19-stable patches added patches: btrfs-simplify-inode-locking-for-rwf_nowait.patch rdma-mlx5-return-proper-error-value.patch rdma-srpt-report-the-scsi-residual-to-the-initiator.patch --- ...implify-inode-locking-for-rwf_nowait.patch | 41 +++++++++++ .../rdma-mlx5-return-proper-error-value.patch | 35 ++++++++++ ...t-the-scsi-residual-to-the-initiator.patch | 70 +++++++++++++++++++ queue-4.19/series | 3 + 4 files changed, 149 insertions(+) create mode 100644 queue-4.19/btrfs-simplify-inode-locking-for-rwf_nowait.patch create mode 100644 queue-4.19/rdma-mlx5-return-proper-error-value.patch create mode 100644 queue-4.19/rdma-srpt-report-the-scsi-residual-to-the-initiator.patch diff --git a/queue-4.19/btrfs-simplify-inode-locking-for-rwf_nowait.patch b/queue-4.19/btrfs-simplify-inode-locking-for-rwf_nowait.patch new file mode 100644 index 00000000000..2e72172de27 --- /dev/null +++ b/queue-4.19/btrfs-simplify-inode-locking-for-rwf_nowait.patch @@ -0,0 +1,41 @@ +From 9cf35f673583ccc9f3e2507498b3079d56614ad3 Mon Sep 17 00:00:00 2001 +From: Goldwyn Rodrigues +Date: Wed, 11 Sep 2019 11:45:15 -0500 +Subject: btrfs: simplify inode locking for RWF_NOWAIT + +From: Goldwyn Rodrigues + +commit 9cf35f673583ccc9f3e2507498b3079d56614ad3 upstream. + +This is similar to 942491c9e6d6 ("xfs: fix AIM7 regression"). Apparently +our current rwsem code doesn't like doing the trylock, then lock for +real scheme. This causes extra contention on the lock and can be +measured eg. by AIM7 benchmark. So change our read/write methods to +just do the trylock for the RWF_NOWAIT case. + +Fixes: edf064e7c6fe ("btrfs: nowait aio support") +Signed-off-by: Goldwyn Rodrigues +Reviewed-by: David Sterba +[ update changelog ] +Signed-off-by: David Sterba +Signed-off-by: Greg Kroah-Hartman + +--- + fs/btrfs/file.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/fs/btrfs/file.c ++++ b/fs/btrfs/file.c +@@ -1903,9 +1903,10 @@ static ssize_t btrfs_file_write_iter(str + (iocb->ki_flags & IOCB_NOWAIT)) + return -EOPNOTSUPP; + +- if (!inode_trylock(inode)) { +- if (iocb->ki_flags & IOCB_NOWAIT) ++ if (iocb->ki_flags & IOCB_NOWAIT) { ++ if (!inode_trylock(inode)) + return -EAGAIN; ++ } else { + inode_lock(inode); + } + diff --git a/queue-4.19/rdma-mlx5-return-proper-error-value.patch b/queue-4.19/rdma-mlx5-return-proper-error-value.patch new file mode 100644 index 00000000000..578a5907a8b --- /dev/null +++ b/queue-4.19/rdma-mlx5-return-proper-error-value.patch @@ -0,0 +1,35 @@ +From 546d30099ed204792083f043cd7e016de86016a3 Mon Sep 17 00:00:00 2001 +From: Leon Romanovsky +Date: Tue, 29 Oct 2019 07:57:21 +0200 +Subject: RDMA/mlx5: Return proper error value + +From: Leon Romanovsky + +commit 546d30099ed204792083f043cd7e016de86016a3 upstream. + +Returned value from mlx5_mr_cache_alloc() is checked to be error or real +pointer. Return proper error code instead of NULL which is not checked +later. + +Fixes: 81713d3788d2 ("IB/mlx5: Add implicit MR support") +Link: https://lore.kernel.org/r/20191029055721.7192-1-leon@kernel.org +Signed-off-by: Leon Romanovsky +Reviewed-by: Jason Gunthorpe +Signed-off-by: Jason Gunthorpe +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/infiniband/hw/mlx5/mr.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/infiniband/hw/mlx5/mr.c ++++ b/drivers/infiniband/hw/mlx5/mr.c +@@ -457,7 +457,7 @@ struct mlx5_ib_mr *mlx5_mr_cache_alloc(s + + if (entry < 0 || entry >= MAX_MR_CACHE_ENTRIES) { + mlx5_ib_err(dev, "cache entry %d is out of range\n", entry); +- return NULL; ++ return ERR_PTR(-EINVAL); + } + + ent = &cache->ent[entry]; diff --git a/queue-4.19/rdma-srpt-report-the-scsi-residual-to-the-initiator.patch b/queue-4.19/rdma-srpt-report-the-scsi-residual-to-the-initiator.patch new file mode 100644 index 00000000000..42e40b9ef23 --- /dev/null +++ b/queue-4.19/rdma-srpt-report-the-scsi-residual-to-the-initiator.patch @@ -0,0 +1,70 @@ +From e88982ad1bb12db699de96fbc07096359ef6176c Mon Sep 17 00:00:00 2001 +From: Bart Van Assche +Date: Tue, 5 Nov 2019 13:46:32 -0800 +Subject: RDMA/srpt: Report the SCSI residual to the initiator + +From: Bart Van Assche + +commit e88982ad1bb12db699de96fbc07096359ef6176c upstream. + +The code added by this patch is similar to the code that already exists in +ibmvscsis_determine_resid(). This patch has been tested by running the +following command: + +strace sg_raw -r 1k /dev/sdb 12 00 00 00 60 00 -o inquiry.bin |& + grep resid= + +Link: https://lore.kernel.org/r/20191105214632.183302-1-bvanassche@acm.org +Fixes: a42d985bd5b2 ("ib_srpt: Initial SRP Target merge for v3.3-rc1") +Signed-off-by: Bart Van Assche +Acked-by: Honggang Li +Signed-off-by: Jason Gunthorpe +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/infiniband/ulp/srpt/ib_srpt.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +--- a/drivers/infiniband/ulp/srpt/ib_srpt.c ++++ b/drivers/infiniband/ulp/srpt/ib_srpt.c +@@ -1324,9 +1324,11 @@ static int srpt_build_cmd_rsp(struct srp + struct srpt_send_ioctx *ioctx, u64 tag, + int status) + { ++ struct se_cmd *cmd = &ioctx->cmd; + struct srp_rsp *srp_rsp; + const u8 *sense_data; + int sense_data_len, max_sense_len; ++ u32 resid = cmd->residual_count; + + /* + * The lowest bit of all SAM-3 status codes is zero (see also +@@ -1348,6 +1350,28 @@ static int srpt_build_cmd_rsp(struct srp + srp_rsp->tag = tag; + srp_rsp->status = status; + ++ if (cmd->se_cmd_flags & SCF_UNDERFLOW_BIT) { ++ if (cmd->data_direction == DMA_TO_DEVICE) { ++ /* residual data from an underflow write */ ++ srp_rsp->flags = SRP_RSP_FLAG_DOUNDER; ++ srp_rsp->data_out_res_cnt = cpu_to_be32(resid); ++ } else if (cmd->data_direction == DMA_FROM_DEVICE) { ++ /* residual data from an underflow read */ ++ srp_rsp->flags = SRP_RSP_FLAG_DIUNDER; ++ srp_rsp->data_in_res_cnt = cpu_to_be32(resid); ++ } ++ } else if (cmd->se_cmd_flags & SCF_OVERFLOW_BIT) { ++ if (cmd->data_direction == DMA_TO_DEVICE) { ++ /* residual data from an overflow write */ ++ srp_rsp->flags = SRP_RSP_FLAG_DOOVER; ++ srp_rsp->data_out_res_cnt = cpu_to_be32(resid); ++ } else if (cmd->data_direction == DMA_FROM_DEVICE) { ++ /* residual data from an overflow read */ ++ srp_rsp->flags = SRP_RSP_FLAG_DIOVER; ++ srp_rsp->data_in_res_cnt = cpu_to_be32(resid); ++ } ++ } ++ + if (sense_data_len) { + BUILD_BUG_ON(MIN_MAX_RSP_SIZE <= sizeof(*srp_rsp)); + max_sense_len = ch->max_ti_iu_len - sizeof(*srp_rsp); diff --git a/queue-4.19/series b/queue-4.19/series index 4530bceff81..91fa9cb0e96 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -31,3 +31,6 @@ cifs-adjust-indentation-in-smb2_open_file.patch afs-fix-missing-cell-comparison-in-afs_test_super.patch drm-ttm-fix-start-page-for-huge-page-check-in-ttm_put_pages.patch drm-ttm-fix-incrementing-the-page-pointer-for-huge-pages.patch +btrfs-simplify-inode-locking-for-rwf_nowait.patch +rdma-mlx5-return-proper-error-value.patch +rdma-srpt-report-the-scsi-residual-to-the-initiator.patch -- 2.47.3