aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/block/dasd_ioctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/block/dasd_ioctl.c')
-rw-r--r--drivers/s390/block/dasd_ioctl.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/drivers/s390/block/dasd_ioctl.c b/drivers/s390/block/dasd_ioctl.c
index 72261e4c516..eb4e034378c 100644
--- a/drivers/s390/block/dasd_ioctl.c
+++ b/drivers/s390/block/dasd_ioctl.c
@@ -239,7 +239,7 @@ dasd_ioctl_format(struct block_device *bdev, void __user *argp)
239 */ 239 */
240static int dasd_ioctl_reset_profile(struct dasd_block *block) 240static int dasd_ioctl_reset_profile(struct dasd_block *block)
241{ 241{
242 memset(&block->profile, 0, sizeof(struct dasd_profile_info_t)); 242 dasd_profile_reset(&block->profile);
243 return 0; 243 return 0;
244} 244}
245 245
@@ -248,10 +248,40 @@ static int dasd_ioctl_reset_profile(struct dasd_block *block)
248 */ 248 */
249static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp) 249static int dasd_ioctl_read_profile(struct dasd_block *block, void __user *argp)
250{ 250{
251 if (dasd_profile_level == DASD_PROFILE_OFF) 251 struct dasd_profile_info_t *data;
252
253 data = kmalloc(sizeof(*data), GFP_KERNEL);
254 if (!data)
255 return -ENOMEM;
256
257 spin_lock_bh(&block->profile.lock);
258 if (block->profile.data) {
259 data->dasd_io_reqs = block->profile.data->dasd_io_reqs;
260 data->dasd_io_sects = block->profile.data->dasd_io_sects;
261 memcpy(data->dasd_io_secs, block->profile.data->dasd_io_secs,
262 sizeof(data->dasd_io_secs));
263 memcpy(data->dasd_io_times, block->profile.data->dasd_io_times,
264 sizeof(data->dasd_io_times));
265 memcpy(data->dasd_io_timps, block->profile.data->dasd_io_timps,
266 sizeof(data->dasd_io_timps));
267 memcpy(data->dasd_io_time1, block->profile.data->dasd_io_time1,
268 sizeof(data->dasd_io_time1));
269 memcpy(data->dasd_io_time2, block->profile.data->dasd_io_time2,
270 sizeof(data->dasd_io_time2));
271 memcpy(data->dasd_io_time2ps,
272 block->profile.data->dasd_io_time2ps,
273 sizeof(data->dasd_io_time2ps));
274 memcpy(data->dasd_io_time3, block->profile.data->dasd_io_time3,
275 sizeof(data->dasd_io_time3));
276 memcpy(data->dasd_io_nr_req,
277 block->profile.data->dasd_io_nr_req,
278 sizeof(data->dasd_io_nr_req));
279 spin_unlock_bh(&block->profile.lock);
280 } else {
281 spin_unlock_bh(&block->profile.lock);
252 return -EIO; 282 return -EIO;
253 if (copy_to_user(argp, &block->profile, 283 }
254 sizeof(struct dasd_profile_info_t))) 284 if (copy_to_user(argp, data, sizeof(*data)))
255 return -EFAULT; 285 return -EFAULT;
256 return 0; 286 return 0;
257} 287}