aboutsummaryrefslogtreecommitdiffstats
path: root/include/scsi
diff options
context:
space:
mode:
authorBoaz Harrosh <bharrosh@panasas.com>2009-01-25 09:58:03 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2009-03-12 13:58:07 -0400
commitb799bc7da0ce5ba4a988c521a8fb10452eb419f0 (patch)
tree47f1c70c15419a6da81cb718329326f4c1a7e246 /include/scsi
parent95b05a7db5865855c32e0bb8b244c3a7aac1cfeb (diff)
[SCSI] osd_uld: API for retrieving osd devices from Kernel
Kernel clients like exofs can retrieve struct osd_dev(s) by means of below API. + osduld_path_lookup() - given a path (e.g "/dev/osd0") locks and returns the corresponding struct osd_dev, which is then needed for subsequent libosd use. + osduld_put_device() - free up use of an osd_dev. Devices can be shared by multiple clients. The osd_uld_device's life time is governed by an embedded kref structure. The osd_uld_device holds an extra reference to both it's char-device and it's scsi_device, and will release these just before the final deallocation. There are three possible lock sources of the osd_uld_device 1. First and for most is the probe() function called by scsi-ml upon a successful login into a target. Released in release() when logout. 2. Second by user-mode file handles opened on the char-dev. 3. Third is here by Kernel users. All three locks must be removed before the osd_uld_device is freed. The MODULE has three lock sources as well: 1. scsi-ml at probe() time, removed after release(). (login/logout) 2. The user-mode file handles open/close. 3. Import symbols by client modules like exofs. TODO: This API is not enough for the pNFS-objects LD. A more versatile API will be needed. Proposed API could be: struct osd_dev *osduld_sysid_lookup(const char id[OSD_SYSTEMID_LEN]); Signed-off-by: Boaz Harrosh <bharrosh@panasas.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'include/scsi')
-rw-r--r--include/scsi/osd_initiator.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/scsi/osd_initiator.h b/include/scsi/osd_initiator.h
index a5dbbddcf73b..e84dc7aa5e34 100644
--- a/include/scsi/osd_initiator.h
+++ b/include/scsi/osd_initiator.h
@@ -33,6 +33,10 @@ struct osd_dev {
33 unsigned def_timeout; 33 unsigned def_timeout;
34}; 34};
35 35
36/* Retrieve/return osd_dev(s) for use by Kernel clients */
37struct osd_dev *osduld_path_lookup(const char *dev_name); /*Use IS_ERR/ERR_PTR*/
38void osduld_put_device(struct osd_dev *od);
39
36/* Add/remove test ioctls from external modules */ 40/* Add/remove test ioctls from external modules */
37typedef int (do_test_fn)(struct osd_dev *od, unsigned cmd, unsigned long arg); 41typedef int (do_test_fn)(struct osd_dev *od, unsigned cmd, unsigned long arg);
38int osduld_register_test(unsigned ioctl, do_test_fn *do_test); 42int osduld_register_test(unsigned ioctl, do_test_fn *do_test);