Merge branch 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block
* 'for-2.6.36' of git://git.kernel.dk/linux-2.6-block: (149 commits) block: make sure that REQ_* types are seen even with CONFIG_BLOCK=n xen-blkfront: fix missing out label blkdev: fix blkdev_issue_zeroout return value block: update request stacking methods to support discards block: fix missing export of blk_types.h writeback: fix bad _bh spinlock nesting drbd: revert "delay probes", feature is being re-implemented differently drbd: Initialize all members of sync_conf to their defaults [Bugz 315] drbd: Disable delay probes for the upcomming release writeback: cleanup bdi_register writeback: add new tracepoints writeback: remove unnecessary init_timer call writeback: optimize periodic bdi thread wakeups writeback: prevent unnecessary bdi threads wakeups writeback: move bdi threads exiting logic to the forker thread writeback: restructure bdi forker loop a little writeback: move last_active to bdi writeback: do not remove bdi from bdi_list writeback: simplify bdi code a little writeback: do not lose wake-ups in bdi threads ... Fixed up pretty trivial conflicts in drivers/block/virtio_blk.c and drivers/scsi/scsi_error.c as per Jens.
This commit is contained in:
@@ -53,6 +53,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/i2o.h>
|
||||
#include <linux/smp_lock.h>
|
||||
|
||||
#include <linux/mempool.h>
|
||||
|
||||
@@ -577,6 +578,7 @@ static int i2o_block_open(struct block_device *bdev, fmode_t mode)
|
||||
if (!dev->i2o_dev)
|
||||
return -ENODEV;
|
||||
|
||||
lock_kernel();
|
||||
if (dev->power > 0x1f)
|
||||
i2o_block_device_power(dev, 0x02);
|
||||
|
||||
@@ -585,6 +587,7 @@ static int i2o_block_open(struct block_device *bdev, fmode_t mode)
|
||||
i2o_block_device_lock(dev->i2o_dev, -1);
|
||||
|
||||
osm_debug("Ready.\n");
|
||||
unlock_kernel();
|
||||
|
||||
return 0;
|
||||
};
|
||||
@@ -615,6 +618,7 @@ static int i2o_block_release(struct gendisk *disk, fmode_t mode)
|
||||
if (!dev->i2o_dev)
|
||||
return 0;
|
||||
|
||||
lock_kernel();
|
||||
i2o_block_device_flush(dev->i2o_dev);
|
||||
|
||||
i2o_block_device_unlock(dev->i2o_dev, -1);
|
||||
@@ -625,6 +629,7 @@ static int i2o_block_release(struct gendisk *disk, fmode_t mode)
|
||||
operation = 0x24;
|
||||
|
||||
i2o_block_device_power(dev, operation);
|
||||
unlock_kernel();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -652,30 +657,40 @@ static int i2o_block_ioctl(struct block_device *bdev, fmode_t mode,
|
||||
{
|
||||
struct gendisk *disk = bdev->bd_disk;
|
||||
struct i2o_block_device *dev = disk->private_data;
|
||||
int ret = -ENOTTY;
|
||||
|
||||
/* Anyone capable of this syscall can do *real bad* things */
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
||||
lock_kernel();
|
||||
switch (cmd) {
|
||||
case BLKI2OGRSTRAT:
|
||||
return put_user(dev->rcache, (int __user *)arg);
|
||||
ret = put_user(dev->rcache, (int __user *)arg);
|
||||
break;
|
||||
case BLKI2OGWSTRAT:
|
||||
return put_user(dev->wcache, (int __user *)arg);
|
||||
ret = put_user(dev->wcache, (int __user *)arg);
|
||||
break;
|
||||
case BLKI2OSRSTRAT:
|
||||
ret = -EINVAL;
|
||||
if (arg < 0 || arg > CACHE_SMARTFETCH)
|
||||
return -EINVAL;
|
||||
break;
|
||||
dev->rcache = arg;
|
||||
ret = 0;
|
||||
break;
|
||||
case BLKI2OSWSTRAT:
|
||||
ret = -EINVAL;
|
||||
if (arg != 0
|
||||
&& (arg < CACHE_WRITETHROUGH || arg > CACHE_SMARTBACK))
|
||||
return -EINVAL;
|
||||
break;
|
||||
dev->wcache = arg;
|
||||
ret = 0;
|
||||
break;
|
||||
}
|
||||
return -ENOTTY;
|
||||
unlock_kernel();
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -883,7 +898,7 @@ static void i2o_block_request_fn(struct request_queue *q)
|
||||
if (!req)
|
||||
break;
|
||||
|
||||
if (blk_fs_request(req)) {
|
||||
if (req->cmd_type == REQ_TYPE_FS) {
|
||||
struct i2o_block_delayed_request *dreq;
|
||||
struct i2o_block_request *ireq = req->special;
|
||||
unsigned int queue_depth;
|
||||
@@ -930,7 +945,8 @@ static const struct block_device_operations i2o_block_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = i2o_block_open,
|
||||
.release = i2o_block_release,
|
||||
.locked_ioctl = i2o_block_ioctl,
|
||||
.ioctl = i2o_block_ioctl,
|
||||
.compat_ioctl = i2o_block_ioctl,
|
||||
.getgeo = i2o_block_getgeo,
|
||||
.media_changed = i2o_block_media_changed
|
||||
};
|
||||
|
Fai riferimento in un nuovo problema
Block a user