Example #1
0
asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
{
	struct file *file;
	ssize_t ret = -EBADF;
	int fput_needed;

	file = fget_light(fd, &fput_needed);
	if (file) {
		loff_t pos = file_pos_read(file);
		trace_fs_read(fd, count);
		ret = vfs_read(file, buf, count, &pos);
#ifdef CONFIG_LTT_FACILITY_FS_DATA
		if(ret > 0) {
			lttng_sequence_fs_data_read_data lttng_data;
			lttng_data.len = min(LTT_LOG_RW_SIZE, ret);
			lttng_data.array = buf;
			trace_fs_data_read(fd, count, &lttng_data);
		}
#endif //CONFIG_LTT_FACILITY_FS_DATA
		file_pos_write(file, pos);
		fput_light(file, fput_needed);
	}

	return ret;
}
Example #2
0
SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
{
	struct file *file;
	ssize_t ret = -EBADF;
	int fput_needed;

	file = fget_light(fd, &fput_needed);
	if (file) {
		loff_t pos = file_pos_read(file);
		ret = vfs_read(file, buf, count, &pos);
		trace_fs_read(fd, buf, count, ret);
		file_pos_write(file, pos);
		fput_light(file, fput_needed);
	}

	return ret;
}
Example #3
0
asmlinkage ssize_t
sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen)
{
	struct file *file;
	ssize_t ret = -EBADF;
	int fput_needed;

	file = fget_light(fd, &fput_needed);
	if (file) {
		loff_t pos = file_pos_read(file);
		trace_fs_read(fd, vlen);
		ret = vfs_readv(file, vec, vlen, &pos);
		file_pos_write(file, pos);
		fput_light(file, fput_needed);
	}

	if (ret > 0)
		current->rchar += ret;
	current->syscr++;
	return ret;
}
Example #4
0
asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf,
			     size_t count, loff_t pos)
{
	struct file *file;
	ssize_t ret = -EBADF;
	int fput_needed;

	if (pos < 0)
		return -EINVAL;

	file = fget_light(fd, &fput_needed);
	if (file) {
		ret = -ESPIPE;
		if (file->f_mode & FMODE_PREAD) {
			trace_fs_read(fd, count);
			ret = vfs_read(file, buf, count, &pos);
		}

		fput_light(file, fput_needed);
	}

	return ret;
}