Commit f1301897 authored by Andrey Filippov's avatar Andrey Filippov
Browse files

added more files for debugging

parent 296d54dd
Loading
Loading
Loading
Loading

src/block/bio.c

0 → 100644
+2098 −0

File added.

Preview size limit exceeded, changes collapsed.

+2168 −0

File added.

Preview size limit exceeded, changes collapsed.

+16 −12
Original line number Diff line number Diff line
@@ -174,7 +174,7 @@ static unsigned int dio_bio_write_op(struct kiocb *iocb)
	return op;
}

#define DIO_INLINE_BIO_VECS 4
#define DIO_INLINE_BIO_VECS BIO_MAX_PAGES // 4

static void blkdev_bio_end_io_simple(struct bio *bio)
{
@@ -197,11 +197,13 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
	ssize_t ret;
	blk_qc_t qc;
	int i;

	pr_debug("pos = %lld, nr_pages = %d, type=%d, iov_offset=0x%x, count=%d, iter->iov->iov_base=%p, iter->iov->iov_len=%d, nr_segs = %ld", \
			pos, nr_pages, iter->type, iter->iov_offset, iter->count, iter->iov->iov_base, iter->iov->iov_len, iter->nr_segs); // pos - in file
	if ((pos | iov_iter_alignment(iter)) &
	    (bdev_logical_block_size(bdev) - 1))
	    (bdev_logical_block_size(bdev) - 1)) {
		pr_debug("pos = %lld, iov_iter_alignment(iter) = %ld, nr_pages = %d, bdev_logical_block_size(bdev) = %d", pos, iov_iter_alignment(iter), nr_pages, bdev_logical_block_size(bdev));
		return -EINVAL;

	}
	if (nr_pages <= DIO_INLINE_BIO_VECS)
		vecs = inline_vecs;
	else {
@@ -210,7 +212,7 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
		if (!vecs)
			return -ENOMEM;
	}

	pr_debug("DIO_INLINE_BIO_VECS = %d, nr_pages = %d", DIO_INLINE_BIO_VECS, nr_pages);
	bio_init(&bio, vecs, nr_pages);
	bio_set_dev(&bio, bdev);
	bio.bi_iter.bi_sector = pos >> 9;
@@ -218,12 +220,12 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
	bio.bi_private = current;
	bio.bi_end_io = blkdev_bio_end_io_simple;
	bio.bi_ioprio = iocb->ki_ioprio;

	ret = bio_iov_iter_get_pages(&bio, iter);
	pr_debug("ret = %d", ret); // -14
	if (unlikely(ret))
		goto out;
	ret = bio.bi_iter.bi_size;

// Does nothing as CONFIG_TASK_IO_ACCOUNTING in not defined
	if (iov_iter_rw(iter) == READ) {
		bio.bi_opf = REQ_OP_READ;
		if (iter_is_iovec(iter))
@@ -243,12 +245,13 @@ __blkdev_direct_IO_simple(struct kiocb *iocb, struct iov_iter *iter,
			io_schedule();
	}
	__set_current_state(TASK_RUNNING);

	pr_debug("after __set_current_state(TASK_RUNNING)");
	bio_for_each_segment_all(bvec, &bio, i) {
		if (should_dirty && !PageCompound(bvec->bv_page))
			set_page_dirty_lock(bvec->bv_page);
		put_page(bvec->bv_page);
	}
	pr_debug("bio.bi_status = %d", bio.bi_status);

	if (unlikely(bio.bi_status))
		ret = blk_status_to_errno(bio.bi_status);
@@ -332,11 +335,12 @@ __blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter, int nr_pages)
	loff_t pos = iocb->ki_pos;
	blk_qc_t qc = BLK_QC_T_NONE;
	int ret = 0;

	pr_debug("pos = %lld, nr_pages = %d", pos, nr_pages);
	if ((pos | iov_iter_alignment(iter)) &
	    (bdev_logical_block_size(bdev) - 1))
	    (bdev_logical_block_size(bdev) - 1)) {
		pr_debug("pos = %lld, iov_iter_alignment(iter) = %ld, nr_pages = %d, bdev_logical_block_size(bdev) = %d", pos, iov_iter_alignment(iter), nr_pages, bdev_logical_block_size(bdev));
		return -EINVAL;

	}
	bio = bio_alloc_bioset(GFP_KERNEL, nr_pages, &blkdev_dio_pool);
	bio_get(bio); /* extra ref for the completion handler */

@@ -424,8 +428,8 @@ static ssize_t
blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
{
	int nr_pages;

	nr_pages = iov_iter_npages(iter, BIO_MAX_PAGES + 1);
	pr_debug("nr_pages = %d, is_sync_kiocb(iocb) = %d", nr_pages, is_sync_kiocb(iocb));
	if (!nr_pages)
		return 0;
	if (is_sync_kiocb(iocb) && nr_pages <= BIO_MAX_PAGES)
+13 −4
Original line number Diff line number Diff line
@@ -466,7 +466,9 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t
	struct kiocb kiocb;
	struct iov_iter iter;
	ssize_t ret;

	if (!strncmp(filp->f_path.dentry->d_name.name, "sda2", 4)) {
		pr_debug("pos=%llu, len=%d, buf=0x%p", *ppos, len, buf); // pr_debug("pos=%llu, len=%d, buf=0x%p, data=0x%llx", *ppos, len, buf, ((loff_t*) (buf))[0]);
	}
	init_sync_kiocb(&kiocb, filp);
	kiocb.ki_pos = *ppos;
	iov_iter_init(&iter, WRITE, &iov, 1, len);
@@ -481,6 +483,10 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t
ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
		    loff_t *pos)
{
	if (!strncmp(file->f_path.dentry->d_name.name, "sda2", 4)) {
		pr_debug("pos=%llu, count=%d, p=0x%p", *pos, count, p); // 			pr_debug("pos=%llu, count=%d, p=0x%p, data=0x%llx", *pos, count, p, ((loff_t*) (p))[0]);
	}

	if (file->f_op->write)
		return file->f_op->write(file, p, count, pos);
	else if (file->f_op->write_iter)
@@ -661,19 +667,22 @@ SYSCALL_DEFINE4(pwrite64, unsigned int, fd, const char __user *, buf,
{
	return ksys_pwrite64(fd, buf, count, pos);
}

static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
		loff_t *ppos, int type, rwf_t flags)
{
	struct kiocb kiocb;
	ssize_t ret;
	if (!strncmp(filp->f_path.dentry->d_name.name, "sda2", 4)) {
		pr_debug("pos=%llu, flags=0x%x, type=%s", *ppos, flags, type?"WRITE":"READ");
		pr_debug("iov_offset=0x%x, count=%d, iter->iov->iov_base=%p, iter->iov->iov_len=%d, nr_segs = %ld", \
				iter->iov_offset, iter->count, iter->iov->iov_base, iter->iov->iov_len, iter->nr_segs); // pos - in file
//		pr_debug("data=0x%llx", ((loff_t*) (iter->iov->iov_base))[0]);
	}
	init_sync_kiocb(&kiocb, filp);
	ret = kiocb_set_rw_flags(&kiocb, flags);
	if (ret)
		return ret;
	kiocb.ki_pos = *ppos;

	if (type == READ)
		ret = call_read_iter(filp, &kiocb, iter);
	else

src/lib/iov_iter.c

0 → 100644
+1600 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading