Commit a689b938 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'block-2023-01-06' of git://git.kernel.dk/linux

Pull block fixes from Jens Axboe:
 "The big change here is obviously the revert of the pktcdvd driver
  removal. Outside of that, just minor tweaks. In detail:

   - Re-instate the pktcdvd driver, which necessitates adding back
     bio_copy_data_iter() and the fops->devnode() hook for now (me)

   - Fix for splitting of a bio marked as NOWAIT, causing either nowait
     reads or writes to error with EAGAIN even if parts of the IO
     completed (me)

   - Fix for ublk, punting management commands to io-wq as they can all
     easily block for extended periods of time (Ming)

   - Removal of SRCU dependency for the block layer (Paul)"

* tag 'block-2023-01-06' of git://git.kernel.dk/linux:
  block: Remove "select SRCU"
  Revert "pktcdvd: remove driver."
  Revert "block: remove devnode callback from struct block_device_operations"
  Revert "block: bio_copy_data_iter"
  ublk: honor IO_URING_F_NONBLOCK for handling control command
  block: don't allow splitting of a REQ_NOWAIT bio
  block: handle bio_split_to_limits() NULL return
parents ef1a4a77 b2b50d57
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
What:           /sys/kernel/debug/pktcdvd/pktcdvd[0-7]
Date:           Oct. 2006
KernelVersion:  2.6.20
Contact:        Thomas Maier <balagi@justmail.de>
Description:

The pktcdvd module (packet writing driver) creates
these files in debugfs:

/sys/kernel/debug/pktcdvd/pktcdvd[0-7]/

    ====            ====== ====================================
    info            0444   Lots of driver statistics and infos.
    ====            ====== ====================================

Example::

    cat /sys/kernel/debug/pktcdvd/pktcdvd0/info
+97 −0
Original line number Diff line number Diff line
sysfs interface
---------------
The pktcdvd module (packet writing driver) creates the following files in the
sysfs: (<devid> is in the format major:minor)

What:		/sys/class/pktcdvd/add
What:		/sys/class/pktcdvd/remove
What:		/sys/class/pktcdvd/device_map
Date:		Oct. 2006
KernelVersion:	2.6.20
Contact:	Thomas Maier <balagi@justmail.de>
Description:

		==========	==============================================
		add		(WO) Write a block device id (major:minor) to
				create a new pktcdvd device and map it to the
				block device.

		remove		(WO) Write the pktcdvd device id (major:minor)
				to remove the pktcdvd device.

		device_map	(RO) Shows the device mapping in format:
				pktcdvd[0-7] <pktdevid> <blkdevid>
		==========	==============================================


What:		/sys/class/pktcdvd/pktcdvd[0-7]/dev
What:		/sys/class/pktcdvd/pktcdvd[0-7]/uevent
Date:		Oct. 2006
KernelVersion:	2.6.20
Contact:	Thomas Maier <balagi@justmail.de>
Description:
		dev:	(RO) Device id

		uevent:	(WO) To send a uevent


What:		/sys/class/pktcdvd/pktcdvd[0-7]/stat/packets_started
What:		/sys/class/pktcdvd/pktcdvd[0-7]/stat/packets_finished
What:		/sys/class/pktcdvd/pktcdvd[0-7]/stat/kb_written
What:		/sys/class/pktcdvd/pktcdvd[0-7]/stat/kb_read
What:		/sys/class/pktcdvd/pktcdvd[0-7]/stat/kb_read_gather
What:		/sys/class/pktcdvd/pktcdvd[0-7]/stat/reset
Date:		Oct. 2006
KernelVersion:	2.6.20
Contact:	Thomas Maier <balagi@justmail.de>
Description:
		packets_started:	(RO) Number of started packets.

		packets_finished:	(RO) Number of finished packets.

		kb_written:		(RO) kBytes written.

		kb_read:		(RO) kBytes read.

		kb_read_gather:		(RO) kBytes read to fill write packets.

		reset:			(WO) Write any value to it to reset
					pktcdvd device statistic values, like
					bytes read/written.


