Lines Matching refs:sdp

207 static Sg_fd *sg_add_sfp(Sg_device * sdp);
221 #define sg_printk(prefix, sdp, fmt, a...) \ argument
222 sdev_prefix_printk(prefix, (sdp)->device, \
223 (sdp)->disk->disk_name, fmt, ##a)
236 open_wait(Sg_device *sdp, int flags) in open_wait() argument
241 while (sdp->open_cnt > 0) { in open_wait()
242 mutex_unlock(&sdp->open_rel_lock); in open_wait()
243 retval = wait_event_interruptible(sdp->open_wait, in open_wait()
244 (atomic_read(&sdp->detaching) || in open_wait()
245 !sdp->open_cnt)); in open_wait()
246 mutex_lock(&sdp->open_rel_lock); in open_wait()
250 if (atomic_read(&sdp->detaching)) in open_wait()
254 while (sdp->exclude) { in open_wait()
255 mutex_unlock(&sdp->open_rel_lock); in open_wait()
256 retval = wait_event_interruptible(sdp->open_wait, in open_wait()
257 (atomic_read(&sdp->detaching) || in open_wait()
258 !sdp->exclude)); in open_wait()
259 mutex_lock(&sdp->open_rel_lock); in open_wait()
263 if (atomic_read(&sdp->detaching)) in open_wait()
278 Sg_device *sdp; in sg_open() local
285 sdp = sg_get_dev(dev); in sg_open()
286 if (IS_ERR(sdp)) in sg_open()
287 return PTR_ERR(sdp); in sg_open()
289 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_open()
294 retval = scsi_device_get(sdp->device); in sg_open()
298 retval = scsi_autopm_get_device(sdp->device); in sg_open()
306 scsi_block_when_processing_errors(sdp->device))) { in sg_open()
312 mutex_lock(&sdp->open_rel_lock); in sg_open()
315 if (sdp->open_cnt > 0) { in sg_open()
320 if (sdp->exclude) { in sg_open()
326 retval = open_wait(sdp, flags); in sg_open()
333 sdp->exclude = true; in sg_open()
335 if (sdp->open_cnt < 1) { /* no existing opens */ in sg_open()
336 sdp->sgdebug = 0; in sg_open()
337 q = sdp->device->request_queue; in sg_open()
338 sdp->sg_tablesize = queue_max_segments(q); in sg_open()
340 sfp = sg_add_sfp(sdp); in sg_open()
347 sdp->open_cnt++; in sg_open()
348 mutex_unlock(&sdp->open_rel_lock); in sg_open()
352 kref_put(&sdp->d_ref, sg_device_destroy); in sg_open()
357 sdp->exclude = false; /* undo if error */ in sg_open()
358 wake_up_interruptible(&sdp->open_wait); in sg_open()
361 mutex_unlock(&sdp->open_rel_lock); in sg_open()
363 scsi_autopm_put_device(sdp->device); in sg_open()
365 scsi_device_put(sdp->device); in sg_open()
374 Sg_device *sdp; in sg_release() local
377 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_release()
379 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, "sg_release\n")); in sg_release()
381 mutex_lock(&sdp->open_rel_lock); in sg_release()
382 scsi_autopm_put_device(sdp->device); in sg_release()
384 sdp->open_cnt--; in sg_release()
388 if (sdp->exclude) { in sg_release()
389 sdp->exclude = false; in sg_release()
390 wake_up_interruptible_all(&sdp->open_wait); in sg_release()
391 } else if (0 == sdp->open_cnt) { in sg_release()
392 wake_up_interruptible(&sdp->open_wait); in sg_release()
394 mutex_unlock(&sdp->open_rel_lock); in sg_release()
401 Sg_device *sdp; in sg_read() local
409 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_read()
411 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_read()
446 if (atomic_read(&sdp->detaching)) { in sg_read()
455 (atomic_read(&sdp->detaching) || in sg_read()
457 if (atomic_read(&sdp->detaching)) { in sg_read()
588 Sg_device *sdp; in sg_write() local
595 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_write()
597 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_write()
599 if (atomic_read(&sdp->detaching)) in sg_write()
602 scsi_block_when_processing_errors(sdp->device))) in sg_write()
619 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sdp, in sg_write()
633 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sdp, in sg_write()
768 Sg_device *sdp = sfp->parentdp; in sg_common_write() local
790 if (atomic_read(&sdp->detaching)) { in sg_common_write()
806 blk_execute_rq_nowait(sdp->device->request_queue, sdp->disk, in sg_common_write()
837 Sg_device *sdp; in sg_ioctl() local
842 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_ioctl()
845 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_ioctl()
851 if (atomic_read(&sdp->detaching)) in sg_ioctl()
853 if (!scsi_block_when_processing_errors(sdp->device)) in sg_ioctl()
862 (srp_done(sfp, srp) || atomic_read(&sdp->detaching))); in sg_ioctl()
863 if (atomic_read(&sdp->detaching)) in sg_ioctl()
902 if (atomic_read(&sdp->detaching)) in sg_ioctl()
904 sfp->low_dma = sdp->device->host->unchecked_isa_dma; in sg_ioctl()
915 if (atomic_read(&sdp->detaching)) in sg_ioctl()
917 __put_user((int) sdp->device->host->host_no, in sg_ioctl()
919 __put_user((int) sdp->device->channel, in sg_ioctl()
921 __put_user((int) sdp->device->id, &sg_idp->scsi_id); in sg_ioctl()
922 __put_user((int) sdp->device->lun, &sg_idp->lun); in sg_ioctl()
923 __put_user((int) sdp->device->type, &sg_idp->scsi_type); in sg_ioctl()
924 __put_user((short) sdp->device->host->cmd_per_lun, in sg_ioctl()
926 __put_user((short) sdp->device->queue_depth, in sg_ioctl()
962 return put_user(sdp->sg_tablesize, ip); in sg_ioctl()
970 max_sectors_bytes(sdp->device->request_queue)); in sg_ioctl()
980 max_sectors_bytes(sdp->device->request_queue)); in sg_ioctl()
1008 val = (sdp->device ? 1 : 0); in sg_ioctl()
1057 if (atomic_read(&sdp->detaching)) in sg_ioctl()
1059 return put_user(sdp->device->host->hostt->emulated, ip); in sg_ioctl()
1061 if (atomic_read(&sdp->detaching)) in sg_ioctl()
1072 return sg_scsi_ioctl(sdp->device->request_queue, NULL, filp->f_mode, p); in sg_ioctl()
1077 sdp->sgdebug = (char) val; in sg_ioctl()
1080 return put_user(max_sectors_bytes(sdp->device->request_queue), in sg_ioctl()
1083 return blk_trace_setup(sdp->device->request_queue, in sg_ioctl()
1084 sdp->disk->disk_name, in sg_ioctl()
1085 MKDEV(SCSI_GENERIC_MAJOR, sdp->index), in sg_ioctl()
1089 return blk_trace_startstop(sdp->device->request_queue, 1); in sg_ioctl()
1091 return blk_trace_startstop(sdp->device->request_queue, 0); in sg_ioctl()
1093 return blk_trace_remove(sdp->device->request_queue); in sg_ioctl()
1099 if (atomic_read(&sdp->detaching)) in sg_ioctl()
1108 result = scsi_ioctl_block_when_processing_errors(sdp->device, in sg_ioctl()
1112 return scsi_ioctl(sdp->device, cmd_in, p); in sg_ioctl()
1118 Sg_device *sdp; in sg_compat_ioctl() local
1122 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_compat_ioctl()
1125 sdev = sdp->device; in sg_compat_ioctl()
1142 Sg_device *sdp; in sg_poll() local
1151 sdp = sfp->parentdp; in sg_poll()
1152 if (!sdp) in sg_poll()
1164 if (atomic_read(&sdp->detaching)) in sg_poll()
1171 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_poll()
1179 Sg_device *sdp; in sg_fasync() local
1182 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp))) in sg_fasync()
1184 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_fasync()
1283 Sg_device *sdp; in sg_rq_end_io() local
1297 sdp = sfp->parentdp; in sg_rq_end_io()
1298 if (unlikely(atomic_read(&sdp->detaching))) in sg_rq_end_io()
1305 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sdp, in sg_rq_end_io()
1320 if ((sdp->sgdebug > 0) && in sg_rq_end_io()
1323 __scsi_print_sense(sdp->device, __func__, sense, in sg_rq_end_io()
1331 && sdp->device->removable) { in sg_rq_end_io()
1334 sdp->device->changed = 1; in sg_rq_end_io()
1397 Sg_device *sdp; in sg_alloc() local
1402 sdp = kzalloc(sizeof(Sg_device), GFP_KERNEL); in sg_alloc()
1403 if (!sdp) { in sg_alloc()
1412 error = idr_alloc(&sg_index_idr, sdp, 0, SG_MAX_DEVS, GFP_NOWAIT); in sg_alloc()
1432 sdp->disk = disk; in sg_alloc()
1433 sdp->device = scsidp; in sg_alloc()
1434 mutex_init(&sdp->open_rel_lock); in sg_alloc()
1435 INIT_LIST_HEAD(&sdp->sfds); in sg_alloc()
1436 init_waitqueue_head(&sdp->open_wait); in sg_alloc()
1437 atomic_set(&sdp->detaching, 0); in sg_alloc()
1438 rwlock_init(&sdp->sfd_lock); in sg_alloc()
1439 sdp->sg_tablesize = queue_max_segments(q); in sg_alloc()
1440 sdp->index = k; in sg_alloc()
1441 kref_init(&sdp->d_ref); in sg_alloc()
1449 kfree(sdp); in sg_alloc()
1452 return sdp; in sg_alloc()
1460 Sg_device *sdp = NULL; in sg_add_device() local
1481 sdp = sg_alloc(disk, scsidp); in sg_add_device()
1482 if (IS_ERR(sdp)) { in sg_add_device()
1484 error = PTR_ERR(sdp); in sg_add_device()
1488 error = cdev_add(cdev, MKDEV(SCSI_GENERIC_MAJOR, sdp->index), 1); in sg_add_device()
1492 sdp->cdev = cdev; in sg_add_device()
1498 sdp->index), in sg_add_device()
1499 sdp, "%s", disk->disk_name); in sg_add_device()
1509 "to sg%d\n", __func__, sdp->index); in sg_add_device()
1514 "type %d\n", sdp->index, scsidp->type); in sg_add_device()
1516 dev_set_drvdata(cl_dev, sdp); in sg_add_device()
1522 idr_remove(&sg_index_idr, sdp->index); in sg_add_device()
1524 kfree(sdp); in sg_add_device()
1536 struct sg_device *sdp = container_of(kref, struct sg_device, d_ref); in sg_device_destroy() local
1545 idr_remove(&sg_index_idr, sdp->index); in sg_device_destroy()
1549 sg_printk(KERN_INFO, sdp, "sg_device_destroy\n")); in sg_device_destroy()
1551 put_disk(sdp->disk); in sg_device_destroy()
1552 kfree(sdp); in sg_device_destroy()
1559 Sg_device *sdp = dev_get_drvdata(cl_dev); in sg_remove_device() local
1564 if (!sdp) in sg_remove_device()
1567 val = atomic_inc_return(&sdp->detaching); in sg_remove_device()
1571 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_remove_device()
1574 read_lock_irqsave(&sdp->sfd_lock, iflags); in sg_remove_device()
1575 list_for_each_entry(sfp, &sdp->sfds, sfd_siblings) { in sg_remove_device()
1579 wake_up_interruptible_all(&sdp->open_wait); in sg_remove_device()
1580 read_unlock_irqrestore(&sdp->sfd_lock, iflags); in sg_remove_device()
1583 device_destroy(sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, sdp->index)); in sg_remove_device()
1584 cdev_del(sdp->cdev); in sg_remove_device()
1585 sdp->cdev = NULL; in sg_remove_device()
1587 kref_put(&sdp->d_ref, sg_device_destroy); in sg_remove_device()
2119 sg_add_sfp(Sg_device * sdp) in sg_add_sfp() argument
2137 sdp->device->host->unchecked_isa_dma : 1; in sg_add_sfp()
2140 sfp->parentdp = sdp; in sg_add_sfp()
2141 write_lock_irqsave(&sdp->sfd_lock, iflags); in sg_add_sfp()
2142 if (atomic_read(&sdp->detaching)) { in sg_add_sfp()
2143 write_unlock_irqrestore(&sdp->sfd_lock, iflags); in sg_add_sfp()
2146 list_add_tail(&sfp->sfd_siblings, &sdp->sfds); in sg_add_sfp()
2147 write_unlock_irqrestore(&sdp->sfd_lock, iflags); in sg_add_sfp()
2148 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_add_sfp()
2154 max_sectors_bytes(sdp->device->request_queue)); in sg_add_sfp()
2156 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, in sg_add_sfp()
2161 kref_get(&sdp->d_ref); in sg_add_sfp()
2170 struct sg_device *sdp = sfp->parentdp; in sg_remove_sfp_usercontext() local
2177 SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp, in sg_remove_sfp_usercontext()
2184 SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp, in sg_remove_sfp_usercontext()
2188 scsi_device_put(sdp->device); in sg_remove_sfp_usercontext()
2189 kref_put(&sdp->d_ref, sg_device_destroy); in sg_remove_sfp_usercontext()
2197 struct sg_device *sdp = sfp->parentdp; in sg_remove_sfp() local
2200 write_lock_irqsave(&sdp->sfd_lock, iflags); in sg_remove_sfp()
2202 write_unlock_irqrestore(&sdp->sfd_lock, iflags); in sg_remove_sfp()
2256 struct sg_device *sdp; in sg_get_dev() local
2260 sdp = sg_lookup_dev(dev); in sg_get_dev()
2261 if (!sdp) in sg_get_dev()
2262 sdp = ERR_PTR(-ENXIO); in sg_get_dev()
2263 else if (atomic_read(&sdp->detaching)) { in sg_get_dev()
2267 sdp = ERR_PTR(-ENODEV); in sg_get_dev()
2269 kref_get(&sdp->d_ref); in sg_get_dev()
2272 return sdp; in sg_get_dev()
2541 Sg_device *sdp; in sg_proc_seq_show_dev() local
2546 sdp = it ? sg_lookup_dev(it->index) : NULL; in sg_proc_seq_show_dev()
2547 if ((NULL == sdp) || (NULL == sdp->device) || in sg_proc_seq_show_dev()
2548 (atomic_read(&sdp->detaching))) in sg_proc_seq_show_dev()
2551 scsidp = sdp->device; in sg_proc_seq_show_dev()
2572 Sg_device *sdp; in sg_proc_seq_show_devstrs() local
2577 sdp = it ? sg_lookup_dev(it->index) : NULL; in sg_proc_seq_show_devstrs()
2578 scsidp = sdp ? sdp->device : NULL; in sg_proc_seq_show_devstrs()
2579 if (sdp && scsidp && (!atomic_read(&sdp->detaching))) in sg_proc_seq_show_devstrs()
2589 static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp) in sg_proc_debug_helper() argument
2599 list_for_each_entry(fp, &sdp->sfds, sfd_siblings) { in sg_proc_debug_helper()
2662 Sg_device *sdp; in sg_proc_seq_show_debug() local
2670 sdp = it ? sg_lookup_dev(it->index) : NULL; in sg_proc_seq_show_debug()
2671 if (NULL == sdp) in sg_proc_seq_show_debug()
2673 read_lock(&sdp->sfd_lock); in sg_proc_seq_show_debug()
2674 if (!list_empty(&sdp->sfds)) { in sg_proc_seq_show_debug()
2675 seq_printf(s, " >>> device=%s ", sdp->disk->disk_name); in sg_proc_seq_show_debug()
2676 if (atomic_read(&sdp->detaching)) in sg_proc_seq_show_debug()
2678 else if (sdp->device) { in sg_proc_seq_show_debug()
2679 struct scsi_device *scsidp = sdp->device; in sg_proc_seq_show_debug()
2688 sdp->sg_tablesize, sdp->exclude, sdp->open_cnt); in sg_proc_seq_show_debug()
2689 sg_proc_debug_helper(s, sdp); in sg_proc_seq_show_debug()
2691 read_unlock(&sdp->sfd_lock); in sg_proc_seq_show_debug()