/usr/share/pyshared/tcm_fileio.py is in lio-utils 3.1+git2.fd0b34fd-2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #!/usr/bin/python
import os
import subprocess as sub
import string, re
from optparse import OptionParser
tcm_root = "/sys/kernel/config/target/core"
def createvirtdev(path, params):
# print "Calling fileio createvirtdev: path " + path
cfs_path = tcm_root + "/" + path + "/"
# print "Calling fileio createvirtdev: params " + str(params)
fd_params = str(params)
# Extract the udev_dev path from fd_dev_name=
try:
off = fd_params.index('fd_dev_name=')
off += 12
file_tmp = fd_params[off:]
file = file_tmp.split(',')
except IOError, msg:
print "Unable to locate fd_dev_name= parameter key"
return -1
# Set UDEV path if struct file is pointing to an underlying struct block_device
if re.search('/dev/', file[0]):
udev_path = file[0]
set_udev_path_op = "echo -n " + udev_path + " > " + cfs_path + "udev_path"
ret = os.system(set_udev_path_op)
if ret:
print "pSCSI: Unable to set udev_path in " + cfs_path + " for: " + udev_path
return -1
control_opt = "echo -n " + params[0] + " > " + cfs_path + "control"
# print "control_opt: " + control_opt
ret = os.system(control_opt)
if ret:
print "FILEIO: createvirtdev failed for control_opt with " + params[0]
return -1
enable_opt = "echo 1 > " + cfs_path + "enable"
# print "Calling enable_opt " + enable_opt
ret = os.system(enable_opt)
if ret:
print "FILEIO: createvirtdev failed for enable_opt with " + params[0]
return -1
def fd_freevirtdev():
pass
def fd_get_buffered_mode(value):
off = value.index(' Mode: ')
off += 7
fd_dev_mode_tmp = value[off:]
fd_dev_mode = fd_dev_mode_tmp.split(' ')
if re.search('Buffered', fd_dev_mode[0]):
fd_dev_mode_str = ",fd_buffered_io=1"
else:
fd_dev_mode_str = ""
return fd_dev_mode_str
def fd_get_params(path):
# Reference by udev_path if available
udev_path_file = path + "/udev_path"
p = os.open(udev_path_file, 0)
value = os.read(p, 1024)
if re.search('/dev/', value):
fd_dev_blockdev = 1
fd_dev_blockdev_str = "fd_dev_name=" + value.rstrip() + ",fd_dev_size=0"
else:
fd_dev_blockdev = 0
os.close(p)
info_file = path + "/info"
p = open(info_file, 'rU')
try:
value = p.read(1024)
except IOError, msg:
p.close()
return
p.close()
if fd_dev_blockdev:
fd_dev_mode_str = fd_get_buffered_mode(value)
# Append a FILEIO size of ' 0', as struct block_device sector count is autodetected by TCM
return fd_dev_blockdev_str + fd_dev_mode_str
off = value.index('File: ')
off += 6
fd_dev_name_tmp = value[off:]
fd_dev_name = fd_dev_name_tmp.split(' ')
off = value.index(' Size: ')
off += 7
fd_dev_size_tmp = value[off:]
fd_dev_size = fd_dev_size_tmp.split(' ')
fd_dev_mode_str = fd_get_buffered_mode(value)
params = "fd_dev_name=" + fd_dev_name[0] + ",fd_dev_size=" + fd_dev_size[0] + fd_dev_mode_str
# fd_dev_name= and fd_dev_size= parameters for tcm_node --createdev
return params
|