public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@infradead.org>
To: "Nicholas A. Bellinger" <nab@linux-iscsi.org>
Cc: Andy Grover <agrover@redhat.com>,
	target-devel@vger.kernel.org, linux-scsi@vger.kernel.org
Subject: Re: [PATCH 06/20] target: Eliminate usage of struct se_mem
Date: Tue, 19 Jul 2011 00:56:30 -0400	[thread overview]
Message-ID: <20110719045630.GA26652@infradead.org> (raw)
In-Reply-To: <1310932648.26130.32.camel@haakon2.linux-iscsi.org>

On Sun, Jul 17, 2011 at 12:57:28PM -0700, Nicholas A. Bellinger wrote:
> index 1645aab..2f89001 100644
> --- a/drivers/target/iscsi/iscsi_target.c
> +++ b/drivers/target/iscsi/iscsi_target.c
> @@ -780,6 +780,7 @@ static int iscsit_allocate_iovecs(struct iscsi_cmd *cmd)
>  static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
>  {
>         struct scatterlist *sgl;
> +       unsigned char *buf;
>         u32 length = cmd->se_cmd.data_length;
>         int nents = DIV_ROUND_UP(length, PAGE_SIZE);
>         int i = 0, ret;
> @@ -804,6 +805,14 @@ static int iscsit_alloc_buffs(struct iscsi_cmd *cmd)
>                 if (!page)
>                         goto page_alloc_failed;
>  
> +               buf = kmap_atomic(page, KM_IRQ0);
> +               if (!buf) {
> +                       pr_err("kmap_atomic failed\n");
> +                       goto page_alloc_failed;
> +               }
> +               memset(buf, 0, buf_size);
> +               kunmap_atomic(buf, KM_IRQ0);
> +

This should use clear_highpage, or even better just the __GFP_ZERO flag
to the page allocator.

> @@ -3971,13 +3972,30 @@ transport_generic_get_mem(struct se_cmd *cmd)
>                 u32 page_len = min_t(u32, length, PAGE_SIZE);
>                 page = alloc_page(GFP_KERNEL);
>                 if (!page)
> -                       return -ENOMEM;
> +                       goto out;
> +
> +               buf = kmap_atomic(page, KM_IRQ0);
> +               if (!buf) {
> +                       pr_err("kmap_atomic failed\n");
> +                       goto out;
> +               }
> +               memset(buf, 0, page_len);
> +               kunmap_atomic(buf, KM_IRQ0);

Same here.

> > -		ret = transport_map_control_cmd_to_task(cmd);
> > +		ret = dev->transport->map_task_SG(task);
> >  		if (ret < 0)
> >  			return ret;
> 
> Calling dev->transport->map_task_SG() here for all cases is incorrect,
> and was triggering an OOPs during iscsi-target initial LUN scan..  Fixed
> with the following:
> 
> commit 93529985c9de3cd5ab40cb322da24a4d8372ad4c
> Author: Nicholas Bellinger <nab@linux-iscsi.org>
> Date:   Sat Jul 16 19:27:07 2011 -0700
> 
>     target: Fix incorrect usage of ->map_task_SG in transport_generic_new_cmd
>     
>     This patch fixes incorrect usage of ->map_task_SG() for all se_cmd descriptors
>     in transport_generic_new_cmd().  This introduced with commit:

Indeed.  But why did you also commit

	"target/iblock: Make iblock_map_task_SG only for SCF_SCSI_DATA_SG_IO_CDB"

which is a hacky workaround for the same issue inside iblock?


> -
> +       /*
> +        * Call transport_new_cmd_obj() to invoke transport_allocate_tasks()
> +        * and perform the memory map to backend subsystem devices.
> +        */
>         ret = transport_new_cmd_obj(cmd);

What is that comment supposed to help with?  It's rather confusing to
be honest.


  parent reply	other threads:[~2011-07-19  4:56 UTC|newest]

Thread overview: 61+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-07 22:33 [0/20] Patches from June 28 v2 Andy Grover
2011-07-07 22:33 ` [PATCH 01/20] target: Remove ifdeffed code in t_g_process_write Andy Grover
2011-07-07 22:33 ` [PATCH 02/20] target: Pass 2nd param of transport_split_cdb by value Andy Grover
2011-07-07 22:33 ` [PATCH 03/20] target: Make all control CDBs scatter-gather Andy Grover
2011-07-08 19:57   ` Christoph Hellwig
2011-07-09  0:02     ` Andy Grover
2011-07-09  0:35     ` Andy Grover
2011-07-07 22:33 ` [PATCH 04/20] target: Enforce 1 page max for control cdb buffer sizes Andy Grover
2011-07-08 19:58   ` Christoph Hellwig
2011-07-07 22:33 ` [PATCH 05/20] target: Remove direct ramdisk code Andy Grover
2011-07-08 19:59   ` Christoph Hellwig
2011-07-07 22:33 ` [PATCH 06/20] target: Eliminate usage of struct se_mem Andy Grover
2011-07-08 20:13   ` Christoph Hellwig
2011-07-09  0:38     ` Andy Grover
2011-07-07 22:33 ` [PATCH 07/20] target: Rename task_sg_num to task_sg_nents Andy Grover
2011-07-07 22:33 ` [PATCH 08/20] target: Remove custom debug macros for pr_debug. Use pr_err() Andy Grover
2011-07-07 22:33 ` [PATCH 09/20] target: Remove custom debug macros in non-iscsi fabrics Andy Grover
2011-07-07 22:33 ` [PATCH 10/20] target/iscsi: Remove iscsi_target_debug.h and usage of TRACE() & printk() Andy Grover
2011-07-07 22:33 ` [PATCH 11/20] target/iscsi: Remove SE_CMD macro Andy Grover
2011-07-07 22:33 ` [PATCH 12/20] target: Set WSNZ=1 in block limits VPD. Abort if WRITE_SAME sectors = 0 Andy Grover
2011-07-07 22:33 ` [PATCH 13/20] target: Remove transport do_se_mem_map callback Andy Grover
2011-07-07 22:33 ` [PATCH 14/20] target: When using kunmap_first_data_page, use goto-style err handling Andy Grover
2011-07-07 22:33 ` [PATCH 15/20] target: Further simplify transport_free_pages Andy Grover
2011-07-07 22:33 ` [PATCH 16/20] target: Redo task allocation return value handling Andy Grover
2011-07-07 22:33 ` [PATCH 17/20] target/core: Remove extra parentheses Andy Grover
2011-07-07 22:33 ` [PATCH 18/20] target: Extraneous paren removal in tcm_vhost and tcm_qla2xxx Andy Grover
2011-07-07 22:33 ` [PATCH 19/20] target/iscsi: Remove unneeded parens in conditional statements Andy Grover
2011-07-07 22:33 ` [PATCH 20/20] target/iscsi: Simplify two small bits Andy Grover
2011-07-09  1:18 ` [0/20] target: Patches for June 28 v3 Andy Grover
2011-07-17 19:32   ` Nicholas A. Bellinger
2011-07-09  1:18 ` [PATCH 01/20] target: Remove ifdeffed code in t_g_process_write Andy Grover
2011-07-09  1:18 ` [PATCH 02/20] target: Pass 2nd param of transport_split_cdb by value Andy Grover
2011-07-09  1:18 ` [PATCH 03/20] target: Make all control CDBs scatter-gather Andy Grover
2011-07-17 19:40   ` Nicholas A. Bellinger
2011-07-09  1:18 ` [PATCH 04/20] target: Enforce 1 page max for control cdb buffer sizes Andy Grover
2011-07-09  1:18 ` [PATCH 05/20] target: Remove direct ramdisk code Andy Grover
2011-07-09  1:18 ` [PATCH 06/20] target: Eliminate usage of struct se_mem Andy Grover
2011-07-17 19:57   ` Nicholas A. Bellinger
2011-07-18 17:16     ` Andy Grover
2011-07-18 18:44       ` Nicholas A. Bellinger
2011-07-19  4:56     ` Christoph Hellwig [this message]
2011-07-19  5:40       ` Nicholas A. Bellinger
2011-07-09  1:18 ` [PATCH 07/20] target: Rename task_sg_num to task_sg_nents Andy Grover
2011-07-09  1:18 ` [PATCH 08/20] target: Remove custom debug macros for pr_debug. Use pr_err() Andy Grover
2011-07-09  1:18 ` [PATCH 09/20] target: Remove custom debug macros in non-iscsi fabrics Andy Grover
2011-07-17 20:02   ` Nicholas A. Bellinger
2011-07-09  1:18 ` [PATCH 10/20] target/iscsi: Remove iscsi_target_debug.h and usage of TRACE() & printk() Andy Grover
2011-07-09  1:18 ` [PATCH 11/20] target/iscsi: Remove SE_CMD macro Andy Grover
2011-07-09  1:18 ` [PATCH 12/20] target: Set WSNZ=1 in block limits VPD. Abort if WRITE_SAME sectors = 0 Andy Grover
2011-07-09  1:18 ` [PATCH 13/20] target: Remove transport do_se_mem_map callback Andy Grover
2011-07-09  1:18 ` [PATCH 14/20] target: Further simplify transport_free_pages Andy Grover
2011-07-09  1:18 ` [PATCH 15/20] target: Redo task allocation return value handling Andy Grover
2011-07-09  1:18 ` [PATCH 16/20] target/core: Remove extra parentheses Andy Grover
2011-07-09  1:18 ` [PATCH 17/20] target: Extraneous paren removal in tcm_vhost and tcm_qla2xxx Andy Grover
2011-07-09  1:18 ` [PATCH 18/20] target/iscsi: Remove unneeded parens in conditional statements Andy Grover
2011-07-09  1:18 ` [PATCH 19/20] target/iscsi: Simplify two small bits Andy Grover
2011-07-09  1:18 ` [PATCH 20/20] target: change alloc_task call to take *cdb, not *cmd Andy Grover
2011-07-09 10:11   ` Christoph Hellwig
2011-07-10 22:41     ` Andy Grover
2011-07-11 15:28       ` Christoph Hellwig
2011-07-17 20:04   ` Nicholas A. Bellinger

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=20110719045630.GA26652@infradead.org \
    --to=hch@infradead.org \
    --cc=agrover@redhat.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=nab@linux-iscsi.org \
    --cc=target-devel@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