mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
for-4.19/block-20180812
-----BEGIN PGP SIGNATURE-----
iQJEBAABCAAuFiEEwPw5LcreJtl1+l5K99NY+ylx4KYFAltwvasQHGF4Ym9lQGtl
cm5lbC5kawAKCRD301j7KXHgpv65EACTq5gSLnJBI6ZPr1RAHruVDnjfzO2Veitl
tUtjm0XfWmnEiwQ3dYvnyhy99xbyaG3900d9BClCTlH6xaUdSiQkDpcKG/R2F36J
5mZitYukQcpFAQJWF8YKsTTE7JPl4VglCIDqYiC4+C3rOSVi8lrKn2qp4J4MMCFn
thRg3jCcq7c5s9Eigsop1pXWQSasubkXfk55Krcp4oybKYpYRKXXf74Mj14QAbwJ
QHN3VisyAUWoBRg7UQZo1Npe2oPk6bbnJypnjf8M0M2EnlvddEkIlHob91sodka8
6p4APOEu5cbyXOBCAQsw/koff14mb8aEadqeQA68WvXfIdX9ZjfxCX0OoC3sBEXk
yqJhZ0C980AM13zIBD8ejv4uasGcPca8W+47mE5P8sRiI++5kBsFWDZPCtUBna0X
2Kh24NsmEya9XRR5vsB84dsIPQ3tLMkxg/IgQRVDaSnfJz0c/+zm54xDyKRaFT4l
5iERk2WSkm9+8jNfVmWG0edrv6nRAXjpGwFfOCPh6/LCSCi4xQRULYN7sVzsX8ZK
FRjt24HftBI8mJbh4BtweJvg+ppVe1gAk3IO3HvxAQhv29Hz+uvFYe9kL+3N8LJA
Qosr9n9O4+wKYizJcDnw+5iPqCHfAwOm9th4pyedR+R7SmNcP3yNC8AbbheNBiF5
Zolos5H+JA==
=b9ib
-----END PGP SIGNATURE-----
Merge tag 'for-4.19/block-20180812' of git://git.kernel.dk/linux-block
Pull block updates from Jens Axboe:
"First pull request for this merge window, there will also be a
followup request with some stragglers.
This pull request contains:
- Fix for a thundering heard issue in the wbt block code (Anchal
Agarwal)
- A few NVMe pull requests:
* Improved tracepoints (Keith)
* Larger inline data support for RDMA (Steve Wise)
* RDMA setup/teardown fixes (Sagi)
* Effects log suppor for NVMe target (Chaitanya Kulkarni)
* Buffered IO suppor for NVMe target (Chaitanya Kulkarni)
* TP4004 (ANA) support (Christoph)
* Various NVMe fixes
- Block io-latency controller support. Much needed support for
properly containing block devices. (Josef)
- Series improving how we handle sense information on the stack
(Kees)
- Lightnvm fixes and updates/improvements (Mathias/Javier et al)
- Zoned device support for null_blk (Matias)
- AIX partition fixes (Mauricio Faria de Oliveira)
- DIF checksum code made generic (Max Gurtovoy)
- Add support for discard in iostats (Michael Callahan / Tejun)
- Set of updates for BFQ (Paolo)
- Removal of async write support for bsg (Christoph)
- Bio page dirtying and clone fixups (Christoph)
- Set of bcache fix/changes (via Coly)
- Series improving blk-mq queue setup/teardown speed (Ming)
- Series improving merging performance on blk-mq (Ming)
- Lots of other fixes and cleanups from a slew of folks"
* tag 'for-4.19/block-20180812' of git://git.kernel.dk/linux-block: (190 commits)
blkcg: Make blkg_root_lookup() work for queues in bypass mode
bcache: fix error setting writeback_rate through sysfs interface
null_blk: add lock drop/acquire annotation
Blk-throttle: reduce tail io latency when iops limit is enforced
block: paride: pd: mark expected switch fall-throughs
block: Ensure that a request queue is dissociated from the cgroup controller
block: Introduce blk_exit_queue()
blkcg: Introduce blkg_root_lookup()
block: Remove two superfluous #include directives
blk-mq: count the hctx as active before allocating tag
block: bvec_nr_vecs() returns value for wrong slab
bcache: trivial - remove tailing backslash in macro BTREE_FLAG
bcache: make the pr_err statement used for ENOENT only in sysfs_attatch section
bcache: set max writeback rate when I/O request is idle
bcache: add code comments for bset.c
bcache: fix mistaken comments in request.c
bcache: fix mistaken code comments in bcache.h
bcache: add a comment in super.c
bcache: avoid unncessary cache prefetch bch_btree_node_get()
bcache: display rate debug parameters to 0 when writeback is not running
...
This commit is contained in:
commit
73ba2fb33c
172 changed files with 6029 additions and 2659 deletions
|
|
@ -21,6 +21,7 @@ CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ -DGDTH_STATISTICS
|
|||
obj-$(CONFIG_PCMCIA) += pcmcia/
|
||||
|
||||
obj-$(CONFIG_SCSI) += scsi_mod.o
|
||||
obj-$(CONFIG_BLK_SCSI_REQUEST) += scsi_common.o
|
||||
|
||||
obj-$(CONFIG_RAID_ATTRS) += raid_class.o
|
||||
|
||||
|
|
@ -156,7 +157,6 @@ obj-$(CONFIG_SCSI_HISI_SAS) += hisi_sas/
|
|||
obj-$(CONFIG_SCSI_DEBUG) += scsi_debug.o
|
||||
scsi_mod-y += scsi.o hosts.o scsi_ioctl.o \
|
||||
scsicam.o scsi_error.o scsi_lib.o
|
||||
scsi_mod-y += scsi_common.o
|
||||
scsi_mod-$(CONFIG_SCSI_CONSTANTS) += constants.o
|
||||
scsi_mod-$(CONFIG_SCSI_DMA) += scsi_lib_dma.o
|
||||
scsi_mod-y += scsi_scan.o scsi_sysfs.o scsi_devinfo.o
|
||||
|
|
|
|||
|
|
@ -339,7 +339,6 @@ static int read_cap16(struct scsi_device *sdev, struct llun_info *lli)
|
|||
struct scsi_sense_hdr sshdr;
|
||||
u8 *cmd_buf = NULL;
|
||||
u8 *scsi_cmd = NULL;
|
||||
u8 *sense_buf = NULL;
|
||||
int rc = 0;
|
||||
int result = 0;
|
||||
int retry_cnt = 0;
|
||||
|
|
@ -348,8 +347,7 @@ static int read_cap16(struct scsi_device *sdev, struct llun_info *lli)
|
|||
retry:
|
||||
cmd_buf = kzalloc(CMD_BUFSIZE, GFP_KERNEL);
|
||||
scsi_cmd = kzalloc(MAX_COMMAND_SIZE, GFP_KERNEL);
|
||||
sense_buf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL);
|
||||
if (unlikely(!cmd_buf || !scsi_cmd || !sense_buf)) {
|
||||
if (unlikely(!cmd_buf || !scsi_cmd)) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -364,7 +362,7 @@ retry:
|
|||
/* Drop the ioctl read semahpore across lengthy call */
|
||||
up_read(&cfg->ioctl_rwsem);
|
||||
result = scsi_execute(sdev, scsi_cmd, DMA_FROM_DEVICE, cmd_buf,
|
||||
CMD_BUFSIZE, sense_buf, &sshdr, to, CMD_RETRIES,
|
||||
CMD_BUFSIZE, NULL, &sshdr, to, CMD_RETRIES,
|
||||
0, 0, NULL);
|
||||
down_read(&cfg->ioctl_rwsem);
|
||||
rc = check_state(cfg);
|
||||
|
|
@ -395,7 +393,6 @@ retry:
|
|||
if (retry_cnt++ < 1) {
|
||||
kfree(cmd_buf);
|
||||
kfree(scsi_cmd);
|
||||
kfree(sense_buf);
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
|
|
@ -426,7 +423,6 @@ retry:
|
|||
out:
|
||||
kfree(cmd_buf);
|
||||
kfree(scsi_cmd);
|
||||
kfree(sense_buf);
|
||||
|
||||
dev_dbg(dev, "%s: maxlba=%lld blklen=%d rc=%d\n",
|
||||
__func__, gli->max_lba, gli->blk_len, rc);
|
||||
|
|
|
|||
|
|
@ -426,7 +426,6 @@ static int write_same16(struct scsi_device *sdev,
|
|||
{
|
||||
u8 *cmd_buf = NULL;
|
||||
u8 *scsi_cmd = NULL;
|
||||
u8 *sense_buf = NULL;
|
||||
int rc = 0;
|
||||
int result = 0;
|
||||
u64 offset = lba;
|
||||
|
|
@ -440,8 +439,7 @@ static int write_same16(struct scsi_device *sdev,
|
|||
|
||||
cmd_buf = kzalloc(CMD_BUFSIZE, GFP_KERNEL);
|
||||
scsi_cmd = kzalloc(MAX_COMMAND_SIZE, GFP_KERNEL);
|
||||
sense_buf = kzalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL);
|
||||
if (unlikely(!cmd_buf || !scsi_cmd || !sense_buf)) {
|
||||
if (unlikely(!cmd_buf || !scsi_cmd)) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
|
@ -457,7 +455,7 @@ static int write_same16(struct scsi_device *sdev,
|
|||
/* Drop the ioctl read semahpore across lengthy call */
|
||||
up_read(&cfg->ioctl_rwsem);
|
||||
result = scsi_execute(sdev, scsi_cmd, DMA_TO_DEVICE, cmd_buf,
|
||||
CMD_BUFSIZE, sense_buf, NULL, to,
|
||||
CMD_BUFSIZE, NULL, NULL, to,
|
||||
CMD_RETRIES, 0, 0, NULL);
|
||||
down_read(&cfg->ioctl_rwsem);
|
||||
rc = check_state(cfg);
|
||||
|
|
@ -482,7 +480,6 @@ static int write_same16(struct scsi_device *sdev,
|
|||
out:
|
||||
kfree(cmd_buf);
|
||||
kfree(scsi_cmd);
|
||||
kfree(sense_buf);
|
||||
dev_dbg(dev, "%s: returning rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4568,7 +4568,7 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
|
|||
MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG |
|
||||
MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
|
||||
mpi_request->CDB.EEDP32.PrimaryReferenceTag =
|
||||
cpu_to_be32(scsi_prot_ref_tag(scmd));
|
||||
cpu_to_be32(t10_pi_ref_tag(scmd->request));
|
||||
break;
|
||||
|
||||
case SCSI_PROT_DIF_TYPE3:
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ void scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
|
|||
|
||||
|
||||
/**
|
||||
* scsi_execute - insert request and wait for the result
|
||||
* __scsi_execute - insert request and wait for the result
|
||||
* @sdev: scsi device
|
||||
* @cmd: scsi command
|
||||
* @data_direction: data direction
|
||||
|
|
@ -255,7 +255,7 @@ void scsi_queue_insert(struct scsi_cmnd *cmd, int reason)
|
|||
* Returns the scsi_cmnd result field if a command was executed, or a negative
|
||||
* Linux error code if we didn't get that far.
|
||||
*/
|
||||
int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
int __scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
||||
int data_direction, void *buffer, unsigned bufflen,
|
||||
unsigned char *sense, struct scsi_sense_hdr *sshdr,
|
||||
int timeout, int retries, u64 flags, req_flags_t rq_flags,
|
||||
|
|
@ -309,7 +309,7 @@ int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
|
|||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(scsi_execute);
|
||||
EXPORT_SYMBOL(__scsi_execute);
|
||||
|
||||
/*
|
||||
* Function: scsi_init_cmd_errh()
|
||||
|
|
|
|||
|
|
@ -1119,7 +1119,7 @@ static int sd_setup_read_write_cmnd(struct scsi_cmnd *SCpnt)
|
|||
SCpnt->cmnd[0] = WRITE_6;
|
||||
|
||||
if (blk_integrity_rq(rq))
|
||||
sd_dif_prepare(SCpnt);
|
||||
t10_pi_prepare(SCpnt->request, sdkp->protection_type);
|
||||
|
||||
} else if (rq_data_dir(rq) == READ) {
|
||||
SCpnt->cmnd[0] = READ_6;
|
||||
|
|
@ -2047,8 +2047,10 @@ static int sd_done(struct scsi_cmnd *SCpnt)
|
|||
"sd_done: completed %d of %d bytes\n",
|
||||
good_bytes, scsi_bufflen(SCpnt)));
|
||||
|
||||
if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
|
||||
sd_dif_complete(SCpnt, good_bytes);
|
||||
if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt) &&
|
||||
good_bytes)
|
||||
t10_pi_complete(SCpnt->request, sdkp->protection_type,
|
||||
good_bytes / scsi_prot_interval(SCpnt));
|
||||
|
||||
return good_bytes;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -254,21 +254,12 @@ static inline unsigned int sd_prot_flag_mask(unsigned int prot_op)
|
|||
#ifdef CONFIG_BLK_DEV_INTEGRITY
|
||||
|
||||
extern void sd_dif_config_host(struct scsi_disk *);
|
||||
extern void sd_dif_prepare(struct scsi_cmnd *scmd);
|
||||
extern void sd_dif_complete(struct scsi_cmnd *, unsigned int);
|
||||
|
||||
#else /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
|
||||
static inline void sd_dif_config_host(struct scsi_disk *disk)
|
||||
{
|
||||
}
|
||||
static inline int sd_dif_prepare(struct scsi_cmnd *scmd)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline void sd_dif_complete(struct scsi_cmnd *cmd, unsigned int a)
|
||||
{
|
||||
}
|
||||
|
||||
#endif /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
|
||||
|
|
|
|||
|
|
@ -95,116 +95,3 @@ out:
|
|||
blk_integrity_register(disk, &bi);
|
||||
}
|
||||
|
||||
/*
|
||||
* The virtual start sector is the one that was originally submitted
|
||||
* by the block layer. Due to partitioning, MD/DM cloning, etc. the
|
||||
* actual physical start sector is likely to be different. Remap
|
||||
* protection information to match the physical LBA.
|
||||
*
|
||||
* From a protocol perspective there's a slight difference between
|
||||
* Type 1 and 2. The latter uses 32-byte CDBs exclusively, and the
|
||||
* reference tag is seeded in the CDB. This gives us the potential to
|
||||
* avoid virt->phys remapping during write. However, at read time we
|
||||
* don't know whether the virt sector is the same as when we wrote it
|
||||
* (we could be reading from real disk as opposed to MD/DM device. So
|
||||
* we always remap Type 2 making it identical to Type 1.
|
||||
*
|
||||
* Type 3 does not have a reference tag so no remapping is required.
|
||||
*/
|
||||
void sd_dif_prepare(struct scsi_cmnd *scmd)
|
||||
{
|
||||
const int tuple_sz = sizeof(struct t10_pi_tuple);
|
||||
struct bio *bio;
|
||||
struct scsi_disk *sdkp;
|
||||
struct t10_pi_tuple *pi;
|
||||
u32 phys, virt;
|
||||
|
||||
sdkp = scsi_disk(scmd->request->rq_disk);
|
||||
|
||||
if (sdkp->protection_type == T10_PI_TYPE3_PROTECTION)
|
||||
return;
|
||||
|
||||
phys = scsi_prot_ref_tag(scmd);
|
||||
|
||||
__rq_for_each_bio(bio, scmd->request) {
|
||||
struct bio_integrity_payload *bip = bio_integrity(bio);
|
||||
struct bio_vec iv;
|
||||
struct bvec_iter iter;
|
||||
unsigned int j;
|
||||
|
||||
/* Already remapped? */
|
||||
if (bip->bip_flags & BIP_MAPPED_INTEGRITY)
|
||||
break;
|
||||
|
||||
virt = bip_get_seed(bip) & 0xffffffff;
|
||||
|
||||
bip_for_each_vec(iv, bip, iter) {
|
||||
pi = kmap_atomic(iv.bv_page) + iv.bv_offset;
|
||||
|
||||
for (j = 0; j < iv.bv_len; j += tuple_sz, pi++) {
|
||||
|
||||
if (be32_to_cpu(pi->ref_tag) == virt)
|
||||
pi->ref_tag = cpu_to_be32(phys);
|
||||
|
||||
virt++;
|
||||
phys++;
|
||||
}
|
||||
|
||||
kunmap_atomic(pi);
|
||||
}
|
||||
|
||||
bip->bip_flags |= BIP_MAPPED_INTEGRITY;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Remap physical sector values in the reference tag to the virtual
|
||||
* values expected by the block layer.
|
||||
*/
|
||||
void sd_dif_complete(struct scsi_cmnd *scmd, unsigned int good_bytes)
|
||||
{
|
||||
const int tuple_sz = sizeof(struct t10_pi_tuple);
|
||||
struct scsi_disk *sdkp;
|
||||
struct bio *bio;
|
||||
struct t10_pi_tuple *pi;
|
||||
unsigned int j, intervals;
|
||||
u32 phys, virt;
|
||||
|
||||
sdkp = scsi_disk(scmd->request->rq_disk);
|
||||
|
||||
if (sdkp->protection_type == T10_PI_TYPE3_PROTECTION || good_bytes == 0)
|
||||
return;
|
||||
|
||||
intervals = good_bytes / scsi_prot_interval(scmd);
|
||||
phys = scsi_prot_ref_tag(scmd);
|
||||
|
||||
__rq_for_each_bio(bio, scmd->request) {
|
||||
struct bio_integrity_payload *bip = bio_integrity(bio);
|
||||
struct bio_vec iv;
|
||||
struct bvec_iter iter;
|
||||
|
||||
virt = bip_get_seed(bip) & 0xffffffff;
|
||||
|
||||
bip_for_each_vec(iv, bip, iter) {
|
||||
pi = kmap_atomic(iv.bv_page) + iv.bv_offset;
|
||||
|
||||
for (j = 0; j < iv.bv_len; j += tuple_sz, pi++) {
|
||||
|
||||
if (intervals == 0) {
|
||||
kunmap_atomic(pi);
|
||||
return;
|
||||
}
|
||||
|
||||
if (be32_to_cpu(pi->ref_tag) == phys)
|
||||
pi->ref_tag = cpu_to_be32(virt);
|
||||
|
||||
virt++;
|
||||
phys++;
|
||||
intervals--;
|
||||
}
|
||||
|
||||
kunmap_atomic(pi);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -186,14 +186,13 @@ static int sr_play_trkind(struct cdrom_device_info *cdi,
|
|||
int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
|
||||
{
|
||||
struct scsi_device *SDev;
|
||||
struct scsi_sense_hdr sshdr;
|
||||
struct scsi_sense_hdr local_sshdr, *sshdr = &local_sshdr;
|
||||
int result, err = 0, retries = 0;
|
||||
unsigned char sense_buffer[SCSI_SENSE_BUFFERSIZE], *senseptr = NULL;
|
||||
|
||||
SDev = cd->device;
|
||||
|
||||
if (cgc->sense)
|
||||
senseptr = sense_buffer;
|
||||
if (cgc->sshdr)
|
||||
sshdr = cgc->sshdr;
|
||||
|
||||
retry:
|
||||
if (!scsi_block_when_processing_errors(SDev)) {
|
||||
|
|
@ -202,15 +201,12 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
|
|||
}
|
||||
|
||||
result = scsi_execute(SDev, cgc->cmd, cgc->data_direction,
|
||||
cgc->buffer, cgc->buflen, senseptr, &sshdr,
|
||||
cgc->buffer, cgc->buflen, NULL, sshdr,
|
||||
cgc->timeout, IOCTL_RETRIES, 0, 0, NULL);
|
||||
|
||||
if (cgc->sense)
|
||||
memcpy(cgc->sense, sense_buffer, sizeof(*cgc->sense));
|
||||
|
||||
/* Minimal error checking. Ignore cases we know about, and report the rest. */
|
||||
if (driver_byte(result) != 0) {
|
||||
switch (sshdr.sense_key) {
|
||||
switch (sshdr->sense_key) {
|
||||
case UNIT_ATTENTION:
|
||||
SDev->changed = 1;
|
||||
if (!cgc->quiet)
|
||||
|
|
@ -221,8 +217,8 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
|
|||
err = -ENOMEDIUM;
|
||||
break;
|
||||
case NOT_READY: /* This happens if there is no disc in drive */
|
||||
if (sshdr.asc == 0x04 &&
|
||||
sshdr.ascq == 0x01) {
|
||||
if (sshdr->asc == 0x04 &&
|
||||
sshdr->ascq == 0x01) {
|
||||
/* sense: Logical unit is in process of becoming ready */
|
||||
if (!cgc->quiet)
|
||||
sr_printk(KERN_INFO, cd,
|
||||
|
|
@ -245,8 +241,8 @@ int sr_do_ioctl(Scsi_CD *cd, struct packet_command *cgc)
|
|||
break;
|
||||
case ILLEGAL_REQUEST:
|
||||
err = -EIO;
|
||||
if (sshdr.asc == 0x20 &&
|
||||
sshdr.ascq == 0x00)
|
||||
if (sshdr->asc == 0x20 &&
|
||||
sshdr->ascq == 0x00)
|
||||
/* sense: Invalid command operation code */
|
||||
err = -EDRIVE_CANT_DO_THIS;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -513,12 +513,12 @@ static void virtio_scsi_init_hdr_pi(struct virtio_device *vdev,
|
|||
|
||||
if (sc->sc_data_direction == DMA_TO_DEVICE)
|
||||
cmd_pi->pi_bytesout = cpu_to_virtio32(vdev,
|
||||
blk_rq_sectors(rq) *
|
||||
bi->tuple_size);
|
||||
bio_integrity_bytes(bi,
|
||||
blk_rq_sectors(rq)));
|
||||
else if (sc->sc_data_direction == DMA_FROM_DEVICE)
|
||||
cmd_pi->pi_bytesin = cpu_to_virtio32(vdev,
|
||||
blk_rq_sectors(rq) *
|
||||
bi->tuple_size);
|
||||
bio_integrity_bytes(bi,
|
||||
blk_rq_sectors(rq)));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue