Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 156163
b: refs/heads/master
c: a85a00a
h: refs/heads/master
i:
  156161: 2fffd81
  156159: dc27219
v: v3
  • Loading branch information
unsik Kim authored and Jens Axboe committed Jul 28, 2009
1 parent e9771e2 commit ce4e373
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 18 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: 394c6cc63c1d6900ad7498a3221a1d48fc00c4fa
refs/heads/master: a85a00a699740f6f9863f88aef22060fe1534681
32 changes: 15 additions & 17 deletions trunk/drivers/block/mg_disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,42 +524,40 @@ static void mg_write_one(struct mg_host *host, struct request *req)
static void mg_write(struct request *req)
{
struct mg_host *host = req->rq_disk->private_data;
bool rem;
unsigned int rem = blk_rq_sectors(req);

if (mg_out(host, blk_rq_pos(req), blk_rq_sectors(req),
if (mg_out(host, blk_rq_pos(req), rem,
MG_CMD_WR, NULL) != MG_ERR_NONE) {
mg_bad_rw_intr(host);
return;
}

MG_DBG("requested %d sects (from %ld), buffer=0x%p\n",
blk_rq_sectors(req), blk_rq_pos(req), req->buffer);
rem, blk_rq_pos(req), req->buffer);

if (mg_wait(host, ATA_DRQ,
MG_TMAX_WAIT_WR_DRQ) != MG_ERR_NONE) {
mg_bad_rw_intr(host);
return;
}

mg_write_one(host, req);
do {
mg_write_one(host, req);

outb(MG_CMD_WR_CONF, (unsigned long)host->dev_base + MG_REG_COMMAND);
outb(MG_CMD_WR_CONF, (unsigned long)host->dev_base +
MG_REG_COMMAND);

do {
if (blk_rq_sectors(req) > 1 &&
mg_wait(host, ATA_DRQ,
MG_TMAX_WAIT_WR_DRQ) != MG_ERR_NONE) {
rem--;
if (rem > 1 && mg_wait(host, ATA_DRQ,
MG_TMAX_WAIT_WR_DRQ) != MG_ERR_NONE) {
mg_bad_rw_intr(host);
return;
} else if (mg_wait(host, MG_STAT_READY,
MG_TMAX_WAIT_WR_DRQ) != MG_ERR_NONE) {
mg_bad_rw_intr(host);
return;
}

rem = mg_end_request(host, 0, MG_SECTOR_SIZE);
if (rem)
mg_write_one(host, req);

outb(MG_CMD_WR_CONF,
(unsigned long)host->dev_base + MG_REG_COMMAND);
} while (rem);
} while (mg_end_request(host, 0, MG_SECTOR_SIZE));
}

static void mg_read_intr(struct mg_host *host)
Expand Down

0 comments on commit ce4e373

Please sign in to comment.