diff options
author | David S. Miller <davem@davemloft.net> | 2011-11-21 13:50:33 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-21 13:50:33 -0500 |
commit | efd0bf97deeddd9ba53daabfc470a1399c6b0b2d (patch) | |
tree | eec56da5fbc796bac7c67f1990a18f5e0a304059 /block | |
parent | f8a15af093b19b86d56933c8757cee298d0f32a8 (diff) | |
parent | 6fe4c6d466e95d31164f14b1ac4aefb51f0f4f82 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
The forcedeth changes had a conflict with the conversion over
to atomic u64 statistics in net-next.
The libertas cfg.c code had a conflict with the bss reference
counting fix by John Linville in net-next.
Conflicts:
drivers/net/ethernet/nvidia/forcedeth.c
drivers/net/wireless/libertas/cfg.c
Diffstat (limited to 'block')
-rw-r--r-- | block/blk-core.c | 18 | ||||
-rw-r--r-- | block/blk-map.c | 7 | ||||
-rw-r--r-- | block/genhd.c | 71 |
3 files changed, 15 insertions, 81 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index f43c8a5840ae..ea70e6c80cd3 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -1379,15 +1379,19 @@ get_rq: | |||
1379 | */ | 1379 | */ |
1380 | if (list_empty(&plug->list)) | 1380 | if (list_empty(&plug->list)) |
1381 | trace_block_plug(q); | 1381 | trace_block_plug(q); |
1382 | else if (!plug->should_sort) { | 1382 | else { |
1383 | struct request *__rq; | 1383 | if (!plug->should_sort) { |
1384 | struct request *__rq; | ||
1384 | 1385 | ||
1385 | __rq = list_entry_rq(plug->list.prev); | 1386 | __rq = list_entry_rq(plug->list.prev); |
1386 | if (__rq->q != q) | 1387 | if (__rq->q != q) |
1387 | plug->should_sort = 1; | 1388 | plug->should_sort = 1; |
1389 | } | ||
1390 | if (request_count >= BLK_MAX_REQUEST_COUNT) { | ||
1391 | blk_flush_plug_list(plug, false); | ||
1392 | trace_block_plug(q); | ||
1393 | } | ||
1388 | } | 1394 | } |
1389 | if (request_count >= BLK_MAX_REQUEST_COUNT) | ||
1390 | blk_flush_plug_list(plug, false); | ||
1391 | list_add_tail(&req->queuelist, &plug->list); | 1395 | list_add_tail(&req->queuelist, &plug->list); |
1392 | drive_stat_acct(req, 1); | 1396 | drive_stat_acct(req, 1); |
1393 | } else { | 1397 | } else { |
diff --git a/block/blk-map.c b/block/blk-map.c index e663ac2d8e68..164cd0059706 100644 --- a/block/blk-map.c +++ b/block/blk-map.c | |||
@@ -204,10 +204,11 @@ int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, | |||
204 | if (!iov[i].iov_len) | 204 | if (!iov[i].iov_len) |
205 | return -EINVAL; | 205 | return -EINVAL; |
206 | 206 | ||
207 | if (uaddr & queue_dma_alignment(q)) { | 207 | /* |
208 | * Keep going so we check length of all segments | ||
209 | */ | ||
210 | if (uaddr & queue_dma_alignment(q)) | ||
208 | unaligned = 1; | 211 | unaligned = 1; |
209 | break; | ||
210 | } | ||
211 | } | 212 | } |
212 | 213 | ||
213 | if (unaligned || (q->dma_pad_mask & len) || map_data) | 214 | if (unaligned || (q->dma_pad_mask & len) || map_data) |
diff --git a/block/genhd.c b/block/genhd.c index 9253839714ff..02e9fca80825 100644 --- a/block/genhd.c +++ b/block/genhd.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <linux/mutex.h> | 19 | #include <linux/mutex.h> |
20 | #include <linux/idr.h> | 20 | #include <linux/idr.h> |
21 | #include <linux/log2.h> | 21 | #include <linux/log2.h> |
22 | #include <linux/ctype.h> | ||
23 | 22 | ||
24 | #include "blk.h" | 23 | #include "blk.h" |
25 | 24 | ||
@@ -916,74 +915,6 @@ static int __init genhd_device_init(void) | |||
916 | 915 | ||
917 | subsys_initcall(genhd_device_init); | 916 | subsys_initcall(genhd_device_init); |
918 | 917 | ||
919 | static ssize_t alias_show(struct device *dev, | ||
920 | struct device_attribute *attr, char *buf) | ||
921 | { | ||
922 | struct gendisk *disk = dev_to_disk(dev); | ||
923 | ssize_t ret = 0; | ||
924 | |||
925 | if (disk->alias) | ||
926 | ret = snprintf(buf, ALIAS_LEN, "%s\n", disk->alias); | ||
927 | return ret; | ||
928 | } | ||
929 | |||
930 | static ssize_t alias_store(struct device *dev, struct device_attribute *attr, | ||
931 | const char *buf, size_t count) | ||
932 | { | ||
933 | struct gendisk *disk = dev_to_disk(dev); | ||
934 | char *alias; | ||
935 | char *envp[] = { NULL, NULL }; | ||
936 | unsigned char c; | ||
937 | int i; | ||
938 | ssize_t ret = count; | ||
939 | |||
940 | if (!count) | ||
941 | return -EINVAL; | ||
942 | |||
943 | if (count >= ALIAS_LEN) { | ||
944 | printk(KERN_ERR "alias: alias is too long\n"); | ||
945 | return -EINVAL; | ||
946 | } | ||
947 | |||
948 | /* Validation check */ | ||
949 | for (i = 0; i < count; i++) { | ||
950 | c = buf[i]; | ||
951 | if (i == count - 1 && c == '\n') | ||
952 | break; | ||
953 | if (!isalnum(c) && c != '_' && c != '-') { | ||
954 | printk(KERN_ERR "alias: invalid alias\n"); | ||
955 | return -EINVAL; | ||
956 | } | ||
957 | } | ||
958 | |||
959 | if (disk->alias) { | ||
960 | printk(KERN_INFO "alias: %s is already assigned (%s)\n", | ||
961 | disk->disk_name, disk->alias); | ||
962 | return -EINVAL; | ||
963 | } | ||
964 | |||
965 | alias = kasprintf(GFP_KERNEL, "%s", buf); | ||
966 | if (!alias) | ||
967 | return -ENOMEM; | ||
968 | |||
969 | if (alias[count - 1] == '\n') | ||
970 | alias[count - 1] = '\0'; | ||
971 | |||
972 | envp[0] = kasprintf(GFP_KERNEL, "ALIAS=%s", alias); | ||
973 | if (!envp[0]) { | ||
974 | kfree(alias); | ||
975 | return -ENOMEM; | ||
976 | } | ||
977 | |||
978 | disk->alias = alias; | ||
979 | printk(KERN_INFO "alias: assigned %s to %s\n", alias, disk->disk_name); | ||
980 | |||
981 | kobject_uevent_env(&dev->kobj, KOBJ_ADD, envp); | ||
982 | |||
983 | kfree(envp[0]); | ||
984 | return ret; | ||
985 | } | ||
986 | |||
987 | static ssize_t disk_range_show(struct device *dev, | 918 | static ssize_t disk_range_show(struct device *dev, |
988 | struct device_attribute *attr, char *buf) | 919 | struct device_attribute *attr, char *buf) |
989 | { | 920 | { |
@@ -1043,7 +974,6 @@ static ssize_t disk_discard_alignment_show(struct device *dev, | |||
1043 | return sprintf(buf, "%d\n", queue_discard_alignment(disk->queue)); | 974 | return sprintf(buf, "%d\n", queue_discard_alignment(disk->queue)); |
1044 | } | 975 | } |
1045 | 976 | ||
1046 | static DEVICE_ATTR(alias, S_IRUGO|S_IWUSR, alias_show, alias_store); | ||
1047 | static DEVICE_ATTR(range, S_IRUGO, disk_range_show, NULL); | 977 | static DEVICE_ATTR(range, S_IRUGO, disk_range_show, NULL); |
1048 | static DEVICE_ATTR(ext_range, S_IRUGO, disk_ext_range_show, NULL); | 978 | static DEVICE_ATTR(ext_range, S_IRUGO, disk_ext_range_show, NULL); |
1049 | static DEVICE_ATTR(removable, S_IRUGO, disk_removable_show, NULL); | 979 | static DEVICE_ATTR(removable, S_IRUGO, disk_removable_show, NULL); |
@@ -1066,7 +996,6 @@ static struct device_attribute dev_attr_fail_timeout = | |||
1066 | #endif | 996 | #endif |
1067 | 997 | ||
1068 | static struct attribute *disk_attrs[] = { | 998 | static struct attribute *disk_attrs[] = { |
1069 | &dev_attr_alias.attr, | ||
1070 | &dev_attr_range.attr, | 999 | &dev_attr_range.attr, |
1071 | &dev_attr_ext_range.attr, | 1000 | &dev_attr_ext_range.attr, |
1072 | &dev_attr_removable.attr, | 1001 | &dev_attr_removable.attr, |