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

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

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

* 'for-linus' of git://git.kernel.dk/linux-2.6-block:
  block: fix blkdev_issue_flush() not detecting and passing EOPNOTSUPP back
  block: fix shadowed variable warning in blk-map.c
  block: remove extern on function definition
  cciss: remove READ_AHEAD define and use block layer defaults
  make cdrom.c:check_for_audio_disc() static
  block/genhd.c: proper externs
  unexport blk_rq_map_user_iov
  unexport blk_{get,put}_queue
  block/genhd.c: cleanups
  proper prototype for blk_dev_init()
  block/blk-tag.c should #include "blk.h"
  Fix DMA access of block device in 64-bit kernel on some non-x86 systems with 4GB or upper 4GB memory
  block: separate out padding from alignment
  block: restore the meaning of rq->data_len to the true data length
  resubmit: cciss: procfs updates to display info about many
  splice: only return -EAGAIN if there's hope of more data
  block: fix kernel-docbook parameters and files
parents 8727e28d cc66b451
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -361,12 +361,14 @@ X!Edrivers/pnp/system.c
  <chapter id="blkdev">
     <title>Block Devices</title>
!Eblock/blk-core.c
!Iblock/blk-core.c
!Eblock/blk-map.c
!Iblock/blk-sysfs.c
!Eblock/blk-settings.c
!Eblock/blk-exec.c
!Eblock/blk-barrier.c
!Eblock/blk-tag.c
!Iblock/blk-tag.c
  </chapter>

  <chapter id="chrdev">
+7 −2
Original line number Diff line number Diff line
@@ -259,8 +259,11 @@ int blk_do_ordered(struct request_queue *q, struct request **rqp)

static void bio_end_empty_barrier(struct bio *bio, int err)
{
	if (err)
	if (err) {
		if (err == -EOPNOTSUPP)
			set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
		clear_bit(BIO_UPTODATE, &bio->bi_flags);
	}

	complete(bio->bi_private);
}
@@ -309,7 +312,9 @@ int blkdev_issue_flush(struct block_device *bdev, sector_t *error_sector)
		*error_sector = bio->bi_sector;

	ret = 0;
	if (!bio_flagged(bio, BIO_UPTODATE))
	if (bio_flagged(bio, BIO_EOPNOTSUPP))
		ret = -EOPNOTSUPP;
	else if (!bio_flagged(bio, BIO_UPTODATE))
		ret = -EIO;

	bio_put(bio);
+3 −4
Original line number Diff line number Diff line
@@ -127,7 +127,6 @@ void rq_init(struct request_queue *q, struct request *rq)
	rq->nr_hw_segments = 0;
	rq->ioprio = 0;
	rq->special = NULL;
	rq->raw_data_len = 0;
	rq->buffer = NULL;
	rq->tag = -1;
	rq->errors = 0;
@@ -135,6 +134,7 @@ void rq_init(struct request_queue *q, struct request *rq)
	rq->cmd_len = 0;
	memset(rq->cmd, 0, sizeof(rq->cmd));
	rq->data_len = 0;
	rq->extra_len = 0;
	rq->sense_len = 0;
	rq->data = NULL;
	rq->sense = NULL;
@@ -424,7 +424,6 @@ void blk_put_queue(struct request_queue *q)
{
	kobject_put(&q->kobj);
}
EXPORT_SYMBOL(blk_put_queue);

void blk_cleanup_queue(struct request_queue *q)
{
@@ -592,7 +591,6 @@ int blk_get_queue(struct request_queue *q)

	return 1;
}
EXPORT_SYMBOL(blk_get_queue);

