Commit 9637d517 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'for-linus-20190715' of git://git.kernel.dk/linux-block

Pull more block updates from Jens Axboe:
 "A later pull request with some followup items. I had some vacation
  coming up to the merge window, so certain things items were delayed a
  bit. This pull request also contains fixes that came in within the
  last few days of the merge window, which I didn't want to push right
  before sending you a pull request.

  This contains:

   - NVMe pull request, mostly fixes, but also a few minor items on the
     feature side that were timing constrained (Christoph et al)

   - Report zones fixes (Damien)

   - Removal of dead code (Damien)

   - Turn on cgroup psi memstall (Josef)

   - block cgroup MAINTAINERS entry (Konstantin)

   - Flush init fix (Josef)

   - blk-throttle low iops timing fix (Konstantin)

   - nbd resize fixes (Mike)

   - nbd 0 blocksize crash fix (Xiubo)

   - block integrity error leak fix (Wenwen)

   - blk-cgroup writeback and priority inheritance fixes (Tejun)"

* tag 'for-linus-20190715' of git://git.kernel.dk/linux-block: (42 commits)
  MAINTAINERS: add entry for block io cgroup
  null_blk: fixup ->report_zones() for !CONFIG_BLK_DEV_ZONED
  block: Limit zone array allocation size
  sd_zbc: Fix report zones buffer allocation
  block: Kill gfp_t argument of blkdev_report_zones()
  block: Allow mapping of vmalloc-ed buffers
  block/bio-integrity: fix a memory leak bug
  nvme: fix NULL deref for fabrics options
  nbd: add netlink reconfigure resize support
  nbd: fix crash when the blksize is zero
  block: Disable write plugging for zoned block devices
  block: Fix elevator name declaration
  block: Remove unused definitions
  nvme: fix regression upon hot device removal and insertion
  blk-throttle: fix zero wait time for iops throttled group
  block: Fix potential overflow in blk_report_zones()
  blkcg: implement REQ_CGROUP_PUNT
  blkcg, writeback: Implement wbc_blkcg_css()
  blkcg, writeback: Add wbc->no_cgroup_owner
  blkcg, writeback: Rename wbc_account_io() to wbc_account_cgroup_owner()
  ...
parents 273cbf61 787c79d6
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -2124,7 +2124,7 @@ following two functions.
	a queue (device) has been associated with the bio and
	a queue (device) has been associated with the bio and
	before submission.
	before submission.


  wbc_account_io(@wbc, @page, @bytes)
  wbc_account_cgroup_owner(@wbc, @page, @bytes)
	Should be called for each data segment being written out.
	Should be called for each data segment being written out.
	While this function doesn't care exactly when it's called
	While this function doesn't care exactly when it's called
	during the writeback session, it's the easiest and most
	during the writeback session, it's the easiest and most
+0 −5
Original line number Original line Diff line number Diff line
@@ -843,11 +843,6 @@ elevator_latter_req_fn These return the request before or after the


elevator_completed_req_fn	called when a request is completed.
elevator_completed_req_fn	called when a request is completed.


elevator_may_queue_fn		returns true if the scheduler wants to allow the
				current context to queue a new request even if
				it is over the queue limit. This must be used
				very carefully!!

elevator_set_req_fn
elevator_set_req_fn
elevator_put_req_fn		Must be used to allocate and free any elevator
elevator_put_req_fn		Must be used to allocate and free any elevator
				specific storage for a request.
				specific storage for a request.
+13 −0
Original line number Original line Diff line number Diff line
@@ -4183,6 +4183,19 @@ S: Maintained
F:	mm/memcontrol.c
F:	mm/memcontrol.c
F:	mm/swap_cgroup.c
F:	mm/swap_cgroup.c


CONTROL GROUP - BLOCK IO CONTROLLER (BLKIO)
M:	Tejun Heo <tj@kernel.org>
M:	Jens Axboe <axboe@kernel.dk>
L:	cgroups@vger.kernel.org
L:	linux-block@vger.kernel.org
T:	git git://git.kernel.dk/linux-block
F:	Documentation/cgroup-v1/blkio-controller.rst
F:	block/blk-cgroup.c
F:	include/linux/blk-cgroup.h
F:	block/blk-throttle.c
F:	block/blk-iolatency.c
F:	block/bfq-cgroup.c

