Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1dff81f2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-2.6.29' of git://git.kernel.dk/linux-2.6-block

* 'for-2.6.29' of git://git.kernel.dk/linux-2.6-block: (43 commits)
  bio: get rid of bio_vec clearing
  bounce: don't rely on a zeroed bio_vec list
  cciss: simplify parameters to deregister_disk function
  cfq-iosched: fix race between exiting queue and exiting task
  loop: Do not call loop_unplug for not configured loop device.
  loop: Flush possible running bios when loop device is released.
  alpha: remove dead BIO_VMERGE_BOUNDARY
  Get rid of CONFIG_LSF
  block: make blk_softirq_init() static
  block: use min_not_zero in blk_queue_stack_limits
  block: add one-hit cache for disk partition lookup
  cfq-iosched: remove limit of dispatch depth of max 4 times quantum
  nbd: tell the block layer that it is not a rotational device
  block: get rid of elevator_t typedef
  aio: make the lookup_ioctx() lockless
  bio: add support for inlining a number of bio_vecs inside the bio
  bio: allow individual slabs in the bio_set
  bio: move the slab pointer inside the bio_set
  bio: only mempool back the largest bio_vec slab cache
  block: don't use plugging on SSD devices
  ...
parents 179475a3 d3f76110
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -914,7 +914,7 @@ I/O scheduler, a.k.a. elevator, is implemented in two layers. Generic dispatch
queue and specific I/O schedulers.  Unless stated otherwise, elevator is used
to refer to both parts and I/O scheduler to specific I/O schedulers.

Block layer implements generic dispatch queue in ll_rw_blk.c and elevator.c.
Block layer implements generic dispatch queue in block/*.c.
The generic dispatch queue is responsible for properly ordering barrier
requests, requeueing, handling non-fs requests and all other subtleties.

@@ -926,8 +926,8 @@ be built inside the kernel. Each queue can choose different one and can also
change to another one dynamically.

A block layer call to the i/o scheduler follows the convention elv_xxx(). This
calls elevator_xxx_fn in the elevator switch (drivers/block/elevator.c). Oh,
xxx and xxx might not match exactly, but use your imagination. If an elevator
calls elevator_xxx_fn in the elevator switch (block/elevator.c). Oh, xxx
and xxx might not match exactly, but use your imagination. If an elevator
doesn't implement a function, the switch does nothing or some minimal house
keeping work.

+0 −3
Original line number Diff line number Diff line
@@ -96,9 +96,6 @@ static inline dma_addr_t __deprecated isa_page_to_bus(struct page *page)
	return page_to_phys(page);
}

/* This depends on working iommu.  */
#define BIO_VMERGE_BOUNDARY	(alpha_mv.mv_pci_tbi ? PAGE_SIZE : 0)

/* Maximum PIO space address supported?  */
#define IO_SPACE_LIMIT 0xffff

+2 −2
Original line number Diff line number Diff line
@@ -263,7 +263,7 @@ int s390_enable_sie(void)
	/* lets check if we are allowed to replace the mm */
	task_lock(tsk);
	if (!tsk->mm || atomic_read(&tsk->mm->mm_users) > 1 ||
	    tsk->mm != tsk->active_mm || tsk->mm->ioctx_list) {
	    tsk->mm != tsk->active_mm || !hlist_empty(&tsk->mm->ioctx_list)) {
		task_unlock(tsk);
		return -EINVAL;
	}
@@ -279,7 +279,7 @@ int s390_enable_sie(void)
	/* Now lets check again if something happened */
	task_lock(tsk);
	if (!tsk->mm || atomic_read(&tsk->mm->mm_users) > 1 ||
	    tsk->mm != tsk->active_mm || tsk->mm->ioctx_list) {
	    tsk->mm != tsk->active_mm || !hlist_empty(&tsk->mm->ioctx_list)) {
		mmput(mm);
		task_unlock(tsk);
		return -EINVAL;
+5 −18
Original line number Diff line number Diff line
@@ -24,21 +24,17 @@ menuconfig BLOCK
if BLOCK

config LBD
	bool "Support for Large Block Devices"
	bool "Support for large block devices and files"
	depends on !64BIT
	help
	  Enable block devices of size 2TB and larger.
	  Enable block devices or files of size 2TB and larger.

	  This option is required to support the full capacity of large
	  (2TB+) block devices, including RAID, disk, Network Block Device,
	  Logical Volume Manager (LVM) and loopback.
	
	  For example, RAID devices are frequently bigger than the capacity
	  of the largest individual hard drive.

	  This option is not required if you have individual disk drives
	  which total 2TB+ and you are not aggregating the capacity into
	  a large block device (e.g. using RAID or LVM).
	  This option also enables support for single files larger than
	  2TB.

	  If unsure, say N.

@@ -58,15 +54,6 @@ config BLK_DEV_IO_TRACE

	  If unsure, say N.

config LSF
	bool "Support for Large Single Files"
	depends on !64BIT
	help
	  Say Y here if you want to be able to handle very large files (2TB
	  and larger), otherwise say N.

	  If unsure, say Y.

config BLK_DEV_BSG
	bool "Block layer SG support v4 (EXPERIMENTAL)"
	depends on EXPERIMENTAL
+5 −5
Original line number Diff line number Diff line
@@ -1339,12 +1339,12 @@ static int as_may_queue(struct request_queue *q, int rw)
	return ret;
}

static void as_exit_queue(elevator_t *e)
static void as_exit_queue(struct elevator_queue *e)
{
	struct as_data *ad = e->elevator_data;

	del_timer_sync(&ad->antic_timer);
	kblockd_flush_work(&ad->antic_work);
	cancel_work_sync(&ad->antic_work);

	BUG_ON(!list_empty(&ad->fifo_list[REQ_SYNC]));
	BUG_ON(!list_empty(&ad->fifo_list[REQ_ASYNC]));
@@ -1409,7 +1409,7 @@ as_var_store(unsigned long *var, const char *page, size_t count)
	return count;
}

static ssize_t est_time_show(elevator_t *e, char *page)
static ssize_t est_time_show(struct elevator_queue *e, char *page)
{
	struct as_data *ad = e->elevator_data;
	int pos = 0;
@@ -1427,7 +1427,7 @@ static ssize_t est_time_show(elevator_t *e, char *page)
}

#define SHOW_FUNCTION(__FUNC, __VAR)				\
static ssize_t __FUNC(elevator_t *e, char *page)		\
static ssize_t __FUNC(struct elevator_queue *e, char *page)	\
{								\
	struct as_data *ad = e->elevator_data;			\
	return as_var_show(jiffies_to_msecs((__VAR)), (page));	\
@@ -1440,7 +1440,7 @@ SHOW_FUNCTION(as_write_batch_expire_show, ad->batch_expire[REQ_ASYNC]);
#undef SHOW_FUNCTION

#define STORE_FUNCTION(__FUNC, __PTR, MIN, MAX)				\
static ssize_t __FUNC(elevator_t *e, const char *page, size_t count)	\
static ssize_t __FUNC(struct elevator_queue *e, const char *page, size_t count)	\
{									\
	struct as_data *ad = e->elevator_data;				\
	int ret = as_var_store(__PTR, (page), count);			\
Loading