aboutsummaryrefslogtreecommitdiff
path: root/drivers/s390/block
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/block')
-rw-r--r--drivers/s390/block/dasd.c8
-rw-r--r--drivers/s390/block/dasd_alias.c13
-rw-r--r--drivers/s390/block/dasd_devmap.c6
-rw-r--r--drivers/s390/block/dasd_diag.c4
-rw-r--r--drivers/s390/block/dasd_eckd.c45
-rw-r--r--drivers/s390/block/dasd_eer.c4
-rw-r--r--drivers/s390/block/dasd_fba.c2
-rw-r--r--drivers/s390/block/dasd_ioctl.c4
-rw-r--r--drivers/s390/block/dcssblk.c9
-rw-r--r--drivers/s390/block/scm_blk.c5
-rw-r--r--drivers/s390/block/scm_drv.c2
11 files changed, 56 insertions, 46 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 35031357ac4d..3181c06d91ce 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -86,7 +86,7 @@ struct dasd_device *dasd_alloc_device(void)
{
struct dasd_device *device;
- device = kzalloc(sizeof(struct dasd_device), GFP_ATOMIC);
+ device = kzalloc_obj(struct dasd_device, GFP_ATOMIC);
if (!device)
return ERR_PTR(-ENOMEM);
@@ -150,7 +150,7 @@ struct dasd_block *dasd_alloc_block(void)
{
struct dasd_block *block;
- block = kzalloc(sizeof(*block), GFP_ATOMIC);
+ block = kzalloc_obj(*block, GFP_ATOMIC);
if (!block)
return ERR_PTR(-ENOMEM);
/* open_count = 0 means device online but not in use */
@@ -868,7 +868,7 @@ int dasd_profile_on(struct dasd_profile *profile)
{
struct dasd_profile_info *data;
- data = kzalloc(sizeof(*data), GFP_KERNEL);
+ data = kzalloc_obj(*data);
if (!data)
return -ENOMEM;
spin_lock_bh(&profile->lock);
@@ -3180,7 +3180,7 @@ enum blk_eh_timer_return dasd_times_out(struct request *req)
static int dasd_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
unsigned int idx)
{
- struct dasd_queue *dq = kzalloc(sizeof(*dq), GFP_KERNEL);
+ struct dasd_queue *dq = kzalloc_obj(*dq);
if (!dq)
return -ENOMEM;
diff --git a/drivers/s390/block/dasd_alias.c b/drivers/s390/block/dasd_alias.c
index f7e768d8ca76..8d6c16d35c22 100644
--- a/drivers/s390/block/dasd_alias.c
+++ b/drivers/s390/block/dasd_alias.c
@@ -98,7 +98,7 @@ static struct alias_server *_allocate_server(struct dasd_uid *uid)
{
struct alias_server *server;
- server = kzalloc(sizeof(*server), GFP_KERNEL);
+ server = kzalloc_obj(*server);
if (!server)
return ERR_PTR(-ENOMEM);
memcpy(server->uid.vendor, uid->vendor, sizeof(uid->vendor));
@@ -117,17 +117,16 @@ static struct alias_lcu *_allocate_lcu(struct dasd_uid *uid)
{
struct alias_lcu *lcu;
- lcu = kzalloc(sizeof(*lcu), GFP_KERNEL);
+ lcu = kzalloc_obj(*lcu);
if (!lcu)
return ERR_PTR(-ENOMEM);
- lcu->uac = kzalloc(sizeof(*(lcu->uac)), GFP_KERNEL | GFP_DMA);
+ lcu->uac = kzalloc_obj(*(lcu->uac), GFP_KERNEL | GFP_DMA);
if (!lcu->uac)
goto out_err1;
- lcu->rsu_cqr = kzalloc(sizeof(*lcu->rsu_cqr), GFP_KERNEL | GFP_DMA);
+ lcu->rsu_cqr = kzalloc_obj(*lcu->rsu_cqr, GFP_KERNEL | GFP_DMA);
if (!lcu->rsu_cqr)
goto out_err2;
- lcu->rsu_cqr->cpaddr = kzalloc(sizeof(struct ccw1),
- GFP_KERNEL | GFP_DMA);
+ lcu->rsu_cqr->cpaddr = kzalloc_obj(struct ccw1, GFP_KERNEL | GFP_DMA);
if (!lcu->rsu_cqr->cpaddr)
goto out_err3;
lcu->rsu_cqr->data = kzalloc(16, GFP_KERNEL | GFP_DMA);
@@ -323,7 +322,7 @@ static int _add_device_to_lcu(struct alias_lcu *lcu,
}
group = _find_group(lcu, &uid);
if (!group) {
- group = kzalloc(sizeof(*group), GFP_ATOMIC);
+ group = kzalloc_obj(*group, GFP_ATOMIC);
if (!group)
return -ENOMEM;
memcpy(group->uid.vendor, uid.vendor, sizeof(uid.vendor));
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c
index 73972900fc55..381d616ad433 100644
--- a/drivers/s390/block/dasd_devmap.c
+++ b/drivers/s390/block/dasd_devmap.c
@@ -412,7 +412,7 @@ dasd_add_busid(const char *bus_id, int features)
struct dasd_devmap *devmap, *new, *tmp;
int hash;
- new = kzalloc(sizeof(struct dasd_devmap), GFP_KERNEL);
+ new = kzalloc_obj(struct dasd_devmap);
if (!new)
return ERR_PTR(-ENOMEM);
spin_lock(&dasd_devmap_lock);
@@ -605,7 +605,7 @@ static int dasd_devmap_get_pprc_status(struct dasd_device *device,
dev_warn(&device->cdev->dev, "Unable to query copy relation status\n");
return -EOPNOTSUPP;
}
- temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+ temp = kzalloc_obj(*temp);
if (!temp)
return -ENOMEM;
@@ -2274,7 +2274,7 @@ static ssize_t dasd_copy_pair_store(struct device *dev,
} else if (sec_devmap->copy) {
copy = sec_devmap->copy;
} else {
- copy = kzalloc(sizeof(*copy), GFP_KERNEL);
+ copy = kzalloc_obj(*copy);
if (!copy)
return -ENOMEM;
}
diff --git a/drivers/s390/block/dasd_diag.c b/drivers/s390/block/dasd_diag.c
index 56f1af8a7ddd..af68c2ee659d 100644
--- a/drivers/s390/block/dasd_diag.c
+++ b/drivers/s390/block/dasd_diag.c
@@ -325,7 +325,7 @@ dasd_diag_check_device(struct dasd_device *device)
int rc;
if (private == NULL) {
- private = kzalloc(sizeof(*private), GFP_KERNEL);
+ private = kzalloc_obj(*private);
if (private == NULL) {
DBF_DEV_EVENT(DBF_WARNING, device, "%s",
"Allocating memory for private DASD data "
@@ -395,7 +395,7 @@ dasd_diag_check_device(struct dasd_device *device)
rc = -ENOMEM;
goto out;
}
- bio = kzalloc(sizeof(*bio), GFP_KERNEL);
+ bio = kzalloc_obj(*bio);
if (bio == NULL) {
DBF_DEV_EVENT(DBF_WARNING, device, "%s",
"No memory to allocate initialization bio");
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index b08e900687f3..14e58c336baa 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -1468,7 +1468,7 @@ static int dasd_eckd_pe_handler(struct dasd_device *device,
{
struct pe_handler_work_data *data;
- data = kzalloc(sizeof(*data), GFP_ATOMIC | GFP_DMA);
+ data = kzalloc_obj(*data, GFP_ATOMIC | GFP_DMA);
if (!data) {
if (mutex_trylock(&dasd_pe_handler_mutex)) {
data = pe_handler_worker;
@@ -1720,7 +1720,7 @@ static int dasd_eckd_ext_pool_exhaust(struct dasd_device *device,
{
struct ext_pool_exhaust_work_data *data;
- data = kzalloc(sizeof(*data), GFP_ATOMIC);
+ data = kzalloc_obj(*data, GFP_ATOMIC);
if (!data)
return -ENOMEM;
INIT_WORK(&data->worker, dasd_eckd_ext_pool_exhaust_work);
@@ -2070,7 +2070,7 @@ dasd_eckd_check_characteristics(struct dasd_device *device)
"The DASD is not operating in multipath mode\n");
}
if (!private) {
- private = kzalloc(sizeof(*private), GFP_KERNEL | GFP_DMA);
+ private = kzalloc_obj(*private, GFP_KERNEL | GFP_DMA);
if (!private) {
dev_warn(&device->cdev->dev,
"Allocating memory for private DASD data "
@@ -3729,7 +3729,7 @@ static int dasd_in_copy_relation(struct dasd_device *device)
if (!dasd_eckd_pprc_enabled(device))
return 0;
- temp = kzalloc(sizeof(*temp), GFP_KERNEL);
+ temp = kzalloc_obj(*temp);
if (!temp)
return -ENOMEM;
@@ -5951,7 +5951,7 @@ static int dasd_eckd_query_host_access(struct dasd_device *device,
"Could not allocate read message buffer request");
return PTR_ERR(cqr);
}
- host_access = kzalloc(sizeof(*host_access), GFP_KERNEL | GFP_DMA);
+ host_access = kzalloc_obj(*host_access, GFP_KERNEL | GFP_DMA);
if (!host_access) {
dasd_sfree_request(cqr, device);
DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s",
@@ -6017,7 +6017,7 @@ static int dasd_eckd_host_access_count(struct dasd_device *device)
int count = 0;
int rc, i;
- access = kzalloc(sizeof(*access), GFP_NOIO);
+ access = kzalloc_obj(*access, GFP_NOIO);
if (!access) {
DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s",
"Could not allocate access buffer");
@@ -6053,7 +6053,7 @@ static int dasd_hosts_print(struct dasd_device *device, struct seq_file *m)
char sysplex[9] = "";
int rc, i;
- access = kzalloc(sizeof(*access), GFP_NOIO);
+ access = kzalloc_obj(*access, GFP_NOIO);
if (!access) {
DBF_EVENT_DEVID(DBF_WARNING, device->cdev, "%s",
"Could not allocate access buffer");
@@ -6135,6 +6135,7 @@ static void copy_pair_set_active(struct dasd_copy_relation *copy, char *new_busi
static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid,
char *sec_busid)
{
+ struct dasd_eckd_private *prim_priv, *sec_priv;
struct dasd_device *primary, *secondary;
struct dasd_copy_relation *copy;
struct dasd_block *block;
@@ -6155,6 +6156,9 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid
if (!secondary)
return DASD_COPYPAIRSWAP_SECONDARY;
+ prim_priv = primary->private;
+ sec_priv = secondary->private;
+
/*
* usually the device should be quiesced for swap
* for paranoia stop device and requeue requests again
@@ -6182,6 +6186,18 @@ static int dasd_eckd_copy_pair_swap(struct dasd_device *device, char *prim_busid
dev_name(&secondary->cdev->dev), rc);
}
+ if (primary->stopped & DASD_STOPPED_QUIESCE) {
+ dasd_device_set_stop_bits(secondary, DASD_STOPPED_QUIESCE);
+ dasd_device_remove_stop_bits(primary, DASD_STOPPED_QUIESCE);
+ }
+
+ /*
+ * The secondary device never got through format detection, but since it
+ * is a copy of the primary device, the format is exactly the same;
+ * therefore, the detected layout can simply be copied.
+ */
+ sec_priv->uses_cdl = prim_priv->uses_cdl;
+
/* re-enable device */
dasd_device_remove_stop_bits(primary, DASD_STOPPED_PPRC);
dasd_device_remove_stop_bits(secondary, DASD_STOPPED_PPRC);
@@ -6721,7 +6737,7 @@ static void dasd_eckd_check_attention_work(struct work_struct *work)
data = container_of(work, struct check_attention_work_data, worker);
device = data->device;
- messages = kzalloc(sizeof(*messages), GFP_KERNEL);
+ messages = kzalloc_obj(*messages);
if (!messages) {
DBF_DEV_EVENT(DBF_WARNING, device, "%s",
"Could not allocate attention message buffer");
@@ -6748,7 +6764,7 @@ static int dasd_eckd_check_attention(struct dasd_device *device, __u8 lpum)
{
struct check_attention_work_data *data;
- data = kzalloc(sizeof(*data), GFP_ATOMIC);
+ data = kzalloc_obj(*data, GFP_ATOMIC);
if (!data)
return -ENOMEM;
INIT_WORK(&data->worker, dasd_eckd_check_attention_work);
@@ -6912,18 +6928,17 @@ dasd_eckd_init(void)
int ret;
ASCEBC(dasd_eckd_discipline.ebcname, 4);
- dasd_reserve_req = kmalloc(sizeof(*dasd_reserve_req),
- GFP_KERNEL | GFP_DMA);
+ dasd_reserve_req = kmalloc_obj(*dasd_reserve_req, GFP_KERNEL | GFP_DMA);
if (!dasd_reserve_req)
return -ENOMEM;
- dasd_vol_info_req = kmalloc(sizeof(*dasd_vol_info_req),
- GFP_KERNEL | GFP_DMA);
+ dasd_vol_info_req = kmalloc_obj(*dasd_vol_info_req,
+ GFP_KERNEL | GFP_DMA);
if (!dasd_vol_info_req) {
kfree(dasd_reserve_req);
return -ENOMEM;
}
- pe_handler_worker = kmalloc(sizeof(*pe_handler_worker),
- GFP_KERNEL | GFP_DMA);
+ pe_handler_worker = kmalloc_obj(*pe_handler_worker,
+ GFP_KERNEL | GFP_DMA);
if (!pe_handler_worker) {
kfree(dasd_reserve_req);
kfree(dasd_vol_info_req);
diff --git a/drivers/s390/block/dasd_eer.c b/drivers/s390/block/dasd_eer.c
index b177b7952f2e..78d66e2711cd 100644
--- a/drivers/s390/block/dasd_eer.c
+++ b/drivers/s390/block/dasd_eer.c
@@ -544,7 +544,7 @@ static int dasd_eer_open(struct inode *inp, struct file *filp)
struct eerbuffer *eerb;
unsigned long flags;
- eerb = kzalloc(sizeof(struct eerbuffer), GFP_KERNEL);
+ eerb = kzalloc_obj(struct eerbuffer);
if (!eerb)
return -ENOMEM;
eerb->buffer_page_count = eer_pages;
@@ -689,7 +689,7 @@ int __init dasd_eer_init(void)
{
int rc;
- dasd_eer_dev = kzalloc(sizeof(*dasd_eer_dev), GFP_KERNEL);
+ dasd_eer_dev = kzalloc_obj(*dasd_eer_dev);
if (!dasd_eer_dev)
return -ENOMEM;
diff --git a/drivers/s390/block/dasd_fba.c b/drivers/s390/block/dasd_fba.c
index c2a87201c153..029acb83ecab 100644
--- a/drivers/s390/block/dasd_fba.c
+++ b/drivers/s390/block/dasd_fba.c
@@ -119,7 +119,7 @@ dasd_fba_check_characteristics(struct dasd_device *device)
int readonly, rc;
if (!private) {
- private = kzalloc(sizeof(*private), GFP_KERNEL | GFP_DMA);
+ private = kzalloc_obj(*private, GFP_KERNEL | GFP_DMA);
if (!private) {
dev_warn(&device->cdev->dev,
"Allocating memory for private DASD "
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
index f883990be626..c85ee42732a3 100644
--- a/drivers/s390/block/dasd_ioctl.c
+++ b/drivers/s390/block/dasd_ioctl.c
@@ -442,7 +442,7 @@ static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp)
struct dasd_profile_info_t *data;
int rc = 0;
- data = kmalloc(sizeof(*data), GFP_KERNEL);
+ data = kmalloc_obj(*data);
if (!data)
return -ENOMEM;
@@ -560,7 +560,7 @@ static int dasd_ioctl_information(struct dasd_block *block, void __user *argp,
struct dasd_information2_t *dasd_info;
int error;
- dasd_info = kzalloc(sizeof(*dasd_info), GFP_KERNEL);
+ dasd_info = kzalloc_obj(*dasd_info);
if (!dasd_info)
return -ENOMEM;
diff --git a/drivers/s390/block/dcssblk.c b/drivers/s390/block/dcssblk.c
index 38e1df8f8a82..e5a02c2990d0 100644
--- a/drivers/s390/block/dcssblk.c
+++ b/drivers/s390/block/dcssblk.c
@@ -240,9 +240,7 @@ dcssblk_is_continuous(struct dcssblk_dev_info *dev_info)
if (dev_info->num_of_segments <= 1)
return 0;
- sort_list = kcalloc(dev_info->num_of_segments,
- sizeof(struct segment_info),
- GFP_KERNEL);
+ sort_list = kzalloc_objs(struct segment_info, dev_info->num_of_segments);
if (sort_list == NULL)
return -ENOMEM;
i = 0;
@@ -310,7 +308,7 @@ dcssblk_load_segment(char *name, struct segment_info **seg_info)
return -EEXIST;
/* get a struct segment_info */
- *seg_info = kzalloc(sizeof(struct segment_info), GFP_KERNEL);
+ *seg_info = kzalloc_obj(struct segment_info);
if (*seg_info == NULL)
return -ENOMEM;
@@ -606,8 +604,7 @@ dcssblk_add_store(struct device *dev, struct device_attribute *attr, const char
* get a struct dcssblk_dev_info
*/
if (num_of_segments == 0) {
- dev_info = kzalloc(sizeof(struct dcssblk_dev_info),
- GFP_KERNEL);
+ dev_info = kzalloc_obj(struct dcssblk_dev_info);
if (dev_info == NULL) {
rc = -ENOMEM;
goto out;
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c
index 04e84f45dcc9..fa223949eac0 100644
--- a/drivers/s390/block/scm_blk.c
+++ b/drivers/s390/block/scm_blk.c
@@ -77,8 +77,7 @@ static int __scm_alloc_rq(void)
if (!scmrq->aob)
goto free;
- scmrq->request = kcalloc(nr_requests_per_io, sizeof(scmrq->request[0]),
- GFP_KERNEL);
+ scmrq->request = kzalloc_objs(scmrq->request[0], nr_requests_per_io);
if (!scmrq->request)
goto free;
@@ -331,7 +330,7 @@ static blk_status_t scm_blk_request(struct blk_mq_hw_ctx *hctx,
static int scm_blk_init_hctx(struct blk_mq_hw_ctx *hctx, void *data,
unsigned int idx)
{
- struct scm_queue *qd = kzalloc(sizeof(*qd), GFP_KERNEL);
+ struct scm_queue *qd = kzalloc_obj(*qd);
if (!qd)
return -ENOMEM;
diff --git a/drivers/s390/block/scm_drv.c b/drivers/s390/block/scm_drv.c
index 6cffbbe83f89..095d06eeae7c 100644
--- a/drivers/s390/block/scm_drv.c
+++ b/drivers/s390/block/scm_drv.c
@@ -43,7 +43,7 @@ static int scm_probe(struct scm_device *scmdev)
if (scmdev->attrs.oper_state != OP_STATE_GOOD)
return -EINVAL;
- bdev = kzalloc(sizeof(*bdev), GFP_KERNEL);
+ bdev = kzalloc_obj(*bdev);
if (!bdev)
return -ENOMEM;