Lines Matching refs:sdev

160 	struct scsi_device *sdev = cmd->device;  in scsi_finish_command()  local
161 struct scsi_target *starget = scsi_target(sdev); in scsi_finish_command()
162 struct Scsi_Host *shost = sdev->host; in scsi_finish_command()
166 scsi_device_unbusy(sdev, cmd); in scsi_finish_command()
176 if (atomic_read(&sdev->device_blocked)) in scsi_finish_command()
177 atomic_set(&sdev->device_blocked, 0); in scsi_finish_command()
179 SCSI_LOG_MLCOMPLETE(4, sdev_printk(KERN_INFO, sdev, in scsi_finish_command()
205 int scsi_device_max_queue_depth(struct scsi_device *sdev) in scsi_device_max_queue_depth() argument
207 return min_t(int, sdev->host->can_queue, 4096); in scsi_device_max_queue_depth()
217 int scsi_change_queue_depth(struct scsi_device *sdev, int depth) in scsi_change_queue_depth() argument
219 depth = min_t(int, depth, scsi_device_max_queue_depth(sdev)); in scsi_change_queue_depth()
222 sdev->queue_depth = depth; in scsi_change_queue_depth()
226 if (sdev->request_queue) in scsi_change_queue_depth()
227 blk_set_queue_depth(sdev->request_queue, depth); in scsi_change_queue_depth()
229 sbitmap_resize(&sdev->budget_map, sdev->queue_depth); in scsi_change_queue_depth()
231 return sdev->queue_depth; in scsi_change_queue_depth()
254 int scsi_track_queue_full(struct scsi_device *sdev, int depth) in scsi_track_queue_full() argument
262 if ((jiffies >> 4) == (sdev->last_queue_full_time >> 4)) in scsi_track_queue_full()
265 sdev->last_queue_full_time = jiffies; in scsi_track_queue_full()
266 if (sdev->last_queue_full_depth != depth) { in scsi_track_queue_full()
267 sdev->last_queue_full_count = 1; in scsi_track_queue_full()
268 sdev->last_queue_full_depth = depth; in scsi_track_queue_full()
270 sdev->last_queue_full_count++; in scsi_track_queue_full()
273 if (sdev->last_queue_full_count <= 10) in scsi_track_queue_full()
276 return scsi_change_queue_depth(sdev, depth); in scsi_track_queue_full()
292 static int scsi_vpd_inquiry(struct scsi_device *sdev, unsigned char *buffer, in scsi_vpd_inquiry() argument
312 result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buffer, len, in scsi_vpd_inquiry()
336 static int scsi_get_vpd_size(struct scsi_device *sdev, u8 page) in scsi_get_vpd_size() argument
341 if (sdev->no_vpd_size) in scsi_get_vpd_size()
349 result = scsi_vpd_inquiry(sdev, vpd, 0, sizeof(vpd)); in scsi_get_vpd_size()
354 dev_warn_once(&sdev->sdev_gendev, in scsi_get_vpd_size()
370 result = scsi_vpd_inquiry(sdev, vpd, page, SCSI_VPD_HEADER_SIZE); in scsi_get_vpd_size()
375 dev_warn_once(&sdev->sdev_gendev, in scsi_get_vpd_size()
397 int scsi_get_vpd_page(struct scsi_device *sdev, u8 page, unsigned char *buf, in scsi_get_vpd_page() argument
402 if (!scsi_device_supports_vpd(sdev)) in scsi_get_vpd_page()
405 vpd_len = scsi_get_vpd_size(sdev, page); in scsi_get_vpd_page()
416 result = scsi_vpd_inquiry(sdev, buf, page, vpd_len); in scsi_get_vpd_page()
420 dev_warn_once(&sdev->sdev_gendev, in scsi_get_vpd_page()
435 static struct scsi_vpd *scsi_get_vpd_buf(struct scsi_device *sdev, u8 page) in scsi_get_vpd_buf() argument
440 vpd_len = scsi_get_vpd_size(sdev, page); in scsi_get_vpd_buf()
453 result = scsi_vpd_inquiry(sdev, vpd_buf->data, page, vpd_len); in scsi_get_vpd_buf()
459 dev_warn_once(&sdev->sdev_gendev, in scsi_get_vpd_buf()
472 static void scsi_update_vpd_page(struct scsi_device *sdev, u8 page, in scsi_update_vpd_page() argument
477 vpd_buf = scsi_get_vpd_buf(sdev, page); in scsi_update_vpd_page()
481 mutex_lock(&sdev->inquiry_mutex); in scsi_update_vpd_page()
483 lockdep_is_held(&sdev->inquiry_mutex)); in scsi_update_vpd_page()
484 mutex_unlock(&sdev->inquiry_mutex); in scsi_update_vpd_page()
499 void scsi_attach_vpd(struct scsi_device *sdev) in scsi_attach_vpd() argument
504 if (!scsi_device_supports_vpd(sdev)) in scsi_attach_vpd()
508 vpd_buf = scsi_get_vpd_buf(sdev, 0); in scsi_attach_vpd()
514 scsi_update_vpd_page(sdev, 0x0, &sdev->vpd_pg0); in scsi_attach_vpd()
516 scsi_update_vpd_page(sdev, 0x80, &sdev->vpd_pg80); in scsi_attach_vpd()
518 scsi_update_vpd_page(sdev, 0x83, &sdev->vpd_pg83); in scsi_attach_vpd()
520 scsi_update_vpd_page(sdev, 0x89, &sdev->vpd_pg89); in scsi_attach_vpd()
522 scsi_update_vpd_page(sdev, 0xb0, &sdev->vpd_pgb0); in scsi_attach_vpd()
524 scsi_update_vpd_page(sdev, 0xb1, &sdev->vpd_pgb1); in scsi_attach_vpd()
526 scsi_update_vpd_page(sdev, 0xb2, &sdev->vpd_pgb2); in scsi_attach_vpd()
528 scsi_update_vpd_page(sdev, 0xb7, &sdev->vpd_pgb7); in scsi_attach_vpd()
547 int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer, in scsi_report_opcode() argument
558 if (sdev->no_report_opcodes || sdev->scsi_level < SCSI_SPC_3) in scsi_report_opcode()
564 dev_warn_once(&sdev->sdev_gendev, in scsi_report_opcode()
584 result = scsi_execute_cmd(sdev, cmd, REQ_OP_DRV_IN, buffer, in scsi_report_opcode()
602 static bool scsi_cdl_check_cmd(struct scsi_device *sdev, u8 opcode, u16 sa, in scsi_cdl_check_cmd() argument
609 ret = scsi_report_opcode(sdev, buf, SCSI_CDL_CHECK_BUF_LEN, opcode, sa); in scsi_cdl_check_cmd()
638 void scsi_cdl_check(struct scsi_device *sdev) in scsi_cdl_check() argument
649 if (sdev->scsi_level < SCSI_SPC_5) { in scsi_cdl_check()
650 sdev->cdl_supported = 0; in scsi_cdl_check()
656 sdev->cdl_supported = 0; in scsi_cdl_check()
662 scsi_cdl_check_cmd(sdev, READ_16, 0, buf) || in scsi_cdl_check()
663 scsi_cdl_check_cmd(sdev, WRITE_16, 0, buf) || in scsi_cdl_check()
664 scsi_cdl_check_cmd(sdev, VARIABLE_LENGTH_CMD, READ_32, buf) || in scsi_cdl_check()
665 scsi_cdl_check_cmd(sdev, VARIABLE_LENGTH_CMD, WRITE_32, buf); in scsi_cdl_check()
672 sdev->use_16_for_rw = 1; in scsi_cdl_check()
673 sdev->use_10_for_rw = 0; in scsi_cdl_check()
675 sdev->cdl_supported = 1; in scsi_cdl_check()
682 scsi_cdl_enable(sdev, sdev->cdl_enable); in scsi_cdl_check()
684 sdev->cdl_supported = 0; in scsi_cdl_check()
696 int scsi_cdl_enable(struct scsi_device *sdev, bool enable) in scsi_cdl_enable() argument
705 if (!sdev->cdl_supported) in scsi_cdl_enable()
709 vpd = rcu_dereference(sdev->vpd_pg89); in scsi_cdl_enable()
721 ret = scsi_mode_sense(sdev, 0x08, 0x0a, 0xf2, buf, sizeof(buf), in scsi_cdl_enable()
737 ret = scsi_mode_select(sdev, 1, 0, buf_data, len, 5 * HZ, 3, in scsi_cdl_enable()
741 scsi_print_sense_hdr(sdev, in scsi_cdl_enable()
742 dev_name(&sdev->sdev_gendev), &sshdr); in scsi_cdl_enable()
747 sdev->cdl_enable = enable; in scsi_cdl_enable()
763 int scsi_device_get(struct scsi_device *sdev) in scsi_device_get() argument
765 if (sdev->sdev_state == SDEV_DEL || sdev->sdev_state == SDEV_CANCEL) in scsi_device_get()
767 if (!try_module_get(sdev->host->hostt->module)) in scsi_device_get()
769 if (!get_device(&sdev->sdev_gendev)) in scsi_device_get()
774 module_put(sdev->host->hostt->module); in scsi_device_get()
788 void scsi_device_put(struct scsi_device *sdev) in scsi_device_put() argument
790 struct module *mod = sdev->host->hostt->module; in scsi_device_put()
792 put_device(&sdev->sdev_gendev); in scsi_device_put()
836 struct scsi_device *sdev; in starget_for_each_device() local
838 shost_for_each_device(sdev, shost) { in starget_for_each_device()
839 if ((sdev->channel == starget->channel) && in starget_for_each_device()
840 (sdev->id == starget->id)) in starget_for_each_device()
841 fn(sdev, data); in starget_for_each_device()
864 struct scsi_device *sdev; in __starget_for_each_device() local
866 __shost_for_each_device(sdev, shost) { in __starget_for_each_device()
867 if ((sdev->channel == starget->channel) && in __starget_for_each_device()
868 (sdev->id == starget->id)) in __starget_for_each_device()
869 fn(sdev, data); in __starget_for_each_device()
892 struct scsi_device *sdev; in __scsi_device_lookup_by_target() local
894 list_for_each_entry(sdev, &starget->devices, same_target_siblings) { in __scsi_device_lookup_by_target()
895 if (sdev->sdev_state == SDEV_DEL) in __scsi_device_lookup_by_target()
897 if (sdev->lun ==lun) in __scsi_device_lookup_by_target()
898 return sdev; in __scsi_device_lookup_by_target()
917 struct scsi_device *sdev; in scsi_device_lookup_by_target() local
922 sdev = __scsi_device_lookup_by_target(starget, lun); in scsi_device_lookup_by_target()
923 if (sdev && scsi_device_get(sdev)) in scsi_device_lookup_by_target()
924 sdev = NULL; in scsi_device_lookup_by_target()
927 return sdev; in scsi_device_lookup_by_target()
950 struct scsi_device *sdev; in __scsi_device_lookup() local
952 list_for_each_entry(sdev, &shost->__devices, siblings) { in __scsi_device_lookup()
953 if (sdev->sdev_state == SDEV_DEL) in __scsi_device_lookup()
955 if (sdev->channel == channel && sdev->id == id && in __scsi_device_lookup()
956 sdev->lun ==lun) in __scsi_device_lookup()
957 return sdev; in __scsi_device_lookup()
978 struct scsi_device *sdev; in scsi_device_lookup() local
982 sdev = __scsi_device_lookup(shost, channel, id, lun); in scsi_device_lookup()
983 if (sdev && scsi_device_get(sdev)) in scsi_device_lookup()
984 sdev = NULL; in scsi_device_lookup()
987 return sdev; in scsi_device_lookup()