Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

blktrace: pass blk_user_trace2 to setup functions

Pass struct blk_user_trace_setup2 to blktrace_setup_finalize(). This
prepares for the incoming extension of the blktrace protocol with a 64bit
act_mask.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Johannes Thumshirn and committed by
Jens Axboe
113cbd62 0d8627cc

+24 -10
+2 -1
include/linux/blktrace_api.h
··· 14 14 #include <linux/sysfs.h> 15 15 16 16 struct blk_trace { 17 + int version; 17 18 int trace_state; 18 19 struct rchan *rchan; 19 20 unsigned long __percpu *sequence; 20 21 unsigned char __percpu *msg_data; 21 - u16 act_mask; 22 + u64 act_mask; 22 23 u64 start_lba; 23 24 u64 end_lba; 24 25 u32 pid;
+22 -9
kernel/trace/blktrace.c
··· 597 597 } 598 598 599 599 static void blk_trace_setup_finalize(struct request_queue *q, 600 - char *name, struct blk_trace *bt, 601 - struct blk_user_trace_setup *buts) 600 + char *name, int version, 601 + struct blk_trace *bt, 602 + struct blk_user_trace_setup2 *buts) 602 603 603 604 { 604 - strscpy_pad(buts->name, name, BLKTRACE_BDEV_SIZE); 605 + strscpy_pad(buts->name, name, BLKTRACE_BDEV_SIZE2); 605 606 606 607 /* 607 608 * some device names have larger paths - convert the slashes ··· 610 609 */ 611 610 strreplace(buts->name, '/', '_'); 612 611 612 + bt->version = version; 613 613 bt->act_mask = buts->act_mask; 614 614 if (!bt->act_mask) 615 615 bt->act_mask = (u16) -1; ··· 632 630 struct block_device *bdev, 633 631 char __user *arg) 634 632 { 633 + struct blk_user_trace_setup2 buts2; 635 634 struct blk_user_trace_setup buts; 636 635 struct blk_trace *bt; 637 636 int ret; ··· 644 641 if (!buts.buf_size || !buts.buf_nr) 645 642 return -EINVAL; 646 643 644 + buts2 = (struct blk_user_trace_setup2) { 645 + .act_mask = buts.act_mask, 646 + .buf_size = buts.buf_size, 647 + .buf_nr = buts.buf_nr, 648 + .start_lba = buts.start_lba, 649 + .end_lba = buts.end_lba, 650 + .pid = buts.pid, 651 + }; 652 + 647 653 mutex_lock(&q->debugfs_mutex); 648 654 bt = blk_trace_setup_prepare(q, name, dev, buts.buf_size, buts.buf_nr, 649 655 bdev); ··· 660 648 mutex_unlock(&q->debugfs_mutex); 661 649 return PTR_ERR(bt); 662 650 } 663 - blk_trace_setup_finalize(q, name, bt, &buts); 651 + blk_trace_setup_finalize(q, name, 1, bt, &buts2); 652 + strcpy(buts.name, buts2.name); 664 653 mutex_unlock(&q->debugfs_mutex); 665 654 666 655 if (copy_to_user(arg, &buts, sizeof(buts))) { ··· 677 664 dev_t dev, struct block_device *bdev, 678 665 char __user *arg) 679 666 { 680 - struct blk_user_trace_setup buts; 667 + struct blk_user_trace_setup2 buts2; 681 668 struct compat_blk_user_trace_setup cbuts; 682 669 struct blk_trace *bt; 683 670 ··· 687 674 if (!cbuts.buf_size || !cbuts.buf_nr) 688 675 return -EINVAL; 689 676 690 - buts = (struct blk_user_trace_setup) { 677 + buts2 = (struct blk_user_trace_setup2) { 691 678 .act_mask = cbuts.act_mask, 692 679 .buf_size = cbuts.buf_size, 693 680 .buf_nr = cbuts.buf_nr, ··· 697 684 }; 698 685 699 686 mutex_lock(&q->debugfs_mutex); 700 - bt = blk_trace_setup_prepare(q, name, dev, buts.buf_size, buts.buf_nr, 687 + bt = blk_trace_setup_prepare(q, name, dev, buts2.buf_size, buts2.buf_nr, 701 688 bdev); 702 689 if (IS_ERR(bt)) { 703 690 mutex_unlock(&q->debugfs_mutex); 704 691 return PTR_ERR(bt); 705 692 } 706 - blk_trace_setup_finalize(q, name, bt, &buts); 693 + blk_trace_setup_finalize(q, name, 1, bt, &buts2); 707 694 mutex_unlock(&q->debugfs_mutex); 708 695 709 - if (copy_to_user(arg, &buts.name, ARRAY_SIZE(buts.name))) { 696 + if (copy_to_user(arg, &buts2.name, ARRAY_SIZE(buts2.name))) { 710 697 blk_trace_remove(q); 711 698 return -EFAULT; 712 699 }