mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 17:43:59 +00:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-for-linus-2.6
This commit is contained in:
commit
ba9e358fd0
@ -91,7 +91,7 @@
|
||||
#ifndef NDEBUG
|
||||
#define NDEBUG 0
|
||||
#endif
|
||||
#ifndef NDEBUG
|
||||
#ifndef NDEBUG_ABORT
|
||||
#define NDEBUG_ABORT 0
|
||||
#endif
|
||||
|
||||
|
@ -19,7 +19,7 @@
|
||||
#define AAC_MAX_LUN (8)
|
||||
|
||||
#define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff)
|
||||
#define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)512)
|
||||
#define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)256)
|
||||
|
||||
/*
|
||||
* These macros convert from physical channels to virtual channels
|
||||
|
@ -185,6 +185,7 @@ static struct {
|
||||
{"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"PIONEER", "CD-ROM DRM-602X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"PIONEER", "CD-ROM DRM-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
|
||||
{"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
|
||||
{"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
|
||||
{"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */
|
||||
|
@ -97,7 +97,6 @@ int scsi_insert_special_req(struct scsi_request *sreq, int at_head)
|
||||
}
|
||||
|
||||
static void scsi_run_queue(struct request_queue *q);
|
||||
static void scsi_release_buffers(struct scsi_cmnd *cmd);
|
||||
|
||||
/*
|
||||
* Function: scsi_unprep_request()
|
||||
@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
|
||||
* if sg table allocation fails, requeue request later.
|
||||
*/
|
||||
sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC);
|
||||
if (unlikely(!sgpnt))
|
||||
if (unlikely(!sgpnt)) {
|
||||
scsi_unprep_request(req);
|
||||
return BLKPREP_DEFER;
|
||||
}
|
||||
|
||||
cmd->request_buffer = (char *) sgpnt;
|
||||
cmd->request_bufflen = req->nr_sectors << 9;
|
||||
@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
|
||||
*/
|
||||
ret = scsi_init_io(cmd);
|
||||
switch(ret) {
|
||||
/* For BLKPREP_KILL/DEFER the cmd was released */
|
||||
case BLKPREP_KILL:
|
||||
/* BLKPREP_KILL return also releases the command */
|
||||
goto kill;
|
||||
case BLKPREP_DEFER:
|
||||
goto defer;
|
||||
|
@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf)
|
||||
return snprintf(buf, FC_BINDTYPE_MAX_NAMELEN, "%s\n", name);
|
||||
}
|
||||
|
||||
#define get_list_head_entry(pos, head, member) \
|
||||
pos = list_entry((head)->next, typeof(*pos), member)
|
||||
|
||||
static ssize_t
|
||||
store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct Scsi_Host *shost = transport_class_to_shost(cdev);
|
||||
struct fc_rport *rport, *next_rport;
|
||||
struct fc_rport *rport;
|
||||
enum fc_tgtid_binding_type val;
|
||||
unsigned long flags;
|
||||
|
||||
@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
|
||||
/* if changing bind type, purge all unused consistent bindings */
|
||||
if (val != fc_host_tgtid_bind_type(shost)) {
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
list_for_each_entry_safe(rport, next_rport,
|
||||
&fc_host_rport_bindings(shost), peers)
|
||||
while (!list_empty(&fc_host_rport_bindings(shost))) {
|
||||
get_list_head_entry(rport,
|
||||
&fc_host_rport_bindings(shost), peers);
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
fc_rport_terminate(rport);
|
||||
spin_lock_irqsave(shost->host_lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(shost->host_lock, flags);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user