提交 ba9e358f 编写于 作者: L Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-for-linus-2.6

...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
#ifndef NDEBUG #ifndef NDEBUG
#define NDEBUG 0 #define NDEBUG 0
#endif #endif
#ifndef NDEBUG #ifndef NDEBUG_ABORT
#define NDEBUG_ABORT 0 #define NDEBUG_ABORT 0
#endif #endif
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#define AAC_MAX_LUN (8) #define AAC_MAX_LUN (8)
#define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff) #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 * These macros convert from physical channels to virtual channels
......
...@@ -185,6 +185,7 @@ static struct { ...@@ -185,6 +185,7 @@ static struct {
{"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN}, {"PIONEER", "CD-ROM DRM-600", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
{"PIONEER", "CD-ROM DRM-602X", 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-604X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
{"PIONEER", "CD-ROM DRM-624X", NULL, BLIST_FORCELUN | BLIST_SINGLELUN},
{"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN}, {"REGAL", "CDC-4X", NULL, BLIST_MAX5LUN | BLIST_SINGLELUN},
{"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN}, {"SanDisk", "ImageMate CF-SD1", NULL, BLIST_FORCELUN},
{"SEAGATE", "ST34555N", "0930", BLIST_NOTQ}, /* Chokes on tagged INQUIRY */ {"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) ...@@ -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_run_queue(struct request_queue *q);
static void scsi_release_buffers(struct scsi_cmnd *cmd);
/* /*
* Function: scsi_unprep_request() * Function: scsi_unprep_request()
...@@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd) ...@@ -1040,8 +1039,10 @@ static int scsi_init_io(struct scsi_cmnd *cmd)
* if sg table allocation fails, requeue request later. * if sg table allocation fails, requeue request later.
*/ */
sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC); sgpnt = scsi_alloc_sgtable(cmd, GFP_ATOMIC);
if (unlikely(!sgpnt)) if (unlikely(!sgpnt)) {
scsi_unprep_request(req);
return BLKPREP_DEFER; return BLKPREP_DEFER;
}
cmd->request_buffer = (char *) sgpnt; cmd->request_buffer = (char *) sgpnt;
cmd->request_bufflen = req->nr_sectors << 9; cmd->request_bufflen = req->nr_sectors << 9;
...@@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req) ...@@ -1245,8 +1246,8 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
*/ */
ret = scsi_init_io(cmd); ret = scsi_init_io(cmd);
switch(ret) { switch(ret) {
/* For BLKPREP_KILL/DEFER the cmd was released */
case BLKPREP_KILL: case BLKPREP_KILL:
/* BLKPREP_KILL return also releases the command */
goto kill; goto kill;
case BLKPREP_DEFER: case BLKPREP_DEFER:
goto defer; goto defer;
......
...@@ -819,12 +819,15 @@ show_fc_private_host_tgtid_bind_type(struct class_device *cdev, char *buf) ...@@ -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); 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 static ssize_t
store_fc_private_host_tgtid_bind_type(struct class_device *cdev, store_fc_private_host_tgtid_bind_type(struct class_device *cdev,
const char *buf, size_t count) const char *buf, size_t count)
{ {
struct Scsi_Host *shost = transport_class_to_shost(cdev); 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; enum fc_tgtid_binding_type val;
unsigned long flags; unsigned long flags;
...@@ -834,9 +837,13 @@ store_fc_private_host_tgtid_bind_type(struct class_device *cdev, ...@@ -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 changing bind type, purge all unused consistent bindings */
if (val != fc_host_tgtid_bind_type(shost)) { if (val != fc_host_tgtid_bind_type(shost)) {
spin_lock_irqsave(shost->host_lock, flags); spin_lock_irqsave(shost->host_lock, flags);
list_for_each_entry_safe(rport, next_rport, while (!list_empty(&fc_host_rport_bindings(shost))) {
&fc_host_rport_bindings(shost), peers) get_list_head_entry(rport,
&fc_host_rport_bindings(shost), peers);
spin_unlock_irqrestore(shost->host_lock, flags);
fc_rport_terminate(rport); fc_rport_terminate(rport);
spin_lock_irqsave(shost->host_lock, flags);
}
spin_unlock_irqrestore(shost->host_lock, flags); spin_unlock_irqrestore(shost->host_lock, flags);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册