Class: UBLK::Control

Inherits:
Object
  • Object
show all
Defined in:
lib/ublk/control.rb,
sig/ublk.rbs

Constant Summary collapse

SYSFS =

Returns:

  • (String)
"/sys/class/ublk-char"

Instance Method Summary collapse

Constructor Details

#initializeControl

Returns a new instance of Control.



7
8
9
10
# File 'lib/ublk/control.rb', line 7

def initialize
  UBLK.ensure_supported!
  @native = Native::Control.new
end

Instance Method Details

#add_dev(id: nil, queues: 1, depth: 128, max_io_bytes: 512 * 1024, recovery: false) ⇒ DeviceInfo

Parameters:

  • id: (Integer, nil) (defaults to: nil)
  • queues: (Integer) (defaults to: 1)
  • depth: (Integer) (defaults to: 128)
  • max_io_bytes: (Integer) (defaults to: 512 * 1024)
  • recovery: (Boolean) (defaults to: false)

Returns:

Raises:

  • (ArgumentError)


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

#closenil

Returns:

  • (nil)


35
# File 'lib/ublk/control.rb', line 35

def close = @native.close

#del_dev(id) ⇒ Boolean

Parameters:

  • id (Integer)

Returns:

  • (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

Parameters:

  • id (Integer)
  • pid: (Integer) (defaults to: Process.pid)

Returns:

  • (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

Parameters:

  • id (Integer)

Returns:



34
# File 'lib/ublk/control.rb', line 34

def get_dev_info(id) = DeviceInfo.from_native(@native.get_dev_info(id))

#listArray[DeviceInfo]

Returns:



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

Parameters:

  • id (Integer)
  • params (Params)

Returns:



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

Parameters:

  • id (Integer)
  • pid: (Integer) (defaults to: Process.pid)

Returns:

  • (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

Parameters:

  • id (Integer)

Returns:

  • (Boolean)


32
# File 'lib/ublk/control.rb', line 32

def start_user_recovery(id) = @native.start_user_recovery(id)

#stop_dev(id) ⇒ Boolean

Parameters:

  • id (Integer)

Returns:

  • (Boolean)


30
# File 'lib/ublk/control.rb', line 30

def stop_dev(id) = @native.stop_dev(id)