mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block
* 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block: (153 commits) block: add request clone interface (v2) floppy: fix hibernation ramdisk: remove long-deprecated "ramdisk=" boot-time parameter fs/bio.c: add missing __user annotation block: prevent possible io_context->refcount overflow Add serial number support for virtio_blk, V4a block: Add missing bounce_pfn stacking and fix comments Revert "block: Fix bounce limit setting in DM" cciss: decode unit attention in SCSI error handling code cciss: Remove no longer needed sendcmd reject processing code cciss: change SCSI error handling routines to work with interrupts enabled. cciss: separate error processing and command retrying code in sendcmd_withirq_core() cciss: factor out fix target status processing code from sendcmd functions cciss: simplify interface of sendcmd() and sendcmd_withirq() cciss: factor out core of sendcmd_withirq() for use by SCSI error handling code cciss: Use schedule_timeout_uninterruptible in SCSI error handling code block: needs to set the residual length of a bidi request Revert "block: implement blkdev_readpages" block: Fix bounce limit setting in DM Removed reference to non-existing file Documentation/PCI/PCI-DMA-mapping.txt ... Manually fix conflicts with tracing updates in: block/blk-sysfs.c drivers/ide/ide-atapi.c drivers/ide/ide-cd.c drivers/ide/ide-floppy.c drivers/ide/ide-tape.c include/trace/events/block.h kernel/trace/blktrace.c
This commit is contained in:
commit
c9059598ea
158 changed files with 3790 additions and 2760 deletions
|
|
@ -47,40 +47,41 @@ static int do_blktrans_request(struct mtd_blktrans_ops *tr,
|
|||
unsigned long block, nsect;
|
||||
char *buf;
|
||||
|
||||
block = req->sector << 9 >> tr->blkshift;
|
||||
nsect = req->current_nr_sectors << 9 >> tr->blkshift;
|
||||
block = blk_rq_pos(req) << 9 >> tr->blkshift;
|
||||
nsect = blk_rq_cur_bytes(req) >> tr->blkshift;
|
||||
|
||||
buf = req->buffer;
|
||||
|
||||
if (req->cmd_type == REQ_TYPE_LINUX_BLOCK &&
|
||||
req->cmd[0] == REQ_LB_OP_DISCARD)
|
||||
return !tr->discard(dev, block, nsect);
|
||||
return tr->discard(dev, block, nsect);
|
||||
|
||||
if (!blk_fs_request(req))
|
||||
return 0;
|
||||
return -EIO;
|
||||
|
||||
if (req->sector + req->current_nr_sectors > get_capacity(req->rq_disk))
|
||||
return 0;
|
||||
if (blk_rq_pos(req) + blk_rq_cur_sectors(req) >
|
||||
get_capacity(req->rq_disk))
|
||||
return -EIO;
|
||||
|
||||
switch(rq_data_dir(req)) {
|
||||
case READ:
|
||||
for (; nsect > 0; nsect--, block++, buf += tr->blksize)
|
||||
if (tr->readsect(dev, block, buf))
|
||||
return 0;
|
||||
return 1;
|
||||
return -EIO;
|
||||
return 0;
|
||||
|
||||
case WRITE:
|
||||
if (!tr->writesect)
|
||||
return 0;
|
||||
return -EIO;
|
||||
|
||||
for (; nsect > 0; nsect--, block++, buf += tr->blksize)
|
||||
if (tr->writesect(dev, block, buf))
|
||||
return 0;
|
||||
return 1;
|
||||
return -EIO;
|
||||
return 0;
|
||||
|
||||
default:
|
||||
printk(KERN_NOTICE "Unknown request %u\n", rq_data_dir(req));
|
||||
return 0;
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -88,19 +89,18 @@ static int mtd_blktrans_thread(void *arg)
|
|||
{
|
||||
struct mtd_blktrans_ops *tr = arg;
|
||||
struct request_queue *rq = tr->blkcore_priv->rq;
|
||||
struct request *req = NULL;
|
||||
|
||||
/* we might get involved when memory gets low, so use PF_MEMALLOC */
|
||||
current->flags |= PF_MEMALLOC;
|
||||
|
||||
spin_lock_irq(rq->queue_lock);
|
||||
|
||||
while (!kthread_should_stop()) {
|
||||
struct request *req;
|
||||
struct mtd_blktrans_dev *dev;
|
||||
int res = 0;
|
||||
int res;
|
||||
|
||||
req = elv_next_request(rq);
|
||||
|
||||
if (!req) {
|
||||
if (!req && !(req = blk_fetch_request(rq))) {
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
spin_unlock_irq(rq->queue_lock);
|
||||
schedule();
|
||||
|
|
@ -119,8 +119,13 @@ static int mtd_blktrans_thread(void *arg)
|
|||
|
||||
spin_lock_irq(rq->queue_lock);
|
||||
|
||||
end_request(req, res);
|
||||
if (!__blk_end_request_cur(req, res))
|
||||
req = NULL;
|
||||
}
|
||||
|
||||
if (req)
|
||||
__blk_end_request_all(req, -EIO);
|
||||
|
||||
spin_unlock_irq(rq->queue_lock);
|
||||
|
||||
return 0;
|
||||
|
|
@ -373,7 +378,7 @@ int register_mtd_blktrans(struct mtd_blktrans_ops *tr)
|
|||
}
|
||||
|
||||
tr->blkcore_priv->rq->queuedata = tr;
|
||||
blk_queue_hardsect_size(tr->blkcore_priv->rq, tr->blksize);
|
||||
blk_queue_logical_block_size(tr->blkcore_priv->rq, tr->blksize);
|
||||
if (tr->discard)
|
||||
blk_queue_set_discard(tr->blkcore_priv->rq,
|
||||
blktrans_discard_request);
|
||||
|
|
|
|||
Loading…
Reference in a new issue