mirror of https://gitee.com/openkylin/linux.git
char: add aio_{read,write} to /dev/{null,zero}
These are handy for measuring the cost of the aio infrastructure with operations that do very little and complete immediately. Signed-off-by: Zach Brown <zab@redhat.com> Signed-off-by: Kent Overstreet <koverstreet@google.com> Cc: Felipe Balbi <balbi@ti.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Mark Fasheh <mfasheh@suse.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Jens Axboe <axboe@kernel.dk> Cc: Asai Thambi S P <asamymuthupa@micron.com> Cc: Selvan Mani <smani@micron.com> Cc: Sam Bradshaw <sbradshaw@micron.com> Acked-by: Jeff Moyer <jmoyer@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Benjamin LaHaise <bcrl@kvack.org> Reviewed-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
41003a7bcf
commit
162934de51
|
@ -627,6 +627,18 @@ static ssize_t write_null(struct file *file, const char __user *buf,
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t aio_read_null(struct kiocb *iocb, const struct iovec *iov,
|
||||||
|
unsigned long nr_segs, loff_t pos)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t aio_write_null(struct kiocb *iocb, const struct iovec *iov,
|
||||||
|
unsigned long nr_segs, loff_t pos)
|
||||||
|
{
|
||||||
|
return iov_length(iov, nr_segs);
|
||||||
|
}
|
||||||
|
|
||||||
static int pipe_to_null(struct pipe_inode_info *info, struct pipe_buffer *buf,
|
static int pipe_to_null(struct pipe_inode_info *info, struct pipe_buffer *buf,
|
||||||
struct splice_desc *sd)
|
struct splice_desc *sd)
|
||||||
{
|
{
|
||||||
|
@ -670,6 +682,24 @@ static ssize_t read_zero(struct file *file, char __user *buf,
|
||||||
return written ? written : -EFAULT;
|
return written ? written : -EFAULT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t aio_read_zero(struct kiocb *iocb, const struct iovec *iov,
|
||||||
|
unsigned long nr_segs, loff_t pos)
|
||||||
|
{
|
||||||
|
size_t written = 0;
|
||||||
|
unsigned long i;
|
||||||
|
ssize_t ret;
|
||||||
|
|
||||||
|
for (i = 0; i < nr_segs; i++) {
|
||||||
|
ret = read_zero(iocb->ki_filp, iov[i].iov_base, iov[i].iov_len,
|
||||||
|
&pos);
|
||||||
|
if (ret < 0)
|
||||||
|
break;
|
||||||
|
written += ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
return written ? written : -EFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
static int mmap_zero(struct file *file, struct vm_area_struct *vma)
|
static int mmap_zero(struct file *file, struct vm_area_struct *vma)
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_MMU
|
#ifndef CONFIG_MMU
|
||||||
|
@ -738,6 +768,7 @@ static int open_port(struct inode *inode, struct file *filp)
|
||||||
#define full_lseek null_lseek
|
#define full_lseek null_lseek
|
||||||
#define write_zero write_null
|
#define write_zero write_null
|
||||||
#define read_full read_zero
|
#define read_full read_zero
|
||||||
|
#define aio_write_zero aio_write_null
|
||||||
#define open_mem open_port
|
#define open_mem open_port
|
||||||
#define open_kmem open_mem
|
#define open_kmem open_mem
|
||||||
#define open_oldmem open_mem
|
#define open_oldmem open_mem
|
||||||
|
@ -766,6 +797,8 @@ static const struct file_operations null_fops = {
|
||||||
.llseek = null_lseek,
|
.llseek = null_lseek,
|
||||||
.read = read_null,
|
.read = read_null,
|
||||||
.write = write_null,
|
.write = write_null,
|
||||||
|
.aio_read = aio_read_null,
|
||||||
|
.aio_write = aio_write_null,
|
||||||
.splice_write = splice_write_null,
|
.splice_write = splice_write_null,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -782,6 +815,8 @@ static const struct file_operations zero_fops = {
|
||||||
.llseek = zero_lseek,
|
.llseek = zero_lseek,
|
||||||
.read = read_zero,
|
.read = read_zero,
|
||||||
.write = write_zero,
|
.write = write_zero,
|
||||||
|
.aio_read = aio_read_zero,
|
||||||
|
.aio_write = aio_write_zero,
|
||||||
.mmap = mmap_zero,
|
.mmap = mmap_zero,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue