10 Dec, 2009

1 commit

  • dio transfer always resets mdata->page_order to zero. It breaks
    high-order pages previously allocated for non-dio transfer.

    This patches adds reserved_page_order to st_buffer structure to save
    page order for non-dio transfer.

    http://bugzilla.kernel.org/show_bug.cgi?id=14563

    When enlarge_buffer() allocates 524288 from 0, st uses six-order page
    allocation. So mdata->page_order is 6 and frp_seg is 2.

    After that, if st uses dio, sgl_map_user_pages() sets
    mdata->page_order to 0 for st_do_scsi(). After that, when we call
    normalize_buffer(), it frees only free frp_seg * PAGE_SIZE (2 * 4096)
    though we should free frp_seg * PAGE_SIZE << 6 (2 * 4096 << 6). So we
    see buffer_size is set to 516096 (524288 - 8192).

    Reported-by: Joachim Breuer
    Tested-by: Joachim Breuer
    Acked-by: Kai Makisara
    Signed-off-by: FUJITA Tomonori
    Cc: stable@kernel.org
    Signed-off-by: James Bottomley

    FUJITA Tomonori
     

03 Jan, 2009

7 commits


08 Apr, 2008

1 commit

  • Add new option MT_ST_SILI to enable setting the SILI bit in reads in variable
    block mode. If SILI is set, reading a block shorter than the byte count does
    not result in CHECK CONDITION. The length of the block is determined using the
    residual count from the HBA. Avoiding the REQUEST SENSE command for every
    block speeds up some real applications considerably.

    Signed-off-by: Kai Makisara
    Signed-off-by: James Bottomley

    Kai Makisara
     

23 Feb, 2008

1 commit


31 Jul, 2007

1 commit


03 Feb, 2007

1 commit

  • On Thu, 1 Feb 2007, Andrew Morton wrote:
    > On Thu, 1 Feb 2007 15:34:29 -0800
    > bugme-daemon@bugzilla.kernel.org wrote:
    >
    > > http://bugzilla.kernel.org/show_bug.cgi?id=7919
    > >
    > > Summary: Tape dies if wrong block size used
    > > Kernel Version: 2.6.20-rc5
    > > Status: NEW
    > > Severity: normal
    > > Owner: scsi_drivers-other@kernel-bugs.osdl.org
    > > Submitter: dmartin@sccd.ctc.edu
    > >
    > >
    > > Most recent kernel where this bug did *NOT* occur: 2.6.17.14
    > >
    > > Other Kernels Tested and Results:
    > >
    > > OK 2.6.15.7
    > > OK 2.6.16.37
    > > OK 2.6.17.14
    > > BAD 2.6.18.6
    > > BAD 2.6.18-1.2869.fc6
    > > BAD 2.6.19.2 +
    > > BAD 2.6.20-rc5
    > >
    > > NOTE: 2.6.18-1.2869.fc6 is a Fedora modified kernel, all others are from kernel.org
    > >
    ...
    > > Steps to reproduce:
    > > Get a Adaptec AHA-2940U/UW/D / AIC-7881U card and a tape drive,
    > > install a recent kernel
    > > set the tape block size - mt setblk 4096
    > > read from or write to tape using wrong block size - tar -b 7 -cvf /dev/tape foo
    > >
    Write does not trigger this bug because the driver refuses in fixed block
    mode writes that are not a multiple of the block size. Read does trigger
    it in my system.

    The bug is not associated with any specific HBA. st tries to do direct i/o
    in fixed block mode with reads that are not a multiple of tape block size.

    The patch in this message fixes the st problem by switching to using the
    driver buffer up to the next close of the device file in fixed block mode
    if the user asks for a read like this.

    I don't know why the bug has surfaced only after 2.6.17 although the st
    problem is old. There may be another bug in the block subsystem and this
    patch works around it. However, the patch fixes a problem in st and in
    this way it is a valid fix.

    This patch may also fix the bug 7900.

    The patch compiles and is lightly tested.

    Signed-off-by: Kai Makisara
    Signed-off-by: James Bottomley

    Kai Makisara
     

29 Jun, 2006

1 commit

  • I noticed that in_use in st_buffer is not used. The patch below
    against 2.6.17-rc3 removes it, assuming there is no future use for it.
    It was tested in a sparc SS20 with a DLT4000.

    Signed-off-by: Martin Habets
    Acked-by: Kai Mäkisara
    Signed-off-by: James Bottomley

    Martin Habets
     

15 Dec, 2005

1 commit

  • convert st to always send scatterlists and kill scsi_request
    usage.

    This is the same as last time as it was posted, but with Kai's patches
    merged and we now pass the bytes value to scsi_execute_async.

    TODO:

    - move DIO code to common place or make block layers usable for ULDs.
    - move buffer allocation code to common place for all ULDs to use. And
    make buffer allocation code handle all queue limits so we can find
    out about problems before calling scsi_execute_async.
    - move indirect (copy_to/from_user) paths commone place or make block
    layers usable for ULDs.

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

    Mike Christie
     

08 Aug, 2005

1 commit

  • I have rediffed the patch against 2.6.13-rc5, done a couple of cosmetic
    cleanups, and run some tests. Brian King has acknowledged that it fixes the
    problems he has seen. Seems mature enough for inclusion into 2.6.14 (or
    later)?

    Nate's explanation of the changes:

    I've attached patches against 2.6.13rc2. These are basically identical
    to my earlier patches, as I found that all issues I'd seen in earlier
    kernels still existed in this kernel.

    To summarize, the changes are: (more details in my original email)

    - add a kref to the scsi_tape structure, and associate reference
    counting stuff

    - set sr_request->end_io = blk_end_sync_rq so we get notified when an IO
    is rejected when the device goes away

    - check rq_status when IOs complete, else we don't know that IOs
    rejected for a dead device in fact did not complete

    - change last_SRpnt so it's set before an async IO is issued (in case
    st_sleep_done is bypassed)

    - fix a bogus use of last_SRpnt in st_chk_result

    Signed-off-by: Nate Dailey
    Signed-off-by: Kai Makisara
    Signed-off-by: James Bottomley

    Kai Makisara
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds