Sun Microsystems Systems Architecture Committee _________________________________________________________________ Subject: sosd: SCSI Object-based Storage Device driver Submitted by: Mark Martin File: PSARC/2008/097/opinion.ms Date: March 11th, 2008. Committee: Mark Carlson (opinion written by Mark Martin) (Members present: Don Cragun, Garrett D'Amore, Charles Debardeleben, Rick Mathews, Sebastien Roy Product Approval Committee: Solaris PAC solaris-pac-opinion@sun.com 1. Summary The project implements a new SCSI target driver (sosd) that binds to object-based SCSI devices conforming to the ANSI T10 OSD-2 standard. The new target driver will allow filesystems and applications to interact with the OSD devices using object semantics instead of block semantics. This driver will be a peer of the existing SCSI target drivers sd, st and sgen. 2. Decision & Precedence Information The project is approved as specified in reference [1]. The project may be delivered in a patch release. 3. Interfaces The project exports the following interfaces. Exported Interfaces ______________________________________________________________________ Interface | Classification | Comments ___________________________________|________________|_________________ osd_setup_format_osd | | osd_setup_create_partition | | These interfaces osd_setup_remove_partition | | are available to osd_setup_create_object | | kernel clients osd_setup_remove_object | | (filesystems) osd_setup_create_and_write | | through scsi_osd osd_setup_create_and_write_bp | | module osd_setup_write | | osd_setup_write_bp | CONTRACTED | osd_setup_read | CONSOLIDATION | osd_setup_read_bp | PRIVATE | osd_setup_append | | osd_setup_append_bp | | osd_setup_flush | | osd_setup_flush_osd | | osd_setup_clear | | osd_setup_punch | | osd_setup_object_structure_check | | osd_setup_set_attr | | osd_setup_get_attr | | | | osd_add_set_page_1attr_cdb | | osd_add_set_page_1attr_to_req | | osd_add_get_page_attr_to_req | | osd_add_set_list_entry_to_req | | osd_add_get_list_entry_to_req | | osd_add_capability_security_to_req | | osd_add_flags_to_req | | | | osd_submit_req | | | | osd_get_result | | | | osd_free_req | | | | osd_open_by_name | | osd_close | | | | osd_get_max_dma_size | | osd_get_api_version | | ___________________________________|__________________________________ The project imports the following interfaces. Imported Interfaces _____________________________________________________________________ Interface | Classification | Comments ____________________|____________________|___________________________ Solaris DDI | | Solaris LDI | | scsi_init_pkt | | scsi_destroy_pkt | | scsi_transport | | scsi_dmafree | | scsi_probe | | scsi_unprobe | | scsi_ifgetcap | | scsi_ifsetcap | | scsi_log | | makedevice | | getminor | | physio | All are Committed | Interfaces defined in bioinit | | biowait | interfaces | sections 9F or 9S of bioerror | | biodone | | solaris man pages biofini | | buf | | bp_mapout | | getrbuf | | freerbuf | | kmem_cache_create | | kmem_cache_alloc | | kmem_cache_free | | kmem_cache_destroy | | kmem_zalloc | | kmem_free | | mod_install | | mod_info | | mod_remove | | mod_modname | | bcopy | | bzero | | bcmp | | mutex_init | | mutex_enter | | mutex_exit | | mutex_owned | | mutex_destroy | | sema_init | | sema_p | | sema_v | | sema_destroy | | kstat_create | | kstat_install | | kstat_named_init | | kstat_delete | | ____________________|____________________|____________________________ The project uses the following interfaces for kernel module and driver communication internally. Internal Interfaces ______________________________________________________________________ Interface | Classification | Comments __________________________|____________________|______________________ osd_iotask_alloc | | osd_iotask_start | | These are used osd_iotask_free | PROJECT | internally for osd_register_library | PRIVATE | kernel module and osd_deregister_library | | driver communication osd_add_cap_sec_to_iotask | | __________________________|____________________|______________________ 4. Opinion 4.1. Existing clients planned During inception discussion, it was noted that the ARC discourages producing APIs which do not have any clients. The project team indicated that the Shared QFS will deliver as a client of this API at a later date. See PSARC 2007/588. 5. Minority Opinion(s) None. 6. Advisory Information 6.1. Bi-directional support and atomic transactions. During inception review, the lack of support for bi-directional communication caused concern, especially with regard for supporting atomic transactions. The project team acknowleges that while this is a limitation in the existing framework, Shared QFS does not have a requirement to support bi-directional commands. Any other client that wishes to use the sosd driver must be aware of the bi-directional support limitation in SCSA. The committee would advise the project team to clearly state the limitation that if another client (apart from Shared QFS) wants to use this interface, such client may not assume bidirectional support and should know that lack of bidirectional support may have issues with atomicity of a 'client-initiated-split-command' to achieve the net effect of a bidirectional command. The driver will _never_ split any command on behalf of the client. Shared/Concurrent access will have to be managed by filesystem and OSD target with OSD protocol support or QFS semantics and out of scope. 7. Appendices 7.1. Appendix A: Technical Changes Required None. 7.2. Appendix B: Technical Changes Advised None. 7.3. Appendix C: Reference Material Unless stated otherwise, path names are relative to the case directory PSARC/2008/097. 1 Onepager File: onepager 2 Inception minutes File: 20080227-2008-097-inception 3 Issues File: issues 4 PSARC 20 Questions. File: final.materials/20q 5 Security File: final.materials/security.txt 6 SCSI OSD Driver Design File: final.materials/sosd_design_v3.pdf 7 ANSI project T10/11729-D standard http://www.t10.org/ftp/t10/drafts/osd/osd2r03.pdf PSARC/2008/097 Copyright 2008 Sun Microsystems