static inline void blk_free_request(struct request_queue *q, struct request *rq)
{
@@ -1768,6 +1766,7 @@ static inline void __end_request(struct request *rq, int uptodate,

/**
 * blk_rq_bytes - Returns bytes left to complete in the entire request
 * @rq: the request being processed
 **/
unsigned int blk_rq_bytes(struct request *rq)
{
@@ -1780,6 +1779,7 @@ EXPORT_SYMBOL_GPL(blk_rq_bytes);

/**
 * blk_rq_cur_bytes - Returns bytes left to complete in the current segment
 * @rq: the request being processed
 **/
unsigned int blk_rq_cur_bytes(struct request *rq)
{
@@ -2016,7 +2016,6 @@ void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
	rq->hard_cur_sectors = rq->current_nr_sectors;
	rq->hard_nr_sectors = rq->nr_sectors = bio_sectors(bio);
	rq->buffer = bio_data(bio);
	rq->raw_data_len = bio->bi_size;
	rq->data_len = bio->bi_size;

	rq->bio = rq->biotail = bio;
+14 −13
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ int blk_rq_append_bio(struct request_queue *q, struct request *rq,
		rq->biotail->bi_next = bio;
		rq->biotail = bio;

		rq->raw_data_len += bio->bi_size;
		rq->data_len += bio->bi_size;
	}
	return 0;
@@ -44,6 +43,7 @@ static int __blk_rq_map_user(struct request_queue *q, struct request *rq,
			     void __user *ubuf, unsigned int len)
{
	unsigned long uaddr;
	unsigned int alignment;
	struct bio *bio, *orig_bio;
	int reading, ret;

@@ -54,8 +54,8 @@ static int __blk_rq_map_user(struct request_queue *q, struct request *rq,
	 * direct dma. else, set up kernel bounce buffers
	 */
	uaddr = (unsigned long) ubuf;
	if (!(uaddr & queue_dma_alignment(q)) &&
	    !(len & queue_dma_alignment(q)))
	alignment = queue_dma_alignment(q) | q->dma_pad_mask;
	if (!(uaddr & alignment) && !(len & alignment))
		bio = bio_map_user(q, NULL, uaddr, len, reading);
	else
		bio = bio_copy_user(q, uaddr, len, reading);
@@ -142,20 +142,22 @@ int blk_rq_map_user(struct request_queue *q, struct request *rq,

	/*
	 * __blk_rq_map_user() copies the buffers if starting address
	 * or length isn't aligned.  As the copied buffer is always
	 * page aligned, we know that there's enough room for padding.
	 * Extend the last bio and update rq->data_len accordingly.
	 * or length isn't aligned to dma_pad_mask.  As the copied
	 * buffer is always page aligned, we know that there's enough
	 * room for padding.  Extend the last bio and update
	 * rq->data_len accordingly.
	 *
	 * On unmap, bio_uncopy_user() will use unmodified
	 * bio_map_data pointed to by bio->bi_private.
	 */
	if (len & queue_dma_alignment(q)) {
		unsigned int pad_len = (queue_dma_alignment(q) & ~len) + 1;
		struct bio *bio = rq->biotail;
	if (len & q->dma_pad_mask) {
		unsigned int pad_len = (q->dma_pad_mask & ~len) + 1;
		struct bio *tail = rq->biotail;

		bio->bi_io_vec[bio->bi_vcnt - 1].bv_len += pad_len;
		bio->bi_size += pad_len;
		rq->data_len += pad_len;
		tail->bi_io_vec[tail->bi_vcnt - 1].bv_len += pad_len;
		tail->bi_size += pad_len;

		rq->extra_len += pad_len;
	}

	rq->buffer = rq->data = NULL;
@@ -215,7 +217,6 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq,
	rq->buffer = rq->data = NULL;
	return 0;
}
EXPORT_SYMBOL(blk_rq_map_user_iov);

/**
 * blk_rq_unmap_user - unmap a request with user data
+1 −1
Original line number Diff line number Diff line
@@ -231,7 +231,7 @@ int blk_rq_map_sg(struct request_queue *q, struct request *rq,
			    ((unsigned long)q->dma_drain_buffer) &
			    (PAGE_SIZE - 1));
		nsegs++;
		rq->data_len += q->dma_drain_size;
		rq->extra_len += q->dma_drain_size;
	}

	if (sg)
Loading