24 Sep, 2006

1 commit


21 Sep, 2006

1 commit


03 Sep, 2006

3 commits

  • We currently allocated seperate tfms for data and header digests. There
    is no reason for this since we can never calculate a rx header and
    digest at the same time. Same for sends. So this patch removes the data
    tfms and has the send and recv sides use the rx_tfm or tx_tfm.

    I also made the connection creation code preallocate the tfms because I
    thought I hit a bug where I changed the digests settings during a
    relogin but could not allocate the tfm and then we just failed.

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     
  • iscsi_tcp calculates padding by using the expected transfer length. This
    has the problem where if we have immediate data = no and initial R2T =
    yes, and the transfer length ended up needing padding then we send:

    1. header
    2. padding which should have gone after data
    3. data

    Besides this bug, we also assume the target will always ask for nice
    transfer lengths and the first burst length will always be a nice value.
    As far as I can tell form the RFC this is not a requirement. It would be
    silly to do this, but if someone did it we will end doing bad things.

    Finally the last bug in that bit of code is in our handling of the
    recalculation of data digests when we do not send a whole iscsi_buf in
    one try. The bug here is that we call crypto_digest_final on a
    iscsi_sendpage error, then when we send the rest of the iscsi_buf, we
    doiscsi_data_digest_init and this causes the previous data digest to be
    lost.

    And to make matters worse, some of these bugs are replicated over and
    over and over again for immediate data, solicited data and unsolicited
    data. So the attached patch made over the iscsi git tree (see
    kernel.org/git for details) which I updated today to include the patches
    I said I merged, consolidates the sending of data, padding and digests
    and calculation of data digests and fixes the above bugs.

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     
  • iSCSI RFC states that the first burst length must be smaller than the
    max burst length. We currently assume targets will be good, but that may
    not be the case, so this patch adds a check.

    This patch also moves the unsol data out offset to the lib so the LLDs
    do not have to track it.

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     

29 Jul, 2006

1 commit

  • We currently try to allocate a max_recv_data_segment_length
    which can be very large (default is 64K), and common uses
    are up to 1MB. It is very very difficult to allocte this
    much contiguous memory and it turns out we never even use it.
    We really only need a couple of pages, so this patch has us
    allocates just what we know what we need today.

    Later if vendors start adding vendor specific data and
    we need to handle large buffers we can do this, but for
    the last 4 years we have not seen anyone do this or request
    it.

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     

20 May, 2006

1 commit

  • Discovered by steven@hayter.me.uk and patch by michaelc@cs.wisc.edu

    The dtask mempool is reserving 261120 items per session! Since we are now
    sending headers with sendmsg there is no reason for the mempool and that
    was causing us to us carzy amounts of mem. We can preallicate a header in
    the r2t and task struct and reuse them

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     

15 Apr, 2006

2 commits

  • This just converts iscsi_tcp to the lib

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     
  • The current iscsi_tcp eh is not nicely setup for dm-multipath
    and performs some extra task management functions when they
    are not needed.

    The attached patch:

    - Fixes the TMF issues. If a session is rebuilt
    then we do not send aborts.

    - Fixes the problem where if the host reset fired, we would
    return SUCCESS even though we had not really done anything
    yet. This ends up causing problem with scsi_error.c's TUR.

    - If someone has turned on the userspace nop daemon code to try
    and detect network problems before the scsi command timeout
    we can now drop and clean up the session before the scsi command
    timesout and fires the eh speeding up the time it takes for a
    command to go from one patch to another. For network problems
    we fail the command with DID_BUS_BUSY so if failfast is set
    scsi_decide_disposition fails the command up to dm for it to
    try on another path.

    - And we had to add some basic iscsi session block code. Previously
    if we were trying to repair a session we would retrun a MLQUEUE code
    in the queuecommand. This worked but it was not the most efficient
    or pretty thing to do since it would take a while to relogin
    to the target. For iscsi_tcp/open-iscsi a lot of the iscsi error handler
    is in userspace the block code is pretty bare. We will be
    adding to that for qla4xxx.

    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     

05 Feb, 2006

2 commits

  • >From erezz@voltaire.com:

    rm conn->lock since it is not used anymore. The dataqueue is protected
    by the session lock and xmitmutex.

    Signed-off-by: Mike Christie
    Signed-off-by: Alex Aizman
    Signed-off-by: Dmitry Yusupov
    Signed-off-by: James Bottomley

    Mike Christie
     
  • From:
    michaelc@cs.wisc.edu
    fujita.tomonori@lab.ntt.co.jp
    da-x@monatomic.org

    and err path fixup from:
    ogerlitz@voltaire.com

    This patch cleans up that interface by having the lld and class
    pass a iscsi_cls_session or iscsi_cls_conn between each other when
    the function is used by HW and SW iscsi llds. This way the lld
    does not have to remember if it has to send a handle or pointer
    and a handle or pointer to connection, session or host.

    This also has the class verify the session handle that gets passed from
    userspace instead of using the pointer passed into the kernel directly.

    Signed-off-by: Mike Christie
    Signed-off-by: Alex Aizman
    Signed-off-by: Dmitry Yusupov
    Signed-off-by: James Bottomley

    Mike Christie
     

15 Jan, 2006

2 commits

  • From Mike Christie and FUJITA Tomonori :

    We cannot use page_address becuase some pages could be highmem.
    Instead, we can use sock_no_sendpage which does kmap for us.

    Signed-off-by: Alex Aizman
    Signed-off-by: Dmitry Yusupov
    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    Mike Christie
     
  • Users can write to a page while we are sending it and making
    digest calculations. This ends up causing us to retry the command
    when a digest error is later reported. By using sock_no_sendpage
    when data digests are calculated we can avoid a lot of (not all but it
    helps) the retries becuase sock_no_sendpage is not zero copy.

    Signed-off-by: Alex Aizman
    Signed-off-by: Dmitry Yusupov
    Signed-off-by: Mike Christie
    Signed-off-by: James Bottomley

    FUJITA Tomonori
     

13 Jan, 2006

1 commit


14 Dec, 2005

1 commit

  • From Wang Zhenyu:

    High queue depth was a problem for some targets so make queue_depth adjustable

    From Mike Christie

    Make default queue_depth a little lower

    Signed-off-by: Mike Christie
    Signed-off-by: Alex Aizman
    Signed-off-by: Dmitry Yusupov
    Signed-off-by: James Bottomley

    Mike Christie
     

06 Aug, 2005

1 commit