mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
Merge branch 'for-linus' of git://git.kernel.dk/linux-block
Says Jens:
"Time to push off some of the pending items. I really wanted to wait
until we had the regression nailed, but alas it's not quite there yet.
But I'm very confident that it's "just" a missing expire on exit, so
fix from Tejun should be fairly trivial. I'm headed out for a week on
the slopes.
- Killing the barrier part of mtip32xx. It doesn't really support
barriers, and it doesn't need them (writes are fully ordered).
- A few fixes from Dan Carpenter, preventing overflows of integer
multiplication.
- A fixup for loop, fixing a previous commit that didn't quite solve
the partial read problem from Dave Young.
- A bio integer overflow fix from Kent Overstreet.
- Improvement/fix of the door "keep locked" part of the cdrom shared
code from Paolo Benzini.
- A few cfq fixes from Shaohua Li.
- A fix for bsg sysfs warning when removing a file it did not create
from Stanislaw Gruszka.
- Two fixes for floppy from Vivek, preventing a crash.
- A few block core fixes from Tejun. One killing the over-optimized
ioc exit path, cleaning that up nicely. Two others fixing an oops
on elevator switch, due to calling into the scheduler merge check
code without holding the queue lock."
* 'for-linus' of git://git.kernel.dk/linux-block:
block: fix lockdep warning on io_context release put_io_context()
relay: prevent integer overflow in relay_open()
loop: zero fill bio instead of return -EIO for partial read
bio: don't overflow in bio_get_nr_vecs()
floppy: Fix a crash during rmmod
floppy: Cleanup disk->queue before caling put_disk() if add_disk() was never called
cdrom: move shared static to cdrom_device_info
bsg: fix sysfs link remove warning
block: don't call elevator callbacks for plug merges
block: separate out blk_rq_merge_ok() and blk_try_merge() from elevator functions
mtip32xx: removed the irrelevant argument of mtip_hw_submit_io() and the unused member of struct driver_data
block: strip out locking optimization in put_io_context()
cdrom: use copy_to_user() without the underscores
block: fix ioc locking warning
block: fix NULL icq_cache reference
block,cfq: change code order
This commit is contained in:
commit
3ec1e88b33
21 changed files with 155 additions and 233 deletions
|
|
@ -4368,8 +4368,14 @@ out_unreg_blkdev:
|
|||
out_put_disk:
|
||||
while (dr--) {
|
||||
del_timer_sync(&motor_off_timer[dr]);
|
||||
if (disks[dr]->queue)
|
||||
if (disks[dr]->queue) {
|
||||
blk_cleanup_queue(disks[dr]->queue);
|
||||
/*
|
||||
* put_disk() is not paired with add_disk() and
|
||||
* will put queue reference one extra time. fix it.
|
||||
*/
|
||||
disks[dr]->queue = NULL;
|
||||
}
|
||||
put_disk(disks[dr]);
|
||||
}
|
||||
return err;
|
||||
|
|
@ -4579,6 +4585,15 @@ static void __exit floppy_module_exit(void)
|
|||
platform_device_unregister(&floppy_device[drive]);
|
||||
}
|
||||
blk_cleanup_queue(disks[drive]->queue);
|
||||
|
||||
/*
|
||||
* These disks have not called add_disk(). Don't put down
|
||||
* queue reference in put_disk().
|
||||
*/
|
||||
if (!(allowed_drive_mask & (1 << drive)) ||
|
||||
fdc_state[FDC(drive)].version == FDC_NONE)
|
||||
disks[drive]->queue = NULL;
|
||||
|
||||
put_disk(disks[drive]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -356,14 +356,14 @@ lo_direct_splice_actor(struct pipe_inode_info *pipe, struct splice_desc *sd)
|
|||
return __splice_from_pipe(pipe, sd, lo_splice_actor);
|
||||
}
|
||||
|
||||
static int
|
||||
static ssize_t
|
||||
do_lo_receive(struct loop_device *lo,
|
||||
struct bio_vec *bvec, int bsize, loff_t pos)
|
||||
{
|
||||
struct lo_read_data cookie;
|
||||
struct splice_desc sd;
|
||||
struct file *file;
|
||||
long retval;
|
||||
ssize_t retval;
|
||||
|
||||
cookie.lo = lo;
|
||||
cookie.page = bvec->bv_page;
|
||||
|
|
@ -379,26 +379,28 @@ do_lo_receive(struct loop_device *lo,
|
|||
file = lo->lo_backing_file;
|
||||
retval = splice_direct_to_actor(file, &sd, lo_direct_splice_actor);
|
||||
|
||||
if (retval < 0)
|
||||
return retval;
|
||||
if (retval != bvec->bv_len)
|
||||
return -EIO;
|
||||
return 0;
|
||||
return retval;
|
||||
}
|
||||
|
||||
static int
|
||||
lo_receive(struct loop_device *lo, struct bio *bio, int bsize, loff_t pos)
|
||||
{
|
||||
struct bio_vec *bvec;
|
||||
int i, ret = 0;
|
||||
ssize_t s;
|
||||
int i;
|
||||
|
||||
bio_for_each_segment(bvec, bio, i) {
|
||||
ret = do_lo_receive(lo, bvec, bsize, pos);
|
||||
if (ret < 0)
|
||||
s = do_lo_receive(lo, bvec, bsize, pos);
|
||||
if (s < 0)
|
||||
return s;
|
||||
|
||||
if (s != bvec->bv_len) {
|
||||
zero_fill_bio(bio);
|
||||
break;
|
||||
}
|
||||
pos += bvec->bv_len;
|
||||
}
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
|
||||
|
|
|
|||
|
|
@ -2068,8 +2068,6 @@ static int mtip_hw_ioctl(struct driver_data *dd, unsigned int cmd,
|
|||
* when the read completes.
|
||||
* @data Callback data passed to the callback function
|
||||
* when the read completes.
|
||||
* @barrier If non-zero, this command must be completed before
|
||||
* issuing any other commands.
|
||||
* @dir Direction (read or write)
|
||||
*
|
||||
* return value
|
||||
|
|
@ -2077,7 +2075,7 @@ static int mtip_hw_ioctl(struct driver_data *dd, unsigned int cmd,
|
|||
*/
|
||||
static void mtip_hw_submit_io(struct driver_data *dd, sector_t start,
|
||||
int nsect, int nents, int tag, void *callback,
|
||||
void *data, int barrier, int dir)
|
||||
void *data, int dir)
|
||||
{
|
||||
struct host_to_dev_fis *fis;
|
||||
struct mtip_port *port = dd->port;
|
||||
|
|
@ -2108,8 +2106,6 @@ static void mtip_hw_submit_io(struct driver_data *dd, sector_t start,
|
|||
*((unsigned int *) &fis->lba_low) = (start & 0xFFFFFF);
|
||||
*((unsigned int *) &fis->lba_low_ex) = ((start >> 24) & 0xFFFFFF);
|
||||
fis->device = 1 << 6;
|
||||
if (barrier)
|
||||
fis->device |= FUA_BIT;
|
||||
fis->features = nsect & 0xFF;
|
||||
fis->features_ex = (nsect >> 8) & 0xFF;
|
||||
fis->sect_count = ((tag << 3) | (tag >> 5));
|
||||
|
|
@ -3087,7 +3083,6 @@ static void mtip_make_request(struct request_queue *queue, struct bio *bio)
|
|||
tag,
|
||||
bio_endio,
|
||||
bio,
|
||||
bio->bi_rw & REQ_FUA,
|
||||
bio_data_dir(bio));
|
||||
} else
|
||||
bio_io_error(bio);
|
||||
|
|
@ -3187,6 +3182,10 @@ skip_create_disk:
|
|||
blk_queue_max_segments(dd->queue, MTIP_MAX_SG);
|
||||
blk_queue_physical_block_size(dd->queue, 4096);
|
||||
blk_queue_io_min(dd->queue, 4096);
|
||||
/*
|
||||
* write back cache is not supported in the device. FUA depends on
|
||||
* write back cache support, hence setting flush support to zero.
|
||||
*/
|
||||
blk_queue_flush(dd->queue, 0);
|
||||
|
||||
/* Set the capacity of the device in 512 byte sectors. */
|
||||
|
|
|
|||
|
|
@ -104,9 +104,6 @@
|
|||
/* BAR number used to access the HBA registers. */
|
||||
#define MTIP_ABAR 5
|
||||
|
||||
/* Forced Unit Access Bit */
|
||||
#define FUA_BIT 0x80
|
||||
|
||||
#ifdef DEBUG
|
||||
#define dbg_printk(format, arg...) \
|
||||
printk(pr_fmt(format), ##arg);
|
||||
|
|
@ -415,8 +412,6 @@ struct driver_data {
|
|||
|
||||
atomic_t resumeflag; /* Atomic variable to track suspend/resume */
|
||||
|
||||
atomic_t eh_active; /* Flag for error handling tracking */
|
||||
|
||||
struct task_struct *mtip_svc_handler; /* task_struct of svc thd */
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue