diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-16 13:44:13 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-12-20 10:31:53 +0100 |
commit | 2f68778f08471fb7f13a8634ebb48c6db13c0f69 (patch) | |
tree | eae0deea88cc0d81052f8497a668dfaeecd6de40 /cpukit/libfs/src/imfs | |
parent | libcsupport: Add and use rtems_libio_iovec_eval() (diff) | |
download | rtems-2f68778f08471fb7f13a8634ebb48c6db13c0f69.tar.bz2 |
Filesystem: Add readv/writev handlers
The readv() and writev() support was implemented in terms of multiple
calls to the read and write handlers. This imposes a problem on device
files which use an IO vector as single request entity. For example a
low-level network device (e.g. BPF(4)) may use an IO vector to create
one frame from multiple protocol layers each with its own IO vector
entry.
Diffstat (limited to 'cpukit/libfs/src/imfs')
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_fifo.c | 24 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_handlers_device.c | 24 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_handlers_directory.c | 24 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_handlers_link.c | 24 | ||||
-rw-r--r-- | cpukit/libfs/src/imfs/imfs_handlers_memfile.c | 24 |
5 files changed, 65 insertions, 55 deletions
diff --git a/cpukit/libfs/src/imfs/imfs_fifo.c b/cpukit/libfs/src/imfs/imfs_fifo.c index 03e69368eb..743261a83d 100644 --- a/cpukit/libfs/src/imfs/imfs_fifo.c +++ b/cpukit/libfs/src/imfs/imfs_fifo.c @@ -113,17 +113,19 @@ static int IMFS_fifo_ioctl( } static const rtems_filesystem_file_handlers_r IMFS_fifo_handlers = { - IMFS_fifo_open, - IMFS_fifo_close, - IMFS_fifo_read, - IMFS_fifo_write, - IMFS_fifo_ioctl, - rtems_filesystem_default_lseek, - IMFS_stat, - rtems_filesystem_default_ftruncate, - rtems_filesystem_default_fsync_or_fdatasync, - rtems_filesystem_default_fsync_or_fdatasync, - rtems_filesystem_default_fcntl + .open_h = IMFS_fifo_open, + .close_h = IMFS_fifo_close, + .read_h = IMFS_fifo_read, + .write_h = IMFS_fifo_write, + .ioctl_h = IMFS_fifo_ioctl, + .lseek_h = rtems_filesystem_default_lseek, + .fstat_h = IMFS_stat, + .ftruncate_h = rtems_filesystem_default_ftruncate, + .fsync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fcntl_h = rtems_filesystem_default_fcntl, + .readv_h = rtems_filesystem_default_readv, + .writev_h = rtems_filesystem_default_writev }; const IMFS_node_control IMFS_node_control_fifo = { diff --git a/cpukit/libfs/src/imfs/imfs_handlers_device.c b/cpukit/libfs/src/imfs/imfs_handlers_device.c index 899b3dcf63..451e20161d 100644 --- a/cpukit/libfs/src/imfs/imfs_handlers_device.c +++ b/cpukit/libfs/src/imfs/imfs_handlers_device.c @@ -34,17 +34,19 @@ static int IMFS_stat_device( } static const rtems_filesystem_file_handlers_r IMFS_device_handlers = { - device_open, - device_close, - device_read, - device_write, - device_ioctl, - rtems_filesystem_default_lseek_file, - IMFS_stat_device, - device_ftruncate, - rtems_filesystem_default_fsync_or_fdatasync, - rtems_filesystem_default_fsync_or_fdatasync, - rtems_filesystem_default_fcntl + .open_h = device_open, + .close_h = device_close, + .read_h = device_read, + .write_h = device_write, + .ioctl_h = device_ioctl, + .lseek_h = rtems_filesystem_default_lseek_file, + .fstat_h = IMFS_stat_device, + .ftruncate_h = device_ftruncate, + .fsync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fcntl_h = rtems_filesystem_default_fcntl, + .readv_h = rtems_filesystem_default_readv, + .writev_h = rtems_filesystem_default_writev }; static IMFS_jnode_t *IMFS_node_initialize_device( diff --git a/cpukit/libfs/src/imfs/imfs_handlers_directory.c b/cpukit/libfs/src/imfs/imfs_handlers_directory.c index 61ca5527e1..ab267d72cd 100644 --- a/cpukit/libfs/src/imfs/imfs_handlers_directory.c +++ b/cpukit/libfs/src/imfs/imfs_handlers_directory.c @@ -50,17 +50,19 @@ static int IMFS_stat_directory( } static const rtems_filesystem_file_handlers_r IMFS_directory_handlers = { - rtems_filesystem_default_open, - rtems_filesystem_default_close, - imfs_dir_read, - rtems_filesystem_default_write, - rtems_filesystem_default_ioctl, - rtems_filesystem_default_lseek_directory, - IMFS_stat_directory, - rtems_filesystem_default_ftruncate_directory, - rtems_filesystem_default_fsync_or_fdatasync_success, - rtems_filesystem_default_fsync_or_fdatasync_success, - rtems_filesystem_default_fcntl + .open_h = rtems_filesystem_default_open, + .close_h = rtems_filesystem_default_close, + .read_h = imfs_dir_read, + .write_h = rtems_filesystem_default_write, + .ioctl_h = rtems_filesystem_default_ioctl, + .lseek_h = rtems_filesystem_default_lseek_directory, + .fstat_h = IMFS_stat_directory, + .ftruncate_h = rtems_filesystem_default_ftruncate_directory, + .fsync_h = rtems_filesystem_default_fsync_or_fdatasync_success, + .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync_success, + .fcntl_h = rtems_filesystem_default_fcntl, + .readv_h = rtems_filesystem_default_readv, + .writev_h = rtems_filesystem_default_writev }; static IMFS_jnode_t *IMFS_node_initialize_directory( diff --git a/cpukit/libfs/src/imfs/imfs_handlers_link.c b/cpukit/libfs/src/imfs/imfs_handlers_link.c index 5118eb5c83..00f09fc30c 100644 --- a/cpukit/libfs/src/imfs/imfs_handlers_link.c +++ b/cpukit/libfs/src/imfs/imfs_handlers_link.c @@ -45,17 +45,19 @@ static int IMFS_stat_link( } static const rtems_filesystem_file_handlers_r IMFS_link_handlers = { - rtems_filesystem_default_open, - rtems_filesystem_default_close, - rtems_filesystem_default_read, - rtems_filesystem_default_write, - rtems_filesystem_default_ioctl, - rtems_filesystem_default_lseek, - IMFS_stat_link, - rtems_filesystem_default_ftruncate, - rtems_filesystem_default_fsync_or_fdatasync, - rtems_filesystem_default_fsync_or_fdatasync, - rtems_filesystem_default_fcntl + .open_h = rtems_filesystem_default_open, + .close_h = rtems_filesystem_default_close, + .read_h = rtems_filesystem_default_read, + .write_h = rtems_filesystem_default_write, + .ioctl_h = rtems_filesystem_default_ioctl, + .lseek_h = rtems_filesystem_default_lseek, + .fstat_h = IMFS_stat_link, + .ftruncate_h = rtems_filesystem_default_ftruncate, + .fsync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync, + .fcntl_h = rtems_filesystem_default_fcntl, + .readv_h = rtems_filesystem_default_readv, + .writev_h = rtems_filesystem_default_writev }; static IMFS_jnode_t *IMFS_node_initialize_hard_link( diff --git a/cpukit/libfs/src/imfs/imfs_handlers_memfile.c b/cpukit/libfs/src/imfs/imfs_handlers_memfile.c index d0c5912eb3..44ed856147 100644 --- a/cpukit/libfs/src/imfs/imfs_handlers_memfile.c +++ b/cpukit/libfs/src/imfs/imfs_handlers_memfile.c @@ -34,17 +34,19 @@ static int IMFS_stat_file( } static const rtems_filesystem_file_handlers_r IMFS_memfile_handlers = { - memfile_open, - rtems_filesystem_default_close, - memfile_read, - memfile_write, - rtems_filesystem_default_ioctl, - rtems_filesystem_default_lseek_file, - IMFS_stat_file, - memfile_ftruncate, - rtems_filesystem_default_fsync_or_fdatasync_success, - rtems_filesystem_default_fsync_or_fdatasync_success, - rtems_filesystem_default_fcntl + .open_h = memfile_open, + .close_h = rtems_filesystem_default_close, + .read_h = memfile_read, + .write_h = memfile_write, + .ioctl_h = rtems_filesystem_default_ioctl, + .lseek_h = rtems_filesystem_default_lseek_file, + .fstat_h = IMFS_stat_file, + .ftruncate_h = memfile_ftruncate, + .fsync_h = rtems_filesystem_default_fsync_or_fdatasync_success, + .fdatasync_h = rtems_filesystem_default_fsync_or_fdatasync_success, + .fcntl_h = rtems_filesystem_default_fcntl, + .readv_h = rtems_filesystem_default_readv, + .writev_h = rtems_filesystem_default_writev }; const IMFS_node_control IMFS_node_control_memfile = { |