Lines Matching refs:sdp

196 static Sg_fd *sg_add_sfp(Sg_device * sdp);
209 #define sg_printk(prefix, sdp, fmt, a...) \
210 sdev_prefix_printk(prefix, (sdp)->device, (sdp)->name, fmt, ##a)
246 open_wait(Sg_device *sdp, int flags)
251 while (sdp->open_cnt > 0) {
252 mutex_unlock(&sdp->open_rel_lock);
253 retval = wait_event_interruptible(sdp->open_wait,
254 (atomic_read(&sdp->detaching) ||
255 !sdp->open_cnt));
256 mutex_lock(&sdp->open_rel_lock);
260 if (atomic_read(&sdp->detaching))
264 while (sdp->exclude) {
265 mutex_unlock(&sdp->open_rel_lock);
266 retval = wait_event_interruptible(sdp->open_wait,
267 (atomic_read(&sdp->detaching) ||
268 !sdp->exclude));
269 mutex_lock(&sdp->open_rel_lock);
273 if (atomic_read(&sdp->detaching))
289 Sg_device *sdp;
296 sdp = sg_get_dev(dev);
297 if (IS_ERR(sdp))
298 return PTR_ERR(sdp);
300 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
305 device = sdp->device;
324 mutex_lock(&sdp->open_rel_lock);
327 if (sdp->open_cnt > 0) {
332 if (sdp->exclude) {
338 retval = open_wait(sdp, flags);
345 sdp->exclude = true;
347 if (sdp->open_cnt < 1) { /* no existing opens */
348 sdp->sgdebug = 0;
350 sdp->sg_tablesize = queue_max_segments(q);
352 sfp = sg_add_sfp(sdp);
359 sdp->open_cnt++;
360 mutex_unlock(&sdp->open_rel_lock);
364 kref_put(&sdp->d_ref, sg_device_destroy);
369 sdp->exclude = false; /* undo if error */
370 wake_up_interruptible(&sdp->open_wait);
373 mutex_unlock(&sdp->open_rel_lock);
377 kref_put(&sdp->d_ref, sg_device_destroy);
387 Sg_device *sdp;
390 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
392 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp, "sg_release\n"));
394 mutex_lock(&sdp->open_rel_lock);
395 scsi_autopm_put_device(sdp->device);
397 sdp->open_cnt--;
401 if (sdp->exclude) {
402 sdp->exclude = false;
403 wake_up_interruptible_all(&sdp->open_wait);
404 } else if (0 == sdp->open_cnt) {
405 wake_up_interruptible(&sdp->open_wait);
407 mutex_unlock(&sdp->open_rel_lock);
446 Sg_device *sdp;
463 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
465 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
479 (!busy && atomic_read(&sdp->detaching))));
607 Sg_device *sdp;
619 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
621 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
623 if (atomic_read(&sdp->detaching))
626 scsi_block_when_processing_errors(sdp->device)))
645 SCSI_LOG_TIMEOUT(1, sg_printk(KERN_INFO, sdp,
659 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sdp,
786 Sg_device *sdp = sfp->parentdp;
814 if (atomic_read(&sdp->detaching)) {
920 sg_ioctl_common(struct file *filp, Sg_device *sdp, Sg_fd *sfp,
928 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
934 if (atomic_read(&sdp->detaching))
936 if (!scsi_block_when_processing_errors(sdp->device))
983 if (atomic_read(&sdp->detaching))
986 v.host_no = sdp->device->host->host_no;
987 v.channel = sdp->device->channel;
988 v.scsi_id = sdp->device->id;
989 v.lun = sdp->device->lun;
990 v.scsi_type = sdp->device->type;
991 v.h_cmd_per_lun = sdp->device->host->cmd_per_lun;
992 v.d_queue_depth = sdp->device->queue_depth;
1024 return put_user(sdp->sg_tablesize, ip);
1032 max_sectors_bytes(sdp->device->request_queue));
1048 max_sectors_bytes(sdp->device->request_queue));
1078 val = (sdp->device ? 1 : 0);
1103 if (atomic_read(&sdp->detaching))
1105 return put_user(sdp->device->host->hostt->emulated, ip);
1107 if (atomic_read(&sdp->detaching))
1109 return scsi_ioctl(sdp->device, filp->f_mode & FMODE_WRITE,
1115 sdp->sgdebug = (char) val;
1118 return put_user(max_sectors_bytes(sdp->device->request_queue),
1121 return blk_trace_setup(sdp->device->request_queue, sdp->name,
1122 MKDEV(SCSI_GENERIC_MAJOR, sdp->index),
1125 return blk_trace_startstop(sdp->device->request_queue, 1);
1127 return blk_trace_startstop(sdp->device->request_queue, 0);
1129 return blk_trace_remove(sdp->device->request_queue);
1135 if (atomic_read(&sdp->detaching))
1144 result = scsi_ioctl_block_when_processing_errors(sdp->device,
1156 Sg_device *sdp;
1160 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1163 ret = sg_ioctl_common(filp, sdp, sfp, cmd_in, p);
1166 return scsi_ioctl(sdp->device, filp->f_mode & FMODE_WRITE, cmd_in, p);
1173 Sg_device *sdp;
1182 sdp = sfp->parentdp;
1183 if (!sdp)
1195 if (atomic_read(&sdp->detaching))
1202 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
1210 Sg_device *sdp;
1213 if ((!(sfp = (Sg_fd *) filp->private_data)) || (!(sdp = sfp->parentdp)))
1215 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
1323 Sg_device *sdp;
1337 sdp = sfp->parentdp;
1338 if (unlikely(atomic_read(&sdp->detaching)))
1345 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sdp,
1360 if ((sdp->sgdebug > 0) &&
1363 __scsi_print_sense(sdp->device, __func__, sense,
1371 && sdp->device->removable) {
1374 sdp->device->changed = 1;
1440 Sg_device *sdp;
1445 sdp = kzalloc(sizeof(Sg_device), GFP_KERNEL);
1446 if (!sdp) {
1455 error = idr_alloc(&sg_index_idr, sdp, 0, SG_MAX_DEVS, GFP_NOWAIT);
1473 sprintf(sdp->name, "sg%d", k);
1474 sdp->device = scsidp;
1475 mutex_init(&sdp->open_rel_lock);
1476 INIT_LIST_HEAD(&sdp->sfds);
1477 init_waitqueue_head(&sdp->open_wait);
1478 atomic_set(&sdp->detaching, 0);
1479 rwlock_init(&sdp->sfd_lock);
1480 sdp->sg_tablesize = queue_max_segments(q);
1481 sdp->index = k;
1482 kref_init(&sdp->d_ref);
1490 kfree(sdp);
1493 return sdp;
1500 Sg_device *sdp = NULL;
1519 sdp = sg_alloc(scsidp);
1520 if (IS_ERR(sdp)) {
1522 error = PTR_ERR(sdp);
1526 error = cdev_add(cdev, MKDEV(SCSI_GENERIC_MAJOR, sdp->index), 1);
1530 sdp->cdev = cdev;
1536 sdp->index),
1537 sdp, "%s", sdp->name);
1547 "to sg%d\n", __func__, sdp->index);
1552 "type %d\n", sdp->index, scsidp->type);
1554 dev_set_drvdata(cl_dev, sdp);
1560 idr_remove(&sg_index_idr, sdp->index);
1562 kfree(sdp);
1574 struct sg_device *sdp = container_of(kref, struct sg_device, d_ref);
1575 struct request_queue *q = sdp->device->request_queue;
1587 idr_remove(&sg_index_idr, sdp->index);
1591 sg_printk(KERN_INFO, sdp, "sg_device_destroy\n"));
1593 kfree(sdp);
1600 Sg_device *sdp = dev_get_drvdata(cl_dev);
1605 if (!sdp)
1607 /* want sdp->detaching non-zero as soon as possible */
1608 val = atomic_inc_return(&sdp->detaching);
1612 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
1615 read_lock_irqsave(&sdp->sfd_lock, iflags);
1616 list_for_each_entry(sfp, &sdp->sfds, sfd_siblings) {
1620 wake_up_interruptible_all(&sdp->open_wait);
1621 read_unlock_irqrestore(&sdp->sfd_lock, iflags);
1624 device_destroy(&sg_sysfs_class, MKDEV(SCSI_GENERIC_MAJOR, sdp->index));
1625 cdev_del(sdp->cdev);
1626 sdp->cdev = NULL;
1628 kref_put(&sdp->d_ref, sg_device_destroy);
2161 sg_add_sfp(Sg_device * sdp)
2181 sfp->parentdp = sdp;
2182 write_lock_irqsave(&sdp->sfd_lock, iflags);
2183 if (atomic_read(&sdp->detaching)) {
2184 write_unlock_irqrestore(&sdp->sfd_lock, iflags);
2188 list_add_tail(&sfp->sfd_siblings, &sdp->sfds);
2189 write_unlock_irqrestore(&sdp->sfd_lock, iflags);
2190 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
2196 max_sectors_bytes(sdp->device->request_queue));
2198 SCSI_LOG_TIMEOUT(3, sg_printk(KERN_INFO, sdp,
2203 kref_get(&sdp->d_ref);
2212 struct sg_device *sdp = sfp->parentdp;
2213 struct scsi_device *device = sdp->device;
2228 SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp,
2235 SCSI_LOG_TIMEOUT(6, sg_printk(KERN_INFO, sdp,
2239 kref_put(&sdp->d_ref, sg_device_destroy);
2248 struct sg_device *sdp = sfp->parentdp;
2251 write_lock_irqsave(&sdp->sfd_lock, iflags);
2253 write_unlock_irqrestore(&sdp->sfd_lock, iflags);
2293 struct sg_device *sdp;
2297 sdp = sg_lookup_dev(dev);
2298 if (!sdp)
2299 sdp = ERR_PTR(-ENXIO);
2300 else if (atomic_read(&sdp->detaching)) {
2301 /* If sdp->detaching, then the refcount may already be 0, in
2304 sdp = ERR_PTR(-ENODEV);
2306 kref_get(&sdp->d_ref);
2309 return sdp;
2487 Sg_device *sdp;
2492 sdp = it ? sg_lookup_dev(it->index) : NULL;
2493 if ((NULL == sdp) || (NULL == sdp->device) ||
2494 (atomic_read(&sdp->detaching)))
2497 scsidp = sdp->device;
2513 Sg_device *sdp;
2518 sdp = it ? sg_lookup_dev(it->index) : NULL;
2519 scsidp = sdp ? sdp->device : NULL;
2520 if (sdp && scsidp && (!atomic_read(&sdp->detaching)))
2530 static void sg_proc_debug_helper(struct seq_file *s, Sg_device * sdp)
2540 list_for_each_entry(fp, &sdp->sfds, sfd_siblings) {
2595 Sg_device *sdp;
2603 sdp = it ? sg_lookup_dev(it->index) : NULL;
2604 if (NULL == sdp)
2606 read_lock(&sdp->sfd_lock);
2607 if (!list_empty(&sdp->sfds)) {
2608 seq_printf(s, " >>> device=%s ", sdp->name);
2609 if (atomic_read(&sdp->detaching))
2611 else if (sdp->device) {
2612 struct scsi_device *scsidp = sdp->device;
2621 sdp->sg_tablesize, sdp->exclude, sdp->open_cnt);
2622 sg_proc_debug_helper(s, sdp);
2624 read_unlock(&sdp->sfd_lock);