fd_dev
struct fd_dev *fd_dev = FD_DEV(dev);
if (!(fd_dev->fbd_flags & FBDF_HAS_PATH)) {
if (fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE) {
file = filp_open(fd_dev->fd_dev_name, flags, 0600);
pr_err("filp_open(%s) failed\n", fd_dev->fd_dev_name);
fd_dev->fd_file = file;
fd_dev->fd_block_size = bdev_logical_block_size(bdev);
fd_dev->fd_block_size);
dev_size, div_u64(dev_size, fd_dev->fd_block_size),
fd_dev->fd_block_size);
if (!(fd_dev->fbd_flags & FBDF_HAS_SIZE)) {
fd_dev->fd_block_size = FD_BLOCKSIZE;
dev->dev_attrib.hw_block_size = fd_dev->fd_block_size;
dev->dev_attrib.hw_max_sectors = FD_MAX_BYTES / fd_dev->fd_block_size;
if (fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE) {
fd_dev->fd_dev_id = fd_host->fd_host_dev_id_count++;
fd_dev->fd_queue_depth = dev->queue_depth;
" %llu total bytes\n", fd_host->fd_host_id, fd_dev->fd_dev_id,
fd_dev->fd_dev_name, fd_dev->fd_dev_size);
if (fd_dev->fd_file) {
filp_close(fd_dev->fd_file, NULL);
fd_dev->fd_file = NULL;
struct fd_dev *fd_dev = FD_DEV(dev);
kfree(fd_dev);
struct fd_dev *fd_dev = FD_DEV(dev);
if (fd_dev->fd_file) {
filp_close(fd_dev->fd_file, NULL);
fd_dev->fd_file = NULL;
struct fd_dev *fd_dev = FD_DEV(dev);
struct file *file = fd_dev->fd_file;
static inline struct fd_dev *FD_DEV(struct se_device *dev)
return container_of(dev, struct fd_dev, dev);
struct fd_dev *fd_dev = FD_DEV(dev);
ret = vfs_fsync_range(fd_dev->fd_file, start, end, 1);
struct fd_dev *fd_dev = FD_DEV(se_dev);
ret = vfs_iter_write(fd_dev->fd_file, &iter, &pos, 0);
struct fd_dev *fd_dev = FD_DEV(se_dev);
struct file *prot_fd = fd_dev->fd_prot_file;
struct fd_dev *fd_dev = FD_DEV(dev);
struct file *file = fd_dev->fd_file;
struct file *pfile = fd_dev->fd_prot_file;
vfs_fsync_range(fd_dev->fd_file, start, end, 1);
struct fd_dev *fd_dev = FD_DEV(dev);
if (fd_dev->fbd_flags & FDBD_HAS_ASYNC_IO)
struct fd_dev *fd_dev = FD_DEV(dev);
if (match_strlcpy(fd_dev->fd_dev_name, &args[0],
struct fd_dev *fd_dev;
fd_dev->fd_dev_name);
fd_dev->fbd_flags |= FBDF_HAS_PATH;
ret = kstrtoull(arg_p, 0, &fd_dev->fd_dev_size);
" bytes\n", fd_dev->fd_dev_size);
fd_dev->fbd_flags |= FBDF_HAS_SIZE;
fd_dev = kzalloc_obj(struct fd_dev);
fd_dev->fbd_flags |= FDBD_HAS_BUFFERED_IO_WCE;
if (!fd_dev) {
fd_dev->fbd_flags |= FDBD_HAS_ASYNC_IO;
struct fd_dev *fd_dev = FD_DEV(dev);
bl = sprintf(b + bl, "TCM FILEIO ID: %u", fd_dev->fd_dev_id);
fd_dev->fd_dev_name, fd_dev->fd_dev_size,
(fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE) ?
!!(fd_dev->fbd_flags & FDBD_HAS_ASYNC_IO));
struct fd_dev *fd_dev = FD_DEV(dev);
struct file *f = fd_dev->fd_file;
dev_size = fd_dev->fd_dev_size;
fd_dev->fd_host = fd_host;
struct fd_dev *fd_dev = FD_DEV(dev);
struct file *prot_file, *file = fd_dev->fd_file;
if (fd_dev->fbd_flags & FDBD_HAS_BUFFERED_IO_WCE)
fd_dev->fd_dev_name);
fd_dev->fd_prot_file = prot_file;
return &fd_dev->dev;
struct fd_dev *fd_dev = FD_DEV(dev);
if (!fd_dev->fd_prot_file)
filp_close(fd_dev->fd_prot_file, NULL);
fd_dev->fd_prot_file = NULL;