This file is indexed.

/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