Lines Matching refs:sdev

202 static void scsi_unlock_floptical(struct scsi_device *sdev,  in scsi_unlock_floptical()  argument
207 sdev_printk(KERN_NOTICE, sdev, "unlocking floptical drive\n"); in scsi_unlock_floptical()
214 scsi_execute_cmd(sdev, scsi_cmd, REQ_OP_DRV_IN, result, 0x2a, in scsi_unlock_floptical()
218 static int scsi_realloc_sdev_budget_map(struct scsi_device *sdev, in scsi_realloc_sdev_budget_map() argument
222 bool need_alloc = !sdev->budget_map.map; in scsi_realloc_sdev_budget_map()
228 depth = min_t(unsigned int, depth, scsi_device_max_queue_depth(sdev)); in scsi_realloc_sdev_budget_map()
234 if (!need_alloc && new_shift != sdev->budget_map.shift) in scsi_realloc_sdev_budget_map()
245 memflags = blk_mq_freeze_queue(sdev->request_queue); in scsi_realloc_sdev_budget_map()
246 sb_backup = sdev->budget_map; in scsi_realloc_sdev_budget_map()
248 ret = sbitmap_init_node(&sdev->budget_map, in scsi_realloc_sdev_budget_map()
249 scsi_device_max_queue_depth(sdev), in scsi_realloc_sdev_budget_map()
251 sdev->request_queue->node, false, true); in scsi_realloc_sdev_budget_map()
253 sbitmap_resize(&sdev->budget_map, depth); in scsi_realloc_sdev_budget_map()
257 sdev->budget_map = sb_backup; in scsi_realloc_sdev_budget_map()
261 blk_mq_unfreeze_queue(sdev->request_queue, memflags); in scsi_realloc_sdev_budget_map()
284 struct scsi_device *sdev; in scsi_alloc_sdev() local
290 sdev = kzalloc(sizeof(*sdev) + shost->transportt->device_size, in scsi_alloc_sdev()
292 if (!sdev) in scsi_alloc_sdev()
295 sdev->vendor = scsi_null_device_strs; in scsi_alloc_sdev()
296 sdev->model = scsi_null_device_strs; in scsi_alloc_sdev()
297 sdev->rev = scsi_null_device_strs; in scsi_alloc_sdev()
298 sdev->host = shost; in scsi_alloc_sdev()
299 sdev->queue_ramp_up_period = SCSI_DEFAULT_RAMP_UP_PERIOD; in scsi_alloc_sdev()
300 sdev->id = starget->id; in scsi_alloc_sdev()
301 sdev->lun = lun; in scsi_alloc_sdev()
302 sdev->channel = starget->channel; in scsi_alloc_sdev()
303 mutex_init(&sdev->state_mutex); in scsi_alloc_sdev()
304 sdev->sdev_state = SDEV_CREATED; in scsi_alloc_sdev()
305 INIT_LIST_HEAD(&sdev->siblings); in scsi_alloc_sdev()
306 INIT_LIST_HEAD(&sdev->same_target_siblings); in scsi_alloc_sdev()
307 INIT_LIST_HEAD(&sdev->starved_entry); in scsi_alloc_sdev()
308 INIT_LIST_HEAD(&sdev->event_list); in scsi_alloc_sdev()
309 spin_lock_init(&sdev->list_lock); in scsi_alloc_sdev()
310 mutex_init(&sdev->inquiry_mutex); in scsi_alloc_sdev()
311 INIT_WORK(&sdev->event_work, scsi_evt_thread); in scsi_alloc_sdev()
312 INIT_WORK(&sdev->requeue_work, scsi_requeue_run_queue); in scsi_alloc_sdev()
314 sdev->sdev_gendev.parent = get_device(&starget->dev); in scsi_alloc_sdev()
315 sdev->sdev_target = starget; in scsi_alloc_sdev()
318 sdev->hostdata = hostdata; in scsi_alloc_sdev()
322 sdev->max_device_blocked = SCSI_DEFAULT_DEVICE_BLOCKED; in scsi_alloc_sdev()
327 sdev->type = -1; in scsi_alloc_sdev()
334 sdev->borken = 1; in scsi_alloc_sdev()
336 sdev->sg_reserved_size = INT_MAX; in scsi_alloc_sdev()
339 q = blk_mq_alloc_queue(&sdev->host->tag_set, &lim, sdev); in scsi_alloc_sdev()
344 kfree(sdev); in scsi_alloc_sdev()
347 kref_get(&sdev->host->tagset_refcnt); in scsi_alloc_sdev()
348 sdev->request_queue = q; in scsi_alloc_sdev()
350 depth = sdev->host->cmd_per_lun ?: 1; in scsi_alloc_sdev()
358 if (scsi_realloc_sdev_budget_map(sdev, depth)) { in scsi_alloc_sdev()
360 kfree(sdev); in scsi_alloc_sdev()
364 scsi_change_queue_depth(sdev, depth); in scsi_alloc_sdev()
366 scsi_sysfs_device_initialize(sdev); in scsi_alloc_sdev()
369 ret = shost->hostt->sdev_init(sdev); in scsi_alloc_sdev()
381 return sdev; in scsi_alloc_sdev()
384 __scsi_remove_device(sdev); in scsi_alloc_sdev()
646 static int scsi_probe_lun(struct scsi_device *sdev, unsigned char *inq_result, in scsi_probe_lun() argument
690 first_inquiry_len = sdev->inquiry_len ? sdev->inquiry_len : 36; in scsi_probe_lun()
695 SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev, in scsi_probe_lun()
709 result = scsi_execute_cmd(sdev, scsi_cmd, REQ_OP_DRV_IN, in scsi_probe_lun()
714 SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev, in scsi_probe_lun()
746 *bflags = scsi_get_device_flags(sdev, &inq_result[8], in scsi_probe_lun()
762 else if (sdev->inquiry_len && in scsi_probe_lun()
763 response_len > sdev->inquiry_len && in scsi_probe_lun()
765 next_inquiry_len = sdev->inquiry_len; in scsi_probe_lun()
778 sdev_printk(KERN_INFO, sdev, in scsi_probe_lun()
796 sdev->inquiry_len = min(try_inquiry_len, response_len); in scsi_probe_lun()
813 if (sdev->inquiry_len < 36) { in scsi_probe_lun()
814 if (!sdev->host->short_inquiry) { in scsi_probe_lun()
815 shost_printk(KERN_INFO, sdev->host, in scsi_probe_lun()
817 " using 36\n", sdev->inquiry_len); in scsi_probe_lun()
818 sdev->host->short_inquiry = 1; in scsi_probe_lun()
820 sdev->inquiry_len = 36; in scsi_probe_lun()
841 sdev->scsi_level = inq_result[2] & 0x0f; in scsi_probe_lun()
842 if (sdev->scsi_level >= 2 || in scsi_probe_lun()
843 (sdev->scsi_level == 1 && (inq_result[3] & 0x0f) == 1)) in scsi_probe_lun()
844 sdev->scsi_level++; in scsi_probe_lun()
845 sdev->sdev_target->scsi_level = sdev->scsi_level; in scsi_probe_lun()
851 sdev->lun_in_cdb = 0; in scsi_probe_lun()
852 if (sdev->scsi_level <= SCSI_2 && in scsi_probe_lun()
853 sdev->scsi_level != SCSI_UNKNOWN && in scsi_probe_lun()
854 !sdev->host->no_scsi2_lun_in_cdb) in scsi_probe_lun()
855 sdev->lun_in_cdb = 1; in scsi_probe_lun()
875 static int scsi_add_lun(struct scsi_device *sdev, unsigned char *inq_result, in scsi_add_lun() argument
878 const struct scsi_host_template *hostt = sdev->host->hostt; in scsi_add_lun()
902 sdev->inquiry = kmemdup(inq_result, in scsi_add_lun()
903 max_t(size_t, sdev->inquiry_len, 36), in scsi_add_lun()
905 if (sdev->inquiry == NULL) in scsi_add_lun()
908 sdev->vendor = (char *) (sdev->inquiry + 8); in scsi_add_lun()
909 sdev->model = (char *) (sdev->inquiry + 16); in scsi_add_lun()
910 sdev->rev = (char *) (sdev->inquiry + 32); in scsi_add_lun()
912 sdev->is_ata = strncmp(sdev->vendor, "ATA ", 8) == 0; in scsi_add_lun()
913 if (sdev->is_ata) { in scsi_add_lun()
920 sdev->allow_restart = 1; in scsi_add_lun()
924 sdev->type = TYPE_ROM; in scsi_add_lun()
925 sdev->removable = 1; in scsi_add_lun()
927 sdev->type = (inq_result[0] & 0x1f); in scsi_add_lun()
928 sdev->removable = (inq_result[1] & 0x80) >> 7; in scsi_add_lun()
935 if (scsi_is_wlun(sdev->lun) && sdev->type != TYPE_WLUN) { in scsi_add_lun()
936 sdev_printk(KERN_WARNING, sdev, in scsi_add_lun()
938 __func__, sdev->type, (unsigned int)sdev->lun); in scsi_add_lun()
939 sdev->type = TYPE_WLUN; in scsi_add_lun()
944 if (sdev->type == TYPE_RBC || sdev->type == TYPE_ROM) { in scsi_add_lun()
969 sdev->inq_periph_qual = (inq_result[0] >> 5) & 7; in scsi_add_lun()
970 sdev->lockable = sdev->removable; in scsi_add_lun()
971 sdev->soft_reset = (inq_result[7] & 1) && ((inq_result[3] & 7) == 2); in scsi_add_lun()
973 if (sdev->scsi_level >= SCSI_3 || in scsi_add_lun()
974 (sdev->inquiry_len > 56 && inq_result[56] & 0x04)) in scsi_add_lun()
975 sdev->ppr = 1; in scsi_add_lun()
977 sdev->wdtr = 1; in scsi_add_lun()
979 sdev->sdtr = 1; in scsi_add_lun()
981 sdev_printk(KERN_NOTICE, sdev, "%s %.8s %.16s %.4s PQ: %d " in scsi_add_lun()
982 "ANSI: %d%s\n", scsi_device_type(sdev->type), in scsi_add_lun()
983 sdev->vendor, sdev->model, sdev->rev, in scsi_add_lun()
984 sdev->inq_periph_qual, inq_result[2] & 0x07, in scsi_add_lun()
987 if ((sdev->scsi_level >= SCSI_2) && (inq_result[7] & 2) && in scsi_add_lun()
989 sdev->tagged_supported = 1; in scsi_add_lun()
990 sdev->simple_tags = 1; in scsi_add_lun()
999 sdev->borken = 0; in scsi_add_lun()
1002 sdev->no_uld_attach = 1; in scsi_add_lun()
1009 sdev->select_no_atn = 1; in scsi_add_lun()
1016 sdev->no_start_on_add = 1; in scsi_add_lun()
1019 scsi_target(sdev)->single_lun = 1; in scsi_add_lun()
1021 sdev->use_10_for_rw = 1; in scsi_add_lun()
1027 sdev->no_report_opcodes = 1; in scsi_add_lun()
1031 mutex_lock(&sdev->state_mutex); in scsi_add_lun()
1032 ret = scsi_device_set_state(sdev, SDEV_RUNNING); in scsi_add_lun()
1034 ret = scsi_device_set_state(sdev, SDEV_BLOCK); in scsi_add_lun()
1035 mutex_unlock(&sdev->state_mutex); in scsi_add_lun()
1038 sdev_printk(KERN_ERR, sdev, in scsi_add_lun()
1040 scsi_device_state_name(sdev->sdev_state)); in scsi_add_lun()
1045 sdev->lockable = 0; in scsi_add_lun()
1048 sdev->retry_hwerror = 1; in scsi_add_lun()
1051 sdev->no_dif = 1; in scsi_add_lun()
1054 sdev->unmap_limit_for_ws = 1; in scsi_add_lun()
1057 sdev->ignore_media_change = 1; in scsi_add_lun()
1059 sdev->eh_timeout = SCSI_DEFAULT_EH_TIMEOUT; in scsi_add_lun()
1062 sdev->try_vpd_pages = 1; in scsi_add_lun()
1064 sdev->skip_vpd_pages = 1; in scsi_add_lun()
1067 sdev->no_vpd_size = 1; in scsi_add_lun()
1069 transport_configure_device(&sdev->sdev_gendev); in scsi_add_lun()
1074 lim = queue_limits_start_update(sdev->request_queue); in scsi_add_lun()
1081 ret = hostt->sdev_configure(sdev, &lim); in scsi_add_lun()
1083 queue_limits_cancel_update(sdev->request_queue); in scsi_add_lun()
1089 sdev_printk(KERN_ERR, sdev, in scsi_add_lun()
1094 ret = queue_limits_commit_update(sdev->request_queue, &lim); in scsi_add_lun()
1096 sdev_printk(KERN_ERR, sdev, "failed to apply queue limits.\n"); in scsi_add_lun()
1107 scsi_realloc_sdev_budget_map(sdev, sdev->queue_depth); in scsi_add_lun()
1109 if (sdev->scsi_level >= SCSI_3) in scsi_add_lun()
1110 scsi_attach_vpd(sdev); in scsi_add_lun()
1112 scsi_cdl_check(sdev); in scsi_add_lun()
1114 sdev->max_queue_depth = sdev->queue_depth; in scsi_add_lun()
1115 WARN_ON_ONCE(sdev->max_queue_depth > sdev->budget_map.depth); in scsi_add_lun()
1116 sdev->sdev_bflags = *bflags; in scsi_add_lun()
1123 if (!async && scsi_sysfs_add_sdev(sdev) != 0) in scsi_add_lun()
1182 struct scsi_device *sdev; in scsi_probe_and_add_lun() local
1192 sdev = scsi_device_lookup_by_target(starget, lun); in scsi_probe_and_add_lun()
1193 if (sdev) { in scsi_probe_and_add_lun()
1194 if (rescan != SCSI_SCAN_INITIAL || !scsi_device_created(sdev)) { in scsi_probe_and_add_lun()
1195 SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev, in scsi_probe_and_add_lun()
1197 dev_name(&sdev->sdev_gendev))); in scsi_probe_and_add_lun()
1199 *sdevp = sdev; in scsi_probe_and_add_lun()
1201 scsi_device_put(sdev); in scsi_probe_and_add_lun()
1204 *bflagsp = scsi_get_device_flags(sdev, in scsi_probe_and_add_lun()
1205 sdev->vendor, in scsi_probe_and_add_lun()
1206 sdev->model); in scsi_probe_and_add_lun()
1209 scsi_device_put(sdev); in scsi_probe_and_add_lun()
1211 sdev = scsi_alloc_sdev(starget, lun, hostdata); in scsi_probe_and_add_lun()
1212 if (!sdev) in scsi_probe_and_add_lun()
1219 if (scsi_probe_lun(sdev, result, result_len, &bflags)) in scsi_probe_and_add_lun()
1238 SCSI_LOG_SCAN_BUS(2, sdev_printk(KERN_INFO, sdev, "scsi scan:" in scsi_probe_and_add_lun()
1246 sdev_printk(KERN_INFO, sdev, in scsi_probe_and_add_lun()
1281 SCSI_LOG_SCAN_BUS(3, sdev_printk(KERN_INFO, sdev, in scsi_probe_and_add_lun()
1288 res = scsi_add_lun(sdev, result, &bflags, shost->async_scan); in scsi_probe_and_add_lun()
1291 sdev->lockable = 0; in scsi_probe_and_add_lun()
1292 scsi_unlock_floptical(sdev, result); in scsi_probe_and_add_lun()
1301 if (scsi_device_get(sdev) == 0) { in scsi_probe_and_add_lun()
1302 *sdevp = sdev; in scsi_probe_and_add_lun()
1304 __scsi_remove_device(sdev); in scsi_probe_and_add_lun()
1309 __scsi_remove_device(sdev); in scsi_probe_and_add_lun()
1429 struct scsi_device *sdev; in scsi_report_lun_scan() local
1477 if (!(sdev = scsi_device_lookup_by_target(starget, 0))) { in scsi_report_lun_scan()
1478 sdev = scsi_alloc_sdev(starget, 0, NULL); in scsi_report_lun_scan()
1479 if (!sdev) in scsi_report_lun_scan()
1481 if (scsi_device_get(sdev)) { in scsi_report_lun_scan()
1482 __scsi_remove_device(sdev); in scsi_report_lun_scan()
1527 SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev, in scsi_report_lun_scan()
1530 result = scsi_execute_cmd(sdev, scsi_cmd, REQ_OP_DRV_IN, lun_data, in scsi_report_lun_scan()
1534 SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev, in scsi_report_lun_scan()
1559 SCSI_LOG_SCAN_BUS(3, sdev_printk (KERN_INFO, sdev, in scsi_report_lun_scan()
1569 if (lun > sdev->host->max_lun) { in scsi_report_lun_scan()
1570 sdev_printk(KERN_WARNING, sdev, in scsi_report_lun_scan()
1582 sdev_printk(KERN_ERR, sdev, in scsi_report_lun_scan()
1594 if (scsi_device_created(sdev)) in scsi_report_lun_scan()
1598 __scsi_remove_device(sdev); in scsi_report_lun_scan()
1599 scsi_device_put(sdev); in scsi_report_lun_scan()
1606 struct scsi_device *sdev = ERR_PTR(-ENODEV); in __scsi_add_device() local
1623 scsi_probe_and_add_lun(starget, lun, NULL, &sdev, in __scsi_add_device()
1636 return sdev; in __scsi_add_device()
1661 struct scsi_device *sdev = in scsi_add_device() local
1663 if (IS_ERR(sdev)) in scsi_add_device()
1664 return PTR_ERR(sdev); in scsi_add_device()
1666 scsi_device_put(sdev); in scsi_add_device()
1671 int scsi_resume_device(struct scsi_device *sdev) in scsi_resume_device() argument
1673 struct device *dev = &sdev->sdev_gendev; in scsi_resume_device()
1684 if (sdev->sdev_state != SDEV_RUNNING || in scsi_resume_device()
1685 blk_queue_pm_only(sdev->request_queue)) { in scsi_resume_device()
1705 int scsi_rescan_device(struct scsi_device *sdev) in scsi_rescan_device() argument
1707 struct device *dev = &sdev->sdev_gendev; in scsi_rescan_device()
1718 if (sdev->sdev_state != SDEV_RUNNING || in scsi_rescan_device()
1719 blk_queue_pm_only(sdev->request_queue)) { in scsi_rescan_device()
1724 scsi_attach_vpd(sdev); in scsi_rescan_device()
1725 scsi_cdl_check(sdev); in scsi_rescan_device()
1727 if (sdev->handler && sdev->handler->rescan) in scsi_rescan_device()
1728 sdev->handler->rescan(sdev); in scsi_rescan_device()
1906 struct scsi_device *sdev; in scsi_sysfs_add_devices() local
1907 shost_for_each_device(sdev, shost) { in scsi_sysfs_add_devices()
1909 if (sdev->sdev_state == SDEV_DEL) in scsi_sysfs_add_devices()
1912 if (sdev->is_visible) in scsi_sysfs_add_devices()
1915 scsi_sysfs_add_sdev(sdev) != 0) in scsi_sysfs_add_devices()
1916 __scsi_remove_device(sdev); in scsi_sysfs_add_devices()
2080 struct scsi_device *sdev; in scsi_forget_host() local
2085 list_for_each_entry(sdev, &shost->__devices, siblings) { in scsi_forget_host()
2086 if (sdev->sdev_state == SDEV_DEL) in scsi_forget_host()
2089 __scsi_remove_device(sdev); in scsi_forget_host()