CORETEMP HARDWARE MONITORING DRIVER
CORETEMP HARDWARE MONITORING DRIVER
M:	Fenghua Yu <fenghua.yu@intel.com>
M:	Fenghua Yu <fenghua.yu@intel.com>
L:	linux-hwmon@vger.kernel.org
L:	linux-hwmon@vger.kernel.org
+6 −2
Original line number Original line Diff line number Diff line
@@ -276,8 +276,12 @@ bool bio_integrity_prep(struct bio *bio)
		ret = bio_integrity_add_page(bio, virt_to_page(buf),
		ret = bio_integrity_add_page(bio, virt_to_page(buf),
					     bytes, offset);
					     bytes, offset);


		if (ret == 0)
		if (ret == 0) {
			return false;
			printk(KERN_ERR "could not attach integrity payload\n");
			kfree(buf);
			status = BLK_STS_RESOURCE;
			goto err_end_io;
		}


		if (ret < bytes)
		if (ret < bytes)
			break;
			break;
+27 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@
#include <linux/workqueue.h>
#include <linux/workqueue.h>
#include <linux/cgroup.h>
#include <linux/cgroup.h>
#include <linux/blk-cgroup.h>
#include <linux/blk-cgroup.h>
#include <linux/highmem.h>


#include <trace/events/block.h>
#include <trace/events/block.h>
#include "blk.h"
#include "blk.h"
@@ -1441,8 +1442,22 @@ void bio_unmap_user(struct bio *bio)
	bio_put(bio);
	bio_put(bio);
}
}


static void bio_invalidate_vmalloc_pages(struct bio *bio)
{
#ifdef ARCH_HAS_FLUSH_KERNEL_DCACHE_PAGE
	if (bio->bi_private && !op_is_write(bio_op(bio))) {
		unsigned long i, len = 0;

		for (i = 0; i < bio->bi_vcnt; i++)
			len += bio->bi_io_vec[i].bv_len;
		invalidate_kernel_vmap_range(bio->bi_private, len);
	}
#endif
}

static void bio_map_kern_endio(struct bio *bio)
static void bio_map_kern_endio(struct bio *bio)
{
{
	bio_invalidate_vmalloc_pages(bio);
	bio_put(bio);
	bio_put(bio);
}
}


@@ -1463,6 +1478,8 @@ struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len,
	unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
	unsigned long end = (kaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
	unsigned long start = kaddr >> PAGE_SHIFT;
	unsigned long start = kaddr >> PAGE_SHIFT;
	const int nr_pages = end - start;
	const int nr_pages = end - start;
	bool is_vmalloc = is_vmalloc_addr(data);
	struct page *page;
	int offset, i;
	int offset, i;
	struct bio *bio;
	struct bio *bio;


@@ -1470,6 +1487,11 @@ struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len,
	if (!bio)
	if (!bio)
		return ERR_PTR(-ENOMEM);
		return ERR_PTR(-ENOMEM);


	if (is_vmalloc) {
		flush_kernel_vmap_range(data, len);
		bio->bi_private = data;
	}

	offset = offset_in_page(kaddr);
	offset = offset_in_page(kaddr);
	for (i = 0; i < nr_pages; i++) {
	for (i = 0; i < nr_pages; i++) {
		unsigned int bytes = PAGE_SIZE - offset;
		unsigned int bytes = PAGE_SIZE - offset;
@@ -1480,7 +1502,11 @@ struct bio *bio_map_kern(struct request_queue *q, void *data, unsigned int len,
		if (bytes > len)
		if (bytes > len)
			bytes = len;
			bytes = len;


		if (bio_add_pc_page(q, bio, virt_to_page(data), bytes,
		if (!is_vmalloc)
			page = virt_to_page(data);
		else
			page = vmalloc_to_page(data);
		if (bio_add_pc_page(q, bio, page, bytes,
				    offset) < bytes) {
				    offset) < bytes) {
			/* we don't support partial mappings */
			/* we don't support partial mappings */
			bio_put(bio);
			bio_put(bio);
Loading