Re: [PATCH 4/6] bsg: add sg_io_v4 structure
On Wed, Dec 20 2006, FUJITA Tomonori wrote: > This patch adds sg_io_v4 structure that Doug proposed last month. > > There's one major change from the RFC. I dropped iovec, which needs > compat stuff. The bsg code simply calls blk_rq_map_user against > dout_xferp/din_xferp. So if possible, the page frames are directly > mapped. If not possible, the block layer allocates new page frames and > does memory copies. > > Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> > --- > include/linux/bsg.h | 43 +++ > 1 files changed, 43 insertions(+), 0 deletions(-) > > diff --git a/include/linux/bsg.h b/include/linux/bsg.h > index dc0d728..0d212cc 100644 > --- a/include/linux/bsg.h > +++ b/include/linux/bsg.h > @@ -1,6 +1,47 @@ > #ifndef BSG_H > #define BSG_H > > +struct sg_io_v4 { > + int32_t guard; /* [i] 'Q' to differentiate from v3 */ > + uint32_t protocol; /* [i] 0 -> SCSI , */ I prefer using the u32 types and so on for explicitly sized variables. I'll make that change. -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 5/6] bsg: replace SG v3 with SG v4
On Wed, Dec 20 2006, FUJITA Tomonori wrote: > This patch replaces SG v3 in bsg with SG v4 (except for SG_IO). > > Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> > --- > block/bsg.c | 198 > --- > 1 files changed, 121 insertions(+), 77 deletions(-) > > diff --git a/block/bsg.c b/block/bsg.c > index 53a09a5..6d139d2 100644 > --- a/block/bsg.c > +++ b/block/bsg.c > @@ -103,8 +103,8 @@ struct bsg_command { > struct request *rq; > struct bio *bio; > int err; > - struct sg_io_hdr hdr; > - struct sg_io_hdr __user *uhdr; > + struct sg_io_v4 hdr; > + struct sg_io_v4 __user *uhdr; > char sense[SCSI_SENSE_BUFFERSIZE]; > }; > > @@ -235,57 +235,82 @@ static struct bsg_command *bsg_get_comma > return bc; > } > > +static int blk_fill_sgv4_hdr_rq(request_queue_t *q, struct request *rq, > + struct sg_io_v4 *hdr, int has_write_perm) > +{ > + memset(rq->cmd, 0, BLK_MAX_CDB); /* ATAPI hates garbage after CDB */ > + > + if (copy_from_user(rq->cmd, (void *)(unsigned long)hdr->request, > +hdr->request_len)) > + return -EFAULT; Strange casting, that should be cleaned up. Also reminds me that the sg_io_v4 header needs proper __user annotation. -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 6/6] bsg: add SG_IO to SG v4
On Wed, Dec 20 2006, FUJITA Tomonori wrote: > This adds SG_IO support to SG v4. > > Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> > --- > block/bsg.c | 23 +-- > 1 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/block/bsg.c b/block/bsg.c > index 6d139d2..9dc5d36 100644 > --- a/block/bsg.c > +++ b/block/bsg.c > @@ -945,8 +945,27 @@ bsg_ioctl(struct inode *inode, struct fi > void __user *uarg = (void __user *) arg; > return scsi_cmd_ioctl(file, bd->disk, cmd, uarg); > } > - case SG_IO: > - return -EINVAL; > + case SG_IO: { > + struct request *rq; > + struct bio *bio; > + struct sg_io_v4 hdr; > + > + if (copy_from_user(&hdr, uarg, sizeof(hdr))) > + return -EFAULT; > + > + rq = bsg_map_hdr(bd, &hdr); > + if (IS_ERR(rq)) > + return PTR_ERR(rq); > + > + bio = rq->bio; Pointless assignment. In fact the bio can be completely removed. > + blk_execute_rq(bd->queue, bd->disk, rq, 0); > + blk_complete_sgv4_hdr_rq(rq, &hdr, bio); > + > + if (copy_to_user(uarg, &hdr, sizeof(hdr))) > + return -EFAULT; > + else > + return 0; Kill the else. I'll make both changes. Applying your series as-is, and making the changes I noted in the previous mails. -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 6/6] bsg: add SG_IO to SG v4
On Wed, Dec 20 2006, Jens Axboe wrote: > On Wed, Dec 20 2006, FUJITA Tomonori wrote: > > This adds SG_IO support to SG v4. > > > > Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> > > --- > > block/bsg.c | 23 +-- > > 1 files changed, 21 insertions(+), 2 deletions(-) > > > > diff --git a/block/bsg.c b/block/bsg.c > > index 6d139d2..9dc5d36 100644 > > --- a/block/bsg.c > > +++ b/block/bsg.c > > @@ -945,8 +945,27 @@ bsg_ioctl(struct inode *inode, struct fi > > void __user *uarg = (void __user *) arg; > > return scsi_cmd_ioctl(file, bd->disk, cmd, uarg); > > } > > - case SG_IO: > > - return -EINVAL; > > + case SG_IO: { > > + struct request *rq; > > + struct bio *bio; > > + struct sg_io_v4 hdr; > > + > > + if (copy_from_user(&hdr, uarg, sizeof(hdr))) > > + return -EFAULT; > > + > > + rq = bsg_map_hdr(bd, &hdr); > > + if (IS_ERR(rq)) > > + return PTR_ERR(rq); > > + > > + bio = rq->bio; > > Pointless assignment. In fact the bio can be completely removed. > > + blk_execute_rq(bd->queue, bd->disk, rq, 0); > > + blk_complete_sgv4_hdr_rq(rq, &hdr, bio); My mistake, the bio assignment is fine and of course needed. -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Bugme-new] [Bug 7717] New: Tapes unreadable after unload
(please respond via emailed reply-to-all) On Wed, 20 Dec 2006 02:31:18 -0800 [EMAIL PROTECTED] wrote: > http://bugzilla.kernel.org/show_bug.cgi?id=7717 > >Summary: Tapes unreadable after unload > Kernel Version: tested 2.6.17 through 2.6.29 with various results I assume that means 2.6.17 and 2.6.19 failed. > Status: NEW > Severity: blocking > Owner: [EMAIL PROTECTED] > Submitter: [EMAIL PROTECTED] > > > Most recent kernel where this bug did *NOT* occur: 2.6.19 And that means that 2.6.19 did not fail. Please clarify. > Distribution: Slackware/Fedora > Hardware Environment: HP 530, HP Dl380 > Software Environment: tar, mtx > Problem Description: Doing a tar backup works well. Data is written and is > readable. Binary restore comparison is ok. After unload/load the tape produces > Input/output errors. The tape is unreadable with working kernels too. Any > attempt to restore data from faulty tapes were in vain until now. > > Steps to reproduce: > tar cvf /dev/st0 /path/to/something > mtx -f /dev/sg1 unload > mtx -f /dev/sg1 load X > tar tvf /dev/st0 > > tar output: > tar: /dev/st0: Cannot read: Input/output error > tar: At beginning of tape, quitting now > tar: Error is not recoverable: exiting now > > All read() attempts fail after 42 bytes. (I can attach those 42 bytes if they > are of any help). - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [Bugme-new] [Bug 7717] New: Tapes unreadable after unload
Andrew Morton wrote: Kernel Version: tested 2.6.17 through 2.6.29 with various results I assume that means 2.6.17 and 2.6.19 failed. I tested it with 2.6.17 through 2.6.19 including subversions (like 2.6.17.3 and such). I found that 2.6.19 works and also found two other version in the line that work. The other about 4-5 version that I have tried, did not work. The works/not works is not consistent as I found 2.6.17.x kernel that did work and 2.6.18 that did not. If the problem is known, I'd also like to know what the problem was as I need to recover two tapes that are inaccessible now. (LTO3 400GB tapes so there was no time to erase all data even if something near the beginning of the tape is bad). Status: NEW Severity: blocking Owner: [EMAIL PROTECTED] Submitter: [EMAIL PROTECTED] Most recent kernel where this bug did *NOT* occur: 2.6.19 And that means that 2.6.19 did not fail. Right now I'm using 2.6.19 and it works. Haven't tried it with 2.6.19.1 yet though. - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2.6.20-rc1 10/10] dec_esp: Driver model for the PMAZ-A
This is a set of changes that converts the PMAZ-A support to the driver model. Signed-off-by: Maciej W. Rozycki <[EMAIL PROTECTED]> --- The use of the driver model required switching to the hotplug SCSI initialization model, which in turn required a change to the core NCR53C9x driver. I decided not to break all the frontend drivers and introduced an additional parameter for esp_allocate() to select between the old and the new model. I hope this is OK, but I would be fine with converting NCR53C9x to the new model unconditionally as long as I do not have to fix all the other frontends (OK, perhaps I could do some of them ;-) ). Please apply. Maciej patch-2.6.20-rc1-tc-pmaz-a-5 diff -up --recursive --new-file linux-2.6.20-rc1.macro/drivers/scsi/NCR53C9x.c linux-2.6.20-rc1/drivers/scsi/NCR53C9x.c --- linux-2.6.20-rc1.macro/drivers/scsi/NCR53C9x.c 2006-12-14 01:14:23.0 + +++ linux-2.6.20-rc1/drivers/scsi/NCR53C9x.c2006-12-18 21:29:38.0 + @@ -528,12 +528,16 @@ void esp_bootup_reset(struct NCR_ESP *es /* Allocate structure and insert basic data such as SCSI chip frequency * data and a pointer to the device */ -struct NCR_ESP* esp_allocate(struct scsi_host_template *tpnt, void *esp_dev) +struct NCR_ESP* esp_allocate(struct scsi_host_template *tpnt, void *esp_dev, +int hotplug) { struct NCR_ESP *esp, *elink; struct Scsi_Host *esp_host; - esp_host = scsi_register(tpnt, sizeof(struct NCR_ESP)); + if (hotplug) + esp_host = scsi_host_alloc(tpnt, sizeof(struct NCR_ESP)); + else + esp_host = scsi_register(tpnt, sizeof(struct NCR_ESP)); if(!esp_host) panic("Cannot register ESP SCSI host"); esp = (struct NCR_ESP *) esp_host->hostdata; diff -up --recursive --new-file linux-2.6.20-rc1.macro/drivers/scsi/NCR53C9x.h linux-2.6.20-rc1/drivers/scsi/NCR53C9x.h --- linux-2.6.20-rc1.macro/drivers/scsi/NCR53C9x.h 2006-12-14 01:14:23.0 + +++ linux-2.6.20-rc1/drivers/scsi/NCR53C9x.h2006-12-18 21:29:38.0 + @@ -652,7 +652,7 @@ extern int nesps, esps_in_use, esps_runn /* External functions */ extern void esp_bootup_reset(struct NCR_ESP *esp, struct ESP_regs *eregs); -extern struct NCR_ESP *esp_allocate(struct scsi_host_template *, void *); +extern struct NCR_ESP *esp_allocate(struct scsi_host_template *, void *, int); extern void esp_deallocate(struct NCR_ESP *); extern void esp_release(void); extern void esp_initialize(struct NCR_ESP *); diff -up --recursive --new-file linux-2.6.20-rc1.macro/drivers/scsi/blz1230.c linux-2.6.20-rc1/drivers/scsi/blz1230.c --- linux-2.6.20-rc1.macro/drivers/scsi/blz1230.c 2006-12-14 01:14:23.0 + +++ linux-2.6.20-rc1/drivers/scsi/blz1230.c 2006-12-18 21:29:38.0 + @@ -121,7 +121,8 @@ int __init blz1230_esp_detect(struct scs */ address = ZTWO_VADDR(board); eregs = (struct ESP_regs *)(address + REAL_BLZ1230_ESP_ADDR); - esp = esp_allocate(tpnt, (void *)board+REAL_BLZ1230_ESP_ADDR); + esp = esp_allocate(tpnt, (void *)board + REAL_BLZ1230_ESP_ADDR, + 0); esp_write(eregs->esp_cfg1, (ESP_CONFIG1_PENABLE | 7)); udelay(5); diff -up --recursive --new-file linux-2.6.20-rc1.macro/drivers/scsi/blz2060.c linux-2.6.20-rc1/drivers/scsi/blz2060.c --- linux-2.6.20-rc1.macro/drivers/scsi/blz2060.c 2006-12-14 01:14:23.0 + +++ linux-2.6.20-rc1/drivers/scsi/blz2060.c 2006-12-18 21:29:38.0 + @@ -100,7 +100,7 @@ int __init blz2060_esp_detect(struct scs unsigned long board = z->resource.start; if (request_mem_region(board+BLZ2060_ESP_ADDR, sizeof(struct ESP_regs), "NCR53C9x")) { - esp = esp_allocate(tpnt, (void *)board+BLZ2060_ESP_ADDR); + esp = esp_allocate(tpnt, (void *)board + BLZ2060_ESP_ADDR, 0); /* Do command transfer with programmed I/O */ esp->do_pio_cmds = 1; diff -up --recursive --new-file linux-2.6.20-rc1.macro/drivers/scsi/cyberstorm.c linux-2.6.20-rc1/drivers/scsi/cyberstorm.c --- linux-2.6.20-rc1.macro/drivers/scsi/cyberstorm.c2006-12-14 01:14:23.0 + +++ linux-2.6.20-rc1/drivers/scsi/cyberstorm.c 2006-12-18 21:29:38.0 + @@ -126,7 +126,7 @@ int __init cyber_esp_detect(struct scsi_ sizeof(struct ESP_regs)); return 0; } - esp = esp_allocate(tpnt, (void *)board+CYBER_ESP_ADDR); + esp = esp_allocate(tpnt, (void *)board + CYBER_ESP_ADDR, 0); /* Do command transfer with programmed I/O */ esp->do_pio_cmds = 1; diff -up --recursive --new-file linux-2.6.20-rc1.macro/drivers/scsi/cyberstormII.c lin
Re: [Bugme-new] [Bug 7717] New: Tapes unreadable after unload
On Wed, 20 Dec 2006, Andrew Morton wrote: > > (please respond via emailed reply-to-all) > > On Wed, 20 Dec 2006 02:31:18 -0800 > [EMAIL PROTECTED] wrote: > > > http://bugzilla.kernel.org/show_bug.cgi?id=7717 > > > >Summary: Tapes unreadable after unload > > Kernel Version: tested 2.6.17 through 2.6.29 with various results > > I assume that means 2.6.17 and 2.6.19 failed. > > > Status: NEW > > Severity: blocking > > Owner: [EMAIL PROTECTED] > > Submitter: [EMAIL PROTECTED] > > > > > > Most recent kernel where this bug did *NOT* occur: 2.6.19 > > And that means that 2.6.19 did not fail. > > Please clarify. > > > Distribution: Slackware/Fedora > > Hardware Environment: HP 530, HP Dl380 > > Software Environment: tar, mtx > > Problem Description: Doing a tar backup works well. Data is written and is > > readable. Binary restore comparison is ok. After unload/load the tape > > produces > > Input/output errors. The tape is unreadable with working kernels too. Any > > attempt to restore data from faulty tapes were in vain until now. > > > > Steps to reproduce: > > tar cvf /dev/st0 /path/to/something > > mtx -f /dev/sg1 unload > > mtx -f /dev/sg1 load X > > tar tvf /dev/st0 > > I tried this with 2.6.19 and the tape was readable. Unfortunately I don't have any older kernels around to test. I have not heard about any problem like this. Note that the data becomes unreadable after the tape is touched by mtx through sg device, i.e, bypassing st. > > tar output: > > tar: /dev/st0: Cannot read: Input/output error > > tar: At beginning of tape, quitting now > > tar: Error is not recoverable: exiting now > > Do you find any messages with dmesg or in system log? > > All read() attempts fail after 42 bytes. (I can attach those 42 bytes if > > they > > are of any help). > Interesting byte count :-) -- Kai - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 4/6] bsg: add sg_io_v4 structure
From: Jens Axboe <[EMAIL PROTECTED]> Subject: Re: [PATCH 4/6] bsg: add sg_io_v4 structure Date: Wed, 20 Dec 2006 11:13:14 +0100 > On Wed, Dec 20 2006, FUJITA Tomonori wrote: > > This patch adds sg_io_v4 structure that Doug proposed last month. > > > > There's one major change from the RFC. I dropped iovec, which needs > > compat stuff. The bsg code simply calls blk_rq_map_user against > > dout_xferp/din_xferp. So if possible, the page frames are directly > > mapped. If not possible, the block layer allocates new page frames and > > does memory copies. > > > > Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> > > --- > > include/linux/bsg.h | 43 +++ > > 1 files changed, 43 insertions(+), 0 deletions(-) > > > > diff --git a/include/linux/bsg.h b/include/linux/bsg.h > > index dc0d728..0d212cc 100644 > > --- a/include/linux/bsg.h > > +++ b/include/linux/bsg.h > > @@ -1,6 +1,47 @@ > > #ifndef BSG_H > > #define BSG_H > > > > +struct sg_io_v4 { > > + int32_t guard; /* [i] 'Q' to differentiate from v3 */ > > + uint32_t protocol; /* [i] 0 -> SCSI , */ > > I prefer using the u32 types and so on for explicitly sized variables. > I'll make that change. I see though we need to use __u32 instead of u32, don't we? - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/1] fusion: fibre channel: return DID_ERROR for MPI_IOCSTATUS_SCSI_IOC_TERMINATED
The fibre channel IOC may kill a request for a variety of reasons, some of which may be recovered by a retry, some of which are unlikely to be recovered. Return DID_ERROR instead of DID_RESET to permit retry of the command, just not an infinite number of them. Signed-off-by: Michael Reed <[EMAIL PROTECTED]> The fibre channel IOC may kill a request for a variety of reasons, some of which may be recovered by a retry, some of which are unlikely to be recovered. Return DID_ERROR instead of DID_RESET to permit retry of the command, just not an infinite number of them. Signed-off-by: Michael Reed <[EMAIL PROTECTED]> --- kdbu/drivers/message/fusion/mptscsih.c 2006-08-04 02:10:22.0 -0500 +++ kdb/drivers/message/fusion/mptscsih.c 2006-12-16 12:54:13.952128107 -0600 @@ -702,9 +702,14 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_F } } } + else if (ioc->bus_type == FC) { +/* i/o killed by IOC */ +sc->result = DID_ERROR << 16; +break; + } /* - * Allow non-SAS & non-NEXUS_LOSS to drop into below code + * Allow non-FC, non-SAS & non-NEXUS_LOSS to drop into below code */ case MPI_IOCSTATUS_SCSI_TASK_TERMINATED: /* 0x0048 */
Re: [PATCH] scsi_execute_async() should add to the tail of the queue
Dan Aloni wrote: Hello, scsi_execute_async() has replaced scsi_do_req() a few versions ago, but it also incurred a change of behavior. I noticed that over-queuing a SCSI device using that function causes I/Os to be starved from low-level queuing for no justified reason. I think it makes much more sense to perserve the original behaviour of scsi_do_req() and add the request to the tail of the queue. As far as I'm aware the way in which scsi_do_req() was to insert at the head of the queue, leading to projects like SCST to come up with scsi_do_req_fifo() as queuing multiple commands using scsi_do_req() with constant head insertion might lead to out of order execution. Just thought I'd throw some light on the history and what others have done in the past. Steve - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] scsi_execute_async() should add to the tail of the queue
So instead of adding a parameter, we can make scsi_execute_async() decide for itself based on the SCSI command, with read/write I/Os taking the lowest priority. This seems like a bad idea, I can come up with a number of cases where the priority of a request would better be optimized by a higher level subsystem, rather than a simple prioritization based on the command type. The original suggestion to provide both head and tail insertion options seems like the obvious solution, short of a full priority queuing system. - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2.6.20-rc1 01/10] TURBOchannel update to the driver model
This is a set of changes to convert support for the TURBOchannel bus to the driver model. It implements the usual set of calls similar to what other bus drivers have: tc_register_driver(), tc_unregister_driver(), etc. All the platform-specific bits have been removed and headers from asm-mips/dec/ have been merged into linux/tc.h, which should be included by drivers. Signed-off-by: Maciej W. Rozycki <[EMAIL PROTECTED]> --- Please apply. Maciej patch-mips-2.6.18-20060920-tc-sysfs-78 diff -up --recursive --new-file linux-mips-2.6.18-20060920.macro/MAINTAINERS linux-mips-2.6.18-20060920/MAINTAINERS --- linux-mips-2.6.18-20060920.macro/MAINTAINERS2006-09-20 04:56:08.0 + +++ linux-mips-2.6.18-20060920/MAINTAINERS 2006-11-30 01:54:54.0 + @@ -2910,6 +2910,11 @@ L: [EMAIL PROTECTED] W: http://vtun.sourceforge.net/tun S: Maintained +TURBOCHANNEL SUBSYSTEM +P: Maciej W. Rozycki +M: [EMAIL PROTECTED] +S: Maintained + U14-34F SCSI DRIVER P: Dario Ballabio M: [EMAIL PROTECTED] diff -up --recursive --new-file linux-mips-2.6.18-20060920.macro/drivers/tc/Makefile linux-mips-2.6.18-20060920/drivers/tc/Makefile --- linux-mips-2.6.18-20060920.macro/drivers/tc/Makefile2003-06-05 04:03:00.0 + +++ linux-mips-2.6.18-20060920/drivers/tc/Makefile 2006-10-03 21:01:58.0 + @@ -4,7 +4,7 @@ # Object file lists. -obj-$(CONFIG_TC) += tc.o +obj-$(CONFIG_TC) += tc.o tc-driver.o obj-$(CONFIG_ZS) += zs.o obj-$(CONFIG_VT) += lk201.o lk201-map.o lk201-remap.o diff -up --recursive --new-file linux-mips-2.6.18-20060920.macro/drivers/tc/tc-driver.c linux-mips-2.6.18-20060920/drivers/tc/tc-driver.c --- linux-mips-2.6.18-20060920.macro/drivers/tc/tc-driver.c 1970-01-01 00:00:00.0 + +++ linux-mips-2.6.18-20060920/drivers/tc/tc-driver.c 2006-12-19 22:29:49.0 + @@ -0,0 +1,110 @@ +/* + * TURBOchannel driver services. + * + * Copyright (c) 2005 James Simmons + * Copyright (c) 2006 Maciej W. Rozycki + * + * Loosely based on drivers/dio/dio-driver.c and + * drivers/pci/pci-driver.c. + * + * This file is subject to the terms and conditions of the GNU + * General Public License. See the file "COPYING" in the main + * directory of this archive for more details. + */ + +#include +#include +#include + +/** + * tc_register_driver - register a new TC driver + * @drv: the driver structure to register + * + * Adds the driver structure to the list of registered drivers + * Returns a negative value on error, otherwise 0. + * If no error occurred, the driver remains registered even if + * no device was claimed during registration. + */ +int tc_register_driver(struct tc_driver *tdrv) +{ + return driver_register(&tdrv->driver); +} +EXPORT_SYMBOL(tc_register_driver); + +/** + * tc_unregister_driver - unregister a TC driver + * @drv: the driver structure to unregister + * + * Deletes the driver structure from the list of registered TC drivers, + * gives it a chance to clean up by calling its remove() function for + * each device it was responsible for, and marks those devices as + * driverless. + */ +void tc_unregister_driver(struct tc_driver *tdrv) +{ + driver_unregister(&tdrv->driver); +} +EXPORT_SYMBOL(tc_unregister_driver); + +/** + * tc_match_device - tell if a TC device structure has a matching + * TC device ID structure + * @tdrv: the TC driver to earch for matching TC device ID strings + * @tdev: the TC device structure to match against + * + * Used by a driver to check whether a TC device present in the + * system is in its list of supported devices. Returns the matching + * tc_device_id structure or %NULL if there is no match. + */ +const struct tc_device_id *tc_match_device(struct tc_driver *tdrv, + struct tc_dev *tdev) +{ + const struct tc_device_id *id = tdrv->id_table; + + if (id) { + while (id->name[0] || id->vendor[0]) { + if (strcmp(tdev->name, id->name) == 0 && + strcmp(tdev->vendor, id->vendor) == 0) + return id; + id++; + } + } + return NULL; +} +EXPORT_SYMBOL(tc_match_device); + +/** + * tc_bus_match - Tell if a device structure has a matching + *TC device ID structure + * @dev: the device structure to match against + * @drv: the device driver to search for matching TC device ID strings + * + * Used by a driver to check whether a TC device present in the + * system is in its list of supported devices. Returns 1 if there + * is a match or 0 otherwise. + */ +static int tc_bus_match(struct device *dev, struct device_driver *drv) +{ + struct tc_dev *tdev = to_tc_dev(dev); + struct tc_driver *tdrv = to_tc_driver(drv); + const struct tc_device_id *id; + + id = tc_match_device(tdrv, t
[PATCH 2.6.20-rc1 00/10] TURBOchannel update to the driver model
Hello, It has been much longer than expected, but finally it is here! This series of patches converts support for the TURBOchannel bus to the driver model. As a nice side effect, the generic part of the code is now really generic, that is no more dependencies on MIPS specifics under drivers/tc/ and platform specific code for MIPS got moved where it belongs. As to whether other relevant platforms will add TURBOchannel support or not I cannot tell right now. ;-) All the changes have been successfully tested with a DECstation 5000/133 and the necessary bits of additional hardware as appropriate. Where drivers supporting different bus attachments were concerned, they were built for configurations enabling all the other buses supported and run-time checked if possible. And last but not least, thanks to James Simmons for beginning this work a while ago as his code was great to start with. Maciej - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2.6.20-rc1 01/10] TURBOchannel update to the driver model
On Wed, 20 Dec 2006 12:01:30 + (GMT) "Maciej W. Rozycki" <[EMAIL PROTECTED]> wrote: > +/** > + * tc_register_driver - register a new TC driver > + * @drv: the driver structure to register > + * > + * Adds the driver structure to the list of registered drivers > + * Returns a negative value on error, otherwise 0. > + * If no error occurred, the driver remains registered even if > + * no device was claimed during registration. > + */ > +int tc_register_driver(struct tc_driver *tdrv) > +{ > + return driver_register(&tdrv->driver); > +} > +EXPORT_SYMBOL(tc_register_driver); > + > +/** > + * tc_unregister_driver - unregister a TC driver > + * @drv: the driver structure to unregister > + * > + * Deletes the driver structure from the list of registered TC drivers, > + * gives it a chance to clean up by calling its remove() function for > + * each device it was responsible for, and marks those devices as > + * driverless. > + */ > +void tc_unregister_driver(struct tc_driver *tdrv) > +{ > + driver_unregister(&tdrv->driver); > +} > +EXPORT_SYMBOL(tc_unregister_driver); I spose making these inline would save a bit of code, stack space and a couple of exports. - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 4/6] bsg: add sg_io_v4 structure
On Thu, Dec 21 2006, FUJITA Tomonori wrote: > From: Jens Axboe <[EMAIL PROTECTED]> > Subject: Re: [PATCH 4/6] bsg: add sg_io_v4 structure > Date: Wed, 20 Dec 2006 11:13:14 +0100 > > > On Wed, Dec 20 2006, FUJITA Tomonori wrote: > > > This patch adds sg_io_v4 structure that Doug proposed last month. > > > > > > There's one major change from the RFC. I dropped iovec, which needs > > > compat stuff. The bsg code simply calls blk_rq_map_user against > > > dout_xferp/din_xferp. So if possible, the page frames are directly > > > mapped. If not possible, the block layer allocates new page frames and > > > does memory copies. > > > > > > Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]> > > > --- > > > include/linux/bsg.h | 43 +++ > > > 1 files changed, 43 insertions(+), 0 deletions(-) > > > > > > diff --git a/include/linux/bsg.h b/include/linux/bsg.h > > > index dc0d728..0d212cc 100644 > > > --- a/include/linux/bsg.h > > > +++ b/include/linux/bsg.h > > > @@ -1,6 +1,47 @@ > > > #ifndef BSG_H > > > #define BSG_H > > > > > > +struct sg_io_v4 { > > > + int32_t guard; /* [i] 'Q' to differentiate from v3 */ > > > + uint32_t protocol; /* [i] 0 -> SCSI , */ > > > > I prefer using the u32 types and so on for explicitly sized variables. > > I'll make that change. > > I see though we need to use __u32 instead of u32, don't we? Yep, we should. -- Jens Axboe - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] scsi_execute_async() should add to the tail of the queue
Steven Hayter wrote: Dan Aloni wrote: Hello, scsi_execute_async() has replaced scsi_do_req() a few versions ago, but it also incurred a change of behavior. I noticed that over-queuing a SCSI device using that function causes I/Os to be starved from low-level queuing for no justified reason. I think it makes much more sense to perserve the original behaviour of scsi_do_req() and add the request to the tail of the queue. As far as I'm aware the way in which scsi_do_req() was to insert at the head of the queue, leading to projects like SCST to come up with scsi_do_req_fifo() as queuing multiple commands using scsi_do_req() with constant head insertion might lead to out of order execution. Just thought I'd throw some light on the history and what others have done in the past. In Linux 2.4.31 scsi_do_req() still inserts at the tail. This was also valid until 2.6.5. James, is the change you inserted in Linux 2.6.5 still relevant in 2.6 today? <[EMAIL PROTECTED]> [PATCH] add device quiescing to the SCSI API This patch adds the ability to quiesce a SCSI device. The idea is that user issued commands (including filesystem ones) would get blocked, while mid-layer and device issued ones would be allowed to proceed. This is for things like Domain Validation which like to operate on an otherwise quiet device. There is one big change: to get all of this to happen correctly, scsi_do_req() has to queue on the *head* of the request queue, not the tail as it was doing previously. The reason is that deferred requests block the queue, so anything needing executing after a deferred request has to go in front of it. I don't think there are any untoward consequences of this. -- Dan Aloni XIV LTD, http://www.xivstorage.com da-x (at) monatomic.org, dan (at) xiv.co.il - To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html