Class: UBLK::Control
- Inherits:
-
Object
- Object
- UBLK::Control
- Defined in:
- lib/ublk/control.rb,
sig/ublk.rbs
Constant Summary collapse
- SYSFS =
"/sys/class/ublk-char"
Instance Method Summary collapse
- #add_dev(id: nil, queues: 1, depth: 128, max_io_bytes: 512 * 1024, recovery: false) ⇒ DeviceInfo
- #close ⇒ nil
- #del_dev(id) ⇒ Boolean
- #end_user_recovery(id, pid: Process.pid) ⇒ Boolean
- #get_dev_info(id) ⇒ DeviceInfo
-
#initialize ⇒ Control
constructor
A new instance of Control.
- #list ⇒ Array[DeviceInfo]
- #set_params(id, params) ⇒ Params
- #start_dev(id, pid: Process.pid) ⇒ Boolean
- #start_user_recovery(id) ⇒ Boolean
- #stop_dev(id) ⇒ Boolean
Constructor Details
Instance Method Details
#add_dev(id: nil, queues: 1, depth: 128, max_io_bytes: 512 * 1024, recovery: false) ⇒ DeviceInfo
12 13 14 15 16 17 18 19 20 |
# File 'lib/ublk/control.rb', line 12 def add_dev(id: nil, queues: 1, depth: 128, max_io_bytes: 512 * 1024, recovery: false) raise ArgumentError, "id must be nil or a non-negative Integer" unless id.nil? || (id.is_a?(Integer) && id >= 0) raise ArgumentError, "queues must be between 1 and 4096" unless queues.is_a?(Integer) && queues.between?(1, 4096) raise ArgumentError, "depth must be between 1 and 4096" unless depth.is_a?(Integer) && depth.between?(1, 4096) raise ArgumentError, "max_io_bytes must be a positive multiple of 512" unless max_io_bytes.is_a?(Integer) && max_io_bytes.positive? && (max_io_bytes % 512).zero? raise ArgumentError, "max_io_bytes must not exceed 32 MiB" if max_io_bytes > 32 * 1024 * 1024 DeviceInfo.from_native(@native.add_dev(id, queues, depth, max_io_bytes, recovery)) end |
#close ⇒ nil
35 |
# File 'lib/ublk/control.rb', line 35 def close = @native.close |
#del_dev(id) ⇒ Boolean
31 |
# File 'lib/ublk/control.rb', line 31 def del_dev(id) = @native.del_dev(id) |
#end_user_recovery(id, pid: Process.pid) ⇒ Boolean
33 |
# File 'lib/ublk/control.rb', line 33 def end_user_recovery(id, pid: Process.pid) = @native.end_user_recovery(id, pid) |
#get_dev_info(id) ⇒ DeviceInfo
34 |
# File 'lib/ublk/control.rb', line 34 def get_dev_info(id) = DeviceInfo.from_native(@native.get_dev_info(id)) |
#list ⇒ Array[DeviceInfo]
37 38 39 40 41 42 43 44 |
# File 'lib/ublk/control.rb', line 37 def list Dir.glob("#{SYSFS}/ublkc*").filter_map do |path| id = File.basename(path).delete_prefix("ublkc") get_dev_info(Integer(id, 10)) rescue SystemCallError, ArgumentError nil end end |
#set_params(id, params) ⇒ Params
22 23 24 25 26 27 |
# File 'lib/ublk/control.rb', line 22 def set_params(id, params) @native.set_params(id, params.size, params.logical_block_size, params.physical_block_size, params.max_io_bytes, params.read_only, params.rotational, params.discard) params end |
#start_dev(id, pid: Process.pid) ⇒ Boolean
29 |
# File 'lib/ublk/control.rb', line 29 def start_dev(id, pid: Process.pid) = @native.start_dev(id, pid) |
#start_user_recovery(id) ⇒ Boolean
32 |
# File 'lib/ublk/control.rb', line 32 def start_user_recovery(id) = @native.start_user_recovery(id) |
#stop_dev(id) ⇒ Boolean
30 |
# File 'lib/ublk/control.rb', line 30 def stop_dev(id) = @native.stop_dev(id) |