Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 5300
b: refs/heads/master
c: ad2b931
h: refs/heads/master
v: v3
  • Loading branch information
Mike Miller authored and Linus Torvalds committed Jul 28, 2005
1 parent e101666 commit 10398dd
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eaaf9c68e75edf0fa51c5770eb68c2a6cb5ff66b
refs/heads/master: ad2b93123d2b3cb4ba9a98dd5f62acb6d6b50391
49 changes: 26 additions & 23 deletions trunk/drivers/block/cciss.c
Original file line number Diff line number Diff line change
Expand Up @@ -1135,7 +1135,7 @@ static int revalidate_allvol(ctlr_info_t *host)
/* this is for the online array utilities */
if (!drv->heads && i)
continue;
blk_queue_hardsect_size(host->queue, drv->block_size);
blk_queue_hardsect_size(drv->queue, drv->block_size);
set_capacity(disk, drv->nr_blocks);
add_disk(disk);
}
Expand Down Expand Up @@ -1691,7 +1691,7 @@ static int cciss_revalidate(struct gendisk *disk)
cciss_read_capacity(h->ctlr, logvol, size_buff, 1, &total_size, &block_size);
cciss_geometry_inquiry(h->ctlr, logvol, 1, total_size, block_size, inq_buff, drv);

blk_queue_hardsect_size(h->queue, drv->block_size);
blk_queue_hardsect_size(drv->queue, drv->block_size);
set_capacity(disk, drv->nr_blocks);

kfree(size_buff);
Expand Down Expand Up @@ -2248,12 +2248,12 @@ static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs)
* them up. We will also keep track of the next queue to run so
* that every queue gets a chance to be started first.
*/
for (j=0; j < NWD; j++){
int curr_queue = (start_queue + j) % NWD;
for (j=0; j < h->highest_lun + 1; j++){
int curr_queue = (start_queue + j) % (h->highest_lun + 1);
/* make sure the disk has been added and the drive is real
* because this can be called from the middle of init_one.
*/
if(!(h->gendisk[curr_queue]->queue) ||
if(!(h->drv[curr_queue].queue) ||
!(h->drv[curr_queue].heads))
continue;
blk_start_queue(h->gendisk[curr_queue]->queue);
Expand All @@ -2264,22 +2264,21 @@ static irqreturn_t do_cciss_intr(int irq, void *dev_id, struct pt_regs *regs)
if ((find_first_zero_bit(h->cmd_pool_bits, NR_CMDS)) == NR_CMDS)
{
if (curr_queue == start_queue){
h->next_to_run = (start_queue + 1) % NWD;
h->next_to_run = (start_queue + 1) % (h->highest_lun + 1);
goto cleanup;
} else {
h->next_to_run = curr_queue;
goto cleanup;
}
} else {
curr_queue = (curr_queue + 1) % NWD;
curr_queue = (curr_queue + 1) % (h->highest_lun + 1);
}
}

cleanup:
spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
return IRQ_HANDLED;
}

/*
* We cannot read the structure directly, for portablity we must use
* the io functions.
Expand Down Expand Up @@ -2789,13 +2788,6 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,
}

spin_lock_init(&hba[i]->lock);
q = blk_init_queue(do_cciss_request, &hba[i]->lock);
if (!q)
goto clean4;

q->backing_dev_info.ra_pages = READ_AHEAD;
hba[i]->queue = q;
q->queuedata = hba[i];

/* Initialize the pdev driver private data.
have it point to hba[i]. */
Expand All @@ -2817,6 +2809,20 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,

cciss_procinit(i);

for(j=0; j < NWD; j++) { /* mfm */
drive_info_struct *drv = &(hba[i]->drv[j]);
struct gendisk *disk = hba[i]->gendisk[j];

q = blk_init_queue(do_cciss_request, &hba[i]->lock);
if (!q) {
printk(KERN_ERR
"cciss: unable to allocate queue for disk %d\n",
j);
break;
}
drv->queue = q;

q->backing_dev_info.ra_pages = READ_AHEAD;
blk_queue_bounce_limit(q, hba[i]->pdev->dma_mask);

/* This is a hardware imposed limit. */
Expand All @@ -2827,26 +2833,23 @@ static int __devinit cciss_init_one(struct pci_dev *pdev,

blk_queue_max_sectors(q, 512);


for(j=0; j<NWD; j++) {
drive_info_struct *drv = &(hba[i]->drv[j]);
struct gendisk *disk = hba[i]->gendisk[j];

q->queuedata = hba[i];
sprintf(disk->disk_name, "cciss/c%dd%d", i, j);
sprintf(disk->devfs_name, "cciss/host%d/target%d", i, j);
disk->major = hba[i]->major;
disk->first_minor = j << NWD_SHIFT;
disk->fops = &cciss_fops;
disk->queue = hba[i]->queue;
disk->queue = q;
disk->private_data = drv;
/* we must register the controller even if no disks exist */
/* this is for the online array utilities */
if(!drv->heads && j)
continue;
blk_queue_hardsect_size(hba[i]->queue, drv->block_size);
blk_queue_hardsect_size(q, drv->block_size);
set_capacity(disk, drv->nr_blocks);
add_disk(disk);
}

return(1);

clean4:
Expand Down Expand Up @@ -2912,10 +2915,10 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev)
for (j = 0; j < NWD; j++) {
struct gendisk *disk = hba[i]->gendisk[j];
if (disk->flags & GENHD_FL_UP)
blk_cleanup_queue(disk->queue);
del_gendisk(disk);
}

blk_cleanup_queue(hba[i]->queue);
pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof(CommandList_struct),
hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
pci_free_consistent(hba[i]->pdev, NR_CMDS * sizeof( ErrorInfo_struct),
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/block/cciss.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ typedef struct _drive_info_struct
{
__u32 LunID;
int usage_count;
struct request_queue *queue;
sector_t nr_blocks;
int block_size;
int heads;
Expand Down Expand Up @@ -72,7 +73,6 @@ struct ctlr_info
unsigned int maxQsinceinit;
unsigned int maxSG;
spinlock_t lock;
struct request_queue *queue;

//* pointers to command and error info pool */
CommandList_struct *cmd_pool;
Expand Down Expand Up @@ -260,7 +260,7 @@ struct board_type {
struct access_method *access;
};

#define CCISS_LOCK(i) (hba[i]->queue->queue_lock)
#define CCISS_LOCK(i) (&hba[i]->lock)

#endif /* CCISS_H */

0 comments on commit 10398dd

Please sign in to comment.