|
|
1.1 ! root 1: logical disks and insertion detection ! 2: ! 3: * no multi-volume support. One unit per physical drive. Disallow eject ! 4: while volume is open, just like disallow umount while root vnode is ! 5: referenced. (Poll OS group to find what they think of this...) ! 6: ! 7: * definition : unit = physical drive. ! 8: ! 9: * each physDevice always has a rawDevice (its first logicalDisk). ! 10: label is valid. ! 11: ! 12: * a physDevice has blockDevices if a label is valid and the label has ! 13: valid partitions (one blockDev per partition). ! 14: ! 15: * Probe time: ! 16: for each unit { ! 17: live partition is DiskObject subclass; ! 18: LD +probe { ! 19: if label present { ! 20: create a raw disk Logical Unit; ! 21: create a Block Device LD for each partition; ! 22: } ! 23: } ! 24: if removable { ! 25: start a vol_check thread; ! 26: } ! 27: } ! 28: ! 29: actions on physDevice ! 30: ! 31: boot ! 32: set one-time only params in subclass-private init ! 33: set phys params in getPhysParams ! 34: UnixDisk +probe (create live device, raw/block if necessary) ! 35: ! 36: setFormatted:flag ! 37: if any logicalDevices open ! 38: reject; ! 39: self labelValid, formatted = 0 ! 40: delete raw devices and blockDevices ! 41: ! 42: setLabelValid:1 ! 43: set labelValid ! 44: UnixDisk +probe ! 45: ! 46: setLabelValid:0 ! 47: if any logicalDevices open ! 48: reject; ! 49: self labelValid = 0 ! 50: delete raw devices and blockDevices ! 51: ! 52: eject ! 53: if any logicalDisks open ! 54: reject; ! 55: labelValid, formatted = 0 ! 56: delete raw devices and blockDevices ! 57: ! 58: insert detection ! 59: set phys params in getPhysParams ! 60: UnixDisk +probe (create live device, raw/block if necessary) ! 61: ! 62: DiskObject/subclass ! 63: created: ! 64: subclass's probe: ! 65: one-time only init: ! 66: subclass-private init ! 67: physical parameter init (dev_size, block_size) ! 68: subclass getPhysParams (mandatory for all subclasses) ! 69: ! 70: UnixDisk probe:physDevice ! 71: read label; ! 72: if bad ! 73: return; ! 74: create rawDevice per label info; ! 75: registerUnixDisk:rawDevice type:DISK_TYPE_RAW ! 76: create blockDevice for each valid partition; ! 77: ! 78: todo on thursd: ! 79: old unixdisk class ! 80: rename ! 81: add devEjectDisk, getPhysParams ! 82: make it work wirth new DiskObject, UnixDisk. ! 83: write a disk insertion detection thread (somewhere....)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.