What:		/sys/class/pktcdvd/pktcdvd[0-7]/write_queue/size
What:		/sys/class/pktcdvd/pktcdvd[0-7]/write_queue/congestion_off
What:		/sys/class/pktcdvd/pktcdvd[0-7]/write_queue/congestion_on
Date:		Oct. 2006
KernelVersion:	2.6.20
Contact:	Thomas Maier <balagi@justmail.de>
Description:
		==============	================================================
		size		(RO) Contains the size of the bio write queue.

		congestion_off	(RW) If bio write queue size is below this mark,
				accept new bio requests from the block layer.

		congestion_on	(RW) If bio write queue size is higher as this
				mark, do no longer accept bio write requests
				from the block layer and wait till the pktcdvd
				device has processed enough bio's so that bio
				write queue size is below congestion off mark.
				A value of <= 0 disables congestion control.
		==============	================================================


Example:
--------
To use the pktcdvd sysfs interface directly, you can do::

    # create a new pktcdvd device mapped to /dev/hdc
    echo "22:0" >/sys/class/pktcdvd/add
    cat /sys/class/pktcdvd/device_map
    # assuming device pktcdvd0 was created, look at stat's
    cat /sys/class/pktcdvd/pktcdvd0/stat/kb_written
    # print the device id of the mapped block device
    fgrep pktcdvd0 /sys/class/pktcdvd/device_map
    # remove device, using pktcdvd0 device id   253:0
    echo "253:0" >/sys/class/pktcdvd/remove
+7 −0
Original line number Diff line number Diff line
@@ -16610,6 +16610,13 @@ S: Supported
F:	Documentation/devicetree/bindings/input/pine64,pinephone-keyboard.yaml
F:	drivers/input/keyboard/pinephone-keyboard.c
PKTCDVD DRIVER
M:	linux-block@vger.kernel.org
S:	Orphan
F:	drivers/block/pktcdvd.c
F:	include/linux/pktcdvd.h
F:	include/uapi/linux/pktcdvd.h
PLANTOWER PMS7003 AIR POLLUTION SENSOR DRIVER
M:	Tomasz Duszynski <tduszyns@gmail.com>
S:	Maintained
+0 −1
Original line number Diff line number Diff line
@@ -6,7 +6,6 @@ menuconfig BLOCK
       bool "Enable the block layer" if EXPERT
       default y
       select SBITMAP
       select SRCU
       help
	 Provide block layer support for the kernel.

+22 −15
Original line number Diff line number Diff line
@@ -1401,6 +1401,27 @@ void __bio_advance(struct bio *bio, unsigned bytes)
}
EXPORT_SYMBOL(__bio_advance);

void bio_copy_data_iter(struct bio *dst, struct bvec_iter *dst_iter,
			struct bio *src, struct bvec_iter *src_iter)
{
	while (src_iter->bi_size && dst_iter->bi_size) {
		struct bio_vec src_bv = bio_iter_iovec(src, *src_iter);
		struct bio_vec dst_bv = bio_iter_iovec(dst, *dst_iter);
		unsigned int bytes = min(src_bv.bv_len, dst_bv.bv_len);
		void *src_buf = bvec_kmap_local(&src_bv);
		void *dst_buf = bvec_kmap_local(&dst_bv);

		memcpy(dst_buf, src_buf, bytes);

		kunmap_local(dst_buf);
		kunmap_local(src_buf);

		bio_advance_iter_single(src, src_iter, bytes);
		bio_advance_iter_single(dst, dst_iter, bytes);
	}
}
EXPORT_SYMBOL(bio_copy_data_iter);

/**
 * bio_copy_data - copy contents of data buffers from one bio to another
 * @src: source bio
@@ -1414,21 +1435,7 @@ void bio_copy_data(struct bio *dst, struct bio *src)
	struct bvec_iter src_iter = src->bi_iter;
	struct bvec_iter dst_iter = dst->bi_iter;

	while (src_iter.bi_size && dst_iter.bi_size) {
		struct bio_vec src_bv = bio_iter_iovec(src, src_iter);
		struct bio_vec dst_bv = bio_iter_iovec(dst, dst_iter);
		unsigned int bytes = min(src_bv.bv_len, dst_bv.bv_len);
		void *src_buf = bvec_kmap_local(&src_bv);
		void *dst_buf = bvec_kmap_local(&dst_bv);

		memcpy(dst_buf, src_buf, bytes);

		kunmap_local(dst_buf);
		kunmap_local(src_buf);

		bio_advance_iter_single(src, &src_iter, bytes);
		bio_advance_iter_single(dst, &dst_iter, bytes);
	}
	bio_copy_data_iter(dst, &dst_iter, src, &src_iter);
}
EXPORT_SYMBOL(bio_copy_data);

Loading