Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 62725
b: refs/heads/master
c: 80ed71c
h: refs/heads/master
i:
  62723: faae8db
v: v3
  • Loading branch information
James Bottomley authored and James Bottomley committed Jul 19, 2007
1 parent 230942d commit 74eaaf0
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b02b6bc46571b21a545c9e697df1e226ff22bc81
refs/heads/master: 80ed71ce1a3369521c693ebf30abb9cfe1dc7e66
2 changes: 1 addition & 1 deletion trunk/block/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ endif # BLOCK

config BLK_DEV_BSG
bool "Block layer SG support v4 (EXPERIMENTAL)"
depends on (SCSI=y) && EXPERIMENTAL
depends on EXPERIMENTAL
---help---
Saying Y here will enable generic SG (SCSI generic) v4 support
for any block device.
Expand Down
30 changes: 0 additions & 30 deletions trunk/block/bsg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1009,29 +1009,6 @@ int bsg_register_queue(struct request_queue *q, const char *name)
}
EXPORT_SYMBOL_GPL(bsg_register_queue);

static int bsg_add(struct class_device *cl_dev, struct class_interface *cl_intf)
{
int ret;
struct scsi_device *sdp = to_scsi_device(cl_dev->dev);
struct request_queue *rq = sdp->request_queue;

if (rq->kobj.parent)
ret = bsg_register_queue(rq, kobject_name(rq->kobj.parent));
else
ret = bsg_register_queue(rq, kobject_name(&sdp->sdev_gendev.kobj));
return ret;
}

static void bsg_remove(struct class_device *cl_dev, struct class_interface *cl_intf)
{
bsg_unregister_queue(to_scsi_device(cl_dev->dev)->request_queue);
}

static struct class_interface bsg_intf = {
.add = bsg_add,
.remove = bsg_remove,
};

static struct cdev bsg_cdev = {
.kobj = {.name = "bsg", },
.owner = THIS_MODULE,
Expand Down Expand Up @@ -1069,16 +1046,9 @@ static int __init bsg_init(void)
if (ret)
goto unregister_chrdev;

ret = scsi_register_interface(&bsg_intf);
if (ret)
goto remove_cdev;

printk(KERN_INFO BSG_DESCRIPTION " version " BSG_VERSION
" loaded (major %d)\n", bsg_major);
return 0;
remove_cdev:
printk(KERN_ERR "bsg: failed register scsi interface %d\n", ret);
cdev_del(&bsg_cdev);
unregister_chrdev:
unregister_chrdev_region(MKDEV(bsg_major, 0), BSG_MAX_DEVS);
destroy_bsg_class:
Expand Down
13 changes: 13 additions & 0 deletions trunk/drivers/scsi/scsi_sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,7 @@ static int attr_add(struct device *dev, struct device_attribute *attr)
int scsi_sysfs_add_sdev(struct scsi_device *sdev)
{
int error, i;
struct request_queue *rq = sdev->request_queue;

if ((error = scsi_device_set_state(sdev, SDEV_RUNNING)) != 0)
return error;
Expand All @@ -734,6 +735,17 @@ int scsi_sysfs_add_sdev(struct scsi_device *sdev)
/* take a reference for the sdev_classdev; this is
* released by the sdev_class .release */
get_device(&sdev->sdev_gendev);

error = bsg_register_queue(rq, sdev->sdev_gendev.bus_id);

if (error)
sdev_printk(KERN_INFO, sdev,
"Failed to register bsg queue, errno=%d\n", error);

/* we're treating error on bsg register as non-fatal, so pretend
* nothing went wrong */
error = 0;

if (sdev->host->hostt->sdev_attrs) {
for (i = 0; sdev->host->hostt->sdev_attrs[i]; i++) {
error = attr_add(&sdev->sdev_gendev,
Expand Down Expand Up @@ -780,6 +792,7 @@ void __scsi_remove_device(struct scsi_device *sdev)
if (scsi_device_set_state(sdev, SDEV_CANCEL) != 0)
return;

bsg_unregister_queue(sdev->request_queue);
class_device_unregister(&sdev->sdev_classdev);
transport_remove_device(dev);
device_del(dev);
Expand Down

0 comments on commit 74eaaf0

Please sign in to comment.