#include <linux/string.h>
#include <linux/parser.h>
#include <linux/timer.h>
#include <linux/blkdev.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/module.h>
#include <linux/vmalloc.h>
#include <linux/falloc.h>
#include <linux/uio.h>
#include <linux/scatterlist.h>
#include <scsi/scsi_proto.h>
#include <asm/unaligned.h>
#include <target/target_core_base.h>
#include <target/target_core_backend.h>
#include "target_core_file.h"
static inline struct fd_dev *FD_DEV(struct se_device *dev)
{ … }
static int fd_attach_hba(struct se_hba *hba, u32 host_id)
{ … }
static void fd_detach_hba(struct se_hba *hba)
{ … }
static struct se_device *fd_alloc_device(struct se_hba *hba, const char *name)
{ … }
static bool fd_configure_unmap(struct se_device *dev)
{ … }
static int fd_configure_device(struct se_device *dev)
{ … }
static void fd_dev_call_rcu(struct rcu_head *p)
{ … }
static void fd_free_device(struct se_device *dev)
{ … }
static void fd_destroy_device(struct se_device *dev)
{ … }
struct target_core_file_cmd { … };
static void cmd_rw_aio_complete(struct kiocb *iocb, long ret)
{ … }
static sense_reason_t
fd_execute_rw_aio(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
enum dma_data_direction data_direction)
{ … }
static int fd_do_rw(struct se_cmd *cmd, struct file *fd,
u32 block_size, struct scatterlist *sgl,
u32 sgl_nents, u32 data_length, int is_write)
{ … }
static sense_reason_t
fd_execute_sync_cache(struct se_cmd *cmd)
{ … }
static sense_reason_t
fd_execute_write_same(struct se_cmd *cmd)
{ … }
static int
fd_do_prot_fill(struct se_device *se_dev, sector_t lba, sector_t nolb,
void *buf, size_t bufsize)
{ … }
static int
fd_do_prot_unmap(struct se_cmd *cmd, sector_t lba, sector_t nolb)
{ … }
static sense_reason_t
fd_execute_unmap(struct se_cmd *cmd, sector_t lba, sector_t nolb)
{ … }
static sense_reason_t
fd_execute_rw_buffered(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
enum dma_data_direction data_direction)
{ … }
static sense_reason_t
fd_execute_rw(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
enum dma_data_direction data_direction)
{ … }
enum { … };
static match_table_t tokens = …;
static ssize_t fd_set_configfs_dev_params(struct se_device *dev,
const char *page, ssize_t count)
{ … }
static ssize_t fd_show_configfs_dev_params(struct se_device *dev, char *b)
{ … }
static sector_t fd_get_blocks(struct se_device *dev)
{ … }
static int fd_init_prot(struct se_device *dev)
{ … }
static int fd_format_prot(struct se_device *dev)
{ … }
static void fd_free_prot(struct se_device *dev)
{ … }
static struct exec_cmd_ops fd_exec_cmd_ops = …;
static sense_reason_t
fd_parse_cdb(struct se_cmd *cmd)
{ … }
static const struct target_backend_ops fileio_ops = …;
static int __init fileio_module_init(void)
{ … }
static void __exit fileio_module_exit(void)
{ … }
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;
module_init(…) …;
module_exit(fileio_module_exit);