tree:
https://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux-next.git
20200605-blktrace-fixes-v4
head: 1800ec543cd3a52ecb7ef550f81ad866710a2067
commit: 1800ec543cd3a52ecb7ef550f81ad866710a2067 [8/8] blktrace: fix debugfs use after
free
config: i386-allyesconfig (attached as .config)
compiler: gcc-9 (Debian 9.3.0-13) 9.3.0
reproduce (this is a W=1 build):
git checkout 1800ec543cd3a52ecb7ef550f81ad866710a2067
# save the attached .config to linux build tree
make W=1 ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All error/warnings (new ones prefixed by >>, old ones prefixed by <<):
kernel/trace/blktrace.c: In function 'do_blk_trace_setup':
> kernel/trace/blktrace.c:603:12: error: invalid storage class for
function '__blk_trace_setup'
603 | static int __blk_trace_setup(struct
request_queue *q, char *name, dev_t dev,
| ^~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:603:1: warning: ISO C90 forbids mixed
declarations and code [-Wdeclaration-after-statement]
603 | static int
__blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
| ^~~~~~
In file included from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from kernel/trace/blktrace.c:9:
> kernel/trace/blktrace.c:636:19: error: non-static declaration of
'blk_trace_setup' follows static declaration
636 |
EXPORT_SYMBOL_GPL(blk_trace_setup);
| ^~~~~~~~~~~~~~~
include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
98 | extern typeof(sym) sym; | ^~~
include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
159 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
> kernel/trace/blktrace.c:636:1: note: in expansion of macro
'EXPORT_SYMBOL_GPL'
636 | EXPORT_SYMBOL_GPL(blk_trace_setup);
| ^~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:624:5: note: previous definition of 'blk_trace_setup' was
here
624 | int blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
| ^~~~~~~~~~~~~~~
In file included from include/linux/export.h:43,
from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from kernel/trace/blktrace.c:9:
include/linux/compiler.h:343:2: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
343 | static void * __section(.discard.addressable) __used | ^~~~~~
include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
51 | __ADDRESSABLE(sym) | ^~~~~~~~~~~~~
include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
108 | __KSYMTAB_ENTRY(sym, sec)
| ^~~~~~~~~~~~~~~
include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
| ^~~~~~~~~~~~~~~~
include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
159 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
> kernel/trace/blktrace.c:636:1: note: in expansion of macro
'EXPORT_SYMBOL_GPL'
636 | EXPORT_SYMBOL_GPL(blk_trace_setup);
| ^~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:672:12: error: invalid storage class for
function '__blk_trace_startstop'
672 | static int
__blk_trace_startstop(struct request_queue *q, int start)
| ^~~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:672:1: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
672 | static int __blk_trace_startstop(struct request_queue *q, int start)
| ^~~~~~
In file included from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from kernel/trace/blktrace.c:9:
> kernel/trace/blktrace.c:724:19: error: non-static declaration of
'blk_trace_startstop' follows static declaration
724 |
EXPORT_SYMBOL_GPL(blk_trace_startstop);
| ^~~~~~~~~~~~~~~~~~~
include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
98 | extern typeof(sym) sym; | ^~~
include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
159 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/trace/blktrace.c:724:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
724 | EXPORT_SYMBOL_GPL(blk_trace_startstop);
| ^~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:714:5: note: previous definition of 'blk_trace_startstop'
was here
714 | int blk_trace_startstop(struct request_queue *q, int start)
| ^~~~~~~~~~~~~~~~~~~
In file included from include/linux/export.h:43,
from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from kernel/trace/blktrace.c:9:
include/linux/compiler.h:343:2: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
343 | static void * __section(.discard.addressable) __used | ^~~~~~
include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
51 | __ADDRESSABLE(sym) | ^~~~~~~~~~~~~
include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
108 | __KSYMTAB_ENTRY(sym, sec)
| ^~~~~~~~~~~~~~~
include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
| ^~~~~~~~~~~~~~~~
include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
159 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/trace/blktrace.c:724:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
724 | EXPORT_SYMBOL_GPL(blk_trace_startstop);
| ^~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:739:1: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
739 | int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
| ^~~
> kernel/trace/blktrace.c:798:12: error: invalid storage class for
function 'blk_trace_bio_get_cgid'
798 | static u64
blk_trace_bio_get_cgid(struct request_queue *q, struct bio *bio)
| ^~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:819:1: error: invalid storage class for
function 'blk_trace_request_get_cgid'
819 |
blk_trace_request_get_cgid(struct request_queue *q, struct request *rq)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:843:13: error: invalid storage class for
function 'blk_add_trace_rq'
843 | static void blk_add_trace_rq(struct
request *rq, int error,
| ^~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:865:13: error: invalid storage class for
function 'blk_add_trace_rq_insert'
865 | static void
blk_add_trace_rq_insert(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:872:13: error: invalid storage class for
function 'blk_add_trace_rq_issue'
872 | static void
blk_add_trace_rq_issue(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:879:13: error: invalid storage class for
function 'blk_add_trace_rq_requeue'
879 | static void
blk_add_trace_rq_requeue(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:887:13: error: invalid storage class for
function 'blk_add_trace_rq_complete'
887 | static void
blk_add_trace_rq_complete(void *ignore, struct request *rq,
| ^~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:905:13: error: invalid storage class for
function 'blk_add_trace_bio'
905 | static void blk_add_trace_bio(struct
request_queue *q, struct bio *bio,
| ^~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:923:13: error: invalid storage class for
function 'blk_add_trace_bio_bounce'
923 | static void
blk_add_trace_bio_bounce(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:929:13: error: invalid storage class for
function 'blk_add_trace_bio_complete'
929 | static void
blk_add_trace_bio_complete(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:936:13: error: invalid storage class for
function 'blk_add_trace_bio_backmerge'
936 | static void
blk_add_trace_bio_backmerge(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:944:13: error: invalid storage class for
function 'blk_add_trace_bio_frontmerge'
944 | static void
blk_add_trace_bio_frontmerge(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
> kernel/trace/blktrace.c:952:13: error: invalid storage class for
function 'blk_add_trace_bio_queue'
952 | static void
blk_add_trace_bio_queue(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:958:13: error: invalid storage class for function
'blk_add_trace_getrq'
958 | static void blk_add_trace_getrq(void *ignore,
| ^~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:977:13: error: invalid storage class for function
'blk_add_trace_sleeprq'
977 | static void blk_add_trace_sleeprq(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:995:13: error: invalid storage class for function
'blk_add_trace_plug'
995 | static void blk_add_trace_plug(void *ignore, struct request_queue *q)
| ^~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1006:13: error: invalid storage class for function
'blk_add_trace_unplug'
1006 | static void blk_add_trace_unplug(void *ignore, struct request_queue *q,
| ^~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1027:13: error: invalid storage class for function
'blk_add_trace_split'
1027 | static void blk_add_trace_split(void *ignore,
| ^~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1059:13: error: invalid storage class for function
'blk_add_trace_bio_remap'
1059 | static void blk_add_trace_bio_remap(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1096:13: error: invalid storage class for function
'blk_add_trace_rq_remap'
1096 | static void blk_add_trace_rq_remap(void *ignore,
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from kernel/trace/blktrace.c:9:
kernel/trace/blktrace.c:1150:19: error: non-static declaration of
'blk_add_driver_data' follows static declaration
1150 | EXPORT_SYMBOL_GPL(blk_add_driver_data);
| ^~~~~~~~~~~~~~~~~~~
include/linux/export.h:98:21: note: in definition of macro '___EXPORT_SYMBOL'
98 | extern typeof(sym) sym; | ^~~
include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
159 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/trace/blktrace.c:1150:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
1150 | EXPORT_SYMBOL_GPL(blk_add_driver_data);
| ^~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1132:6: note: previous definition of 'blk_add_driver_data'
was here
1132 | void blk_add_driver_data(struct request_queue *q,
| ^~~~~~~~~~~~~~~~~~~
In file included from include/linux/export.h:43,
from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from kernel/trace/blktrace.c:9:
include/linux/compiler.h:343:2: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
343 | static void * __section(.discard.addressable) __used | ^~~~~~
include/linux/export.h:51:2: note: in expansion of macro '__ADDRESSABLE'
51 | __ADDRESSABLE(sym) | ^~~~~~~~~~~~~
include/linux/export.h:108:2: note: in expansion of macro '__KSYMTAB_ENTRY'
108 | __KSYMTAB_ENTRY(sym, sec)
| ^~~~~~~~~~~~~~~
include/linux/export.h:147:39: note: in expansion of macro '___EXPORT_SYMBOL'
147 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
| ^~~~~~~~~~~~~~~~
include/linux/export.h:155:34: note: in expansion of macro '__EXPORT_SYMBOL'
155 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:159:33: note: in expansion of macro '_EXPORT_SYMBOL'
159 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/trace/blktrace.c:1150:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
1150 | EXPORT_SYMBOL_GPL(blk_add_driver_data);
| ^~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1152:13: error: invalid storage class for function
'blk_register_tracepoints'
1152 | static void blk_register_tracepoints(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1152:1: warning: ISO C90 forbids mixed declarations and code
[-Wdeclaration-after-statement]
1152 | static void blk_register_tracepoints(void)
| ^~~~~~
kernel/trace/blktrace.c:1190:13: error: invalid storage class for function
'blk_unregister_tracepoints'
1190 | static void blk_unregister_tracepoints(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1216:13: error: invalid storage class for function
'fill_rwbs'
1216 | static void fill_rwbs(char *rwbs, const struct blk_io_trace *t)
| ^~~~~~~~~
kernel/trace/blktrace.c:1251:28: error: invalid storage class for function
'te_blk_io_trace'
1251 | const struct blk_io_trace *te_blk_io_trace(const struct trace_entry *ent)
| ^~~~~~~~~~~~~~~
kernel/trace/blktrace.c:1256:27: error: invalid storage class for function
'pdu_start'
1256 | static inline const void *pdu_start(const struct trace_entry *ent, bool has_cg)
| ^~~~~~~~~
kernel/trace/blktrace.c:1261:19: error: invalid storage class for function
't_cgid'
1261 | static inline u64 t_cgid(const struct trace_entry *ent)
| ^~~~~~
kernel/trace/blktrace.c:1266:19: error: invalid storage class for function
'pdu_real_len'
1266 | static inline int pdu_real_len(const struct trace_entry *ent, bool has_cg)
| ^~~~~~~~~~~~
kernel/trace/blktrace.c:1271:19: error: invalid storage class for function
't_action'
1271 | static inline u32 t_action(const struct trace_entry *ent)
| ^~~~~~~~
kernel/trace/blktrace.c:1276:19: error: invalid storage class for function
't_bytes'
1276 | static inline u32 t_bytes(const struct trace_entry *ent)
| ^~~~~~~
kernel/trace/blktrace.c:1281:19: error: invalid storage class for function
't_sec'
vim +/__blk_trace_setup +603 kernel/trace/blktrace.c
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 602
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 @603 static
int __blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 604
struct block_device *bdev, char __user *arg)
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 605 {
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 606 struct
blk_user_trace_setup buts;
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 607 int
ret;
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 608
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 609 ret =
copy_from_user(&buts, arg, sizeof(buts));
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 610 if
(ret)
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 611 return
-EFAULT;
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 612
d0deef5b14af7d kernel/trace/blktrace.c Shawn Du 2009-04-14 613 ret =
do_blk_trace_setup(q, name, dev, bdev, &buts);
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 614 if
(ret)
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 615 return
ret;
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 616
9a8c28c8311e30 kernel/trace/blktrace.c Dmitry Monakhov 2010-02-27 617 if
(copy_to_user(arg, &buts, sizeof(buts))) {
2967acbb257a6a kernel/trace/blktrace.c Jens Axboe 2017-11-19 618
__blk_trace_remove(q);
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 619 return
-EFAULT;
9a8c28c8311e30 kernel/trace/blktrace.c Dmitry Monakhov 2010-02-27 620 }
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 621 return
0;
171044d449611c block/blktrace.c Arnd Bergmann 2007-10-09 622 }
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 623
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 624 int
blk_trace_setup(struct request_queue *q, char *name, dev_t dev,
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 625
struct block_device *bdev,
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 626
char __user *arg)
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 627 {
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 628 int
ret;
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 629
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 630
mutex_lock(&q->blk_trace_mutex);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 631 ret =
__blk_trace_setup(q, name, dev, bdev, arg);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 632
mutex_unlock(&q->blk_trace_mutex);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 633
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 634 return
ret;
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 635 }
6da127ad0918f9 block/blktrace.c Christof Schmitt 2008-01-11 @636
EXPORT_SYMBOL_GPL(blk_trace_setup);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 637
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 638 #if
defined(CONFIG_COMPAT) && defined(CONFIG_X86_64)
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 639 static
int compat_blk_trace_setup(struct request_queue *q, char *name,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 640
dev_t dev, struct block_device *bdev,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 641
char __user *arg)
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 642 {
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 643 struct
blk_user_trace_setup buts;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 644 struct
compat_blk_user_trace_setup cbuts;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 645 int
ret;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 646
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 647 if
(copy_from_user(&cbuts, arg, sizeof(cbuts)))
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 648 return
-EFAULT;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 649
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 650 buts =
(struct blk_user_trace_setup) {
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 651
.act_mask = cbuts.act_mask,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 652
.buf_size = cbuts.buf_size,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 653 .buf_nr
= cbuts.buf_nr,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 654
.start_lba = cbuts.start_lba,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 655
.end_lba = cbuts.end_lba,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 656 .pid =
cbuts.pid,
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 657 };
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 658
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 659 ret =
do_blk_trace_setup(q, name, dev, bdev, &buts);
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 660 if
(ret)
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 661 return
ret;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 662
f8c5e94486671f kernel/trace/blktrace.c Chen Gang 2013-11-03 663 if
(copy_to_user(arg, &buts.name, ARRAY_SIZE(buts.name))) {
2967acbb257a6a kernel/trace/blktrace.c Jens Axboe 2017-11-19 664
__blk_trace_remove(q);
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 665 return
-EFAULT;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 666 }
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 667
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 668 return
0;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 669 }
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 670 #endif
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 671
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 @672 static
int __blk_trace_startstop(struct request_queue *q, int start)
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 673 {
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 674 int
ret;
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 675 struct
blk_trace *bt;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 676
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 677 bt =
rcu_dereference_protected(q->blk_trace,
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 678
lockdep_is_held(&q->blk_trace_mutex));
939b366977d29b block/blktrace.c Arnaldo Carvalho de Melo 2009-02-03 679 if (bt
== NULL)
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 680 return
-EINVAL;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 681
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 682 /*
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 683 * For
starting a trace, we can transition from a setup or stopped
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 684 *
trace. For stopping a trace, the state must be running
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 685 */
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 686 ret =
-EINVAL;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 687 if
(start) {
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 688 if
(bt->trace_state == Blktrace_setup ||
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 689
bt->trace_state == Blktrace_stopped) {
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 690
blktrace_seq++;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 691
smp_mb();
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 692
bt->trace_state = Blktrace_running;
a404d5576bbe58 kernel/trace/blktrace.c Jan Kara 2013-09-17 693
spin_lock_irq(&running_trace_lock);
a404d5576bbe58 kernel/trace/blktrace.c Jan Kara 2013-09-17 694
list_add(&bt->running_list, &running_trace_list);
a404d5576bbe58 kernel/trace/blktrace.c Jan Kara 2013-09-17 695
spin_unlock_irq(&running_trace_lock);
be1c63411addba block/blktrace.c Olaf Kirch 2006-12-01 696
be1c63411addba block/blktrace.c Olaf Kirch 2006-12-01 697
trace_note_time(bt);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 698 ret =
0;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 699 }
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 700 } else
{
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 701 if
(bt->trace_state == Blktrace_running) {
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 702
bt->trace_state = Blktrace_stopped;
a404d5576bbe58 kernel/trace/blktrace.c Jan Kara 2013-09-17 703
spin_lock_irq(&running_trace_lock);
a404d5576bbe58 kernel/trace/blktrace.c Jan Kara 2013-09-17 704
list_del_init(&bt->running_list);
a404d5576bbe58 kernel/trace/blktrace.c Jan Kara 2013-09-17 705
spin_unlock_irq(&running_trace_lock);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 706
relay_flush(bt->rchan);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 707 ret =
0;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 708 }
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 709 }
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 710
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 711 return
ret;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 712 }
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 713
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 714 int
blk_trace_startstop(struct request_queue *q, int start)
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 715 {
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 716 int
ret;
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 717
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 718
mutex_lock(&q->blk_trace_mutex);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 719 ret =
__blk_trace_startstop(q, start);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 720
mutex_unlock(&q->blk_trace_mutex);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 721
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 722 return
ret;
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 723 }
6da127ad0918f9 block/blktrace.c Christof Schmitt 2008-01-11 @724
EXPORT_SYMBOL_GPL(blk_trace_startstop);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 725
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 726 /*
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 727 * When
reading or writing the blktrace sysfs files, the references to the
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 728 * opened
sysfs or device files should prevent the underlying block device
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 729 * from
being removed. So no further delete protection is really needed.
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 730 */
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 731
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 732 /**
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 733 *
blk_trace_ioctl: - handle the ioctls associated with tracing
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 734 *
@bdev: the block device
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 735 *
@cmd: the ioctl cmd
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 736 *
@arg: the argument data, if any
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 737 *
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 738 **/
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 739 int
blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 740 {
165125e1e480f9 block/blktrace.c Jens Axboe 2007-07-24 741 struct
request_queue *q;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 742 int ret,
start = 0;
6da127ad0918f9 block/blktrace.c Christof Schmitt 2008-01-11 743 char
b[BDEVNAME_SIZE];
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 744
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 745 q =
bdev_get_queue(bdev);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 746 if (!q)
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 747 return
-ENXIO;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 748
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 749
mutex_lock(&q->blk_trace_mutex);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 750
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 751 switch
(cmd) {
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 752 case
BLKTRACESETUP:
f36f21ecca9ee6 block/blktrace.c Jean Delvare 2008-05-12 753
bdevname(bdev, b);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 754 ret =
__blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 755 break;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 756 #if
defined(CONFIG_COMPAT) && defined(CONFIG_X86_64)
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 757 case
BLKTRACESETUP32:
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 758
bdevname(bdev, b);
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 759 ret =
compat_blk_trace_setup(q, b, bdev->bd_dev, bdev, arg);
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 760 break;
62c2a7d969f301 kernel/trace/blktrace.c Arnd Bergmann 2010-07-07 761 #endif
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 762 case
BLKTRACESTART:
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 763 start =
1;
f6d85f04e29859 kernel/trace/blktrace.c Mathieu Malaterre 2019-01-14 764 /* fall
through */
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 765 case
BLKTRACESTOP:
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 766 ret =
__blk_trace_startstop(q, start);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 767 break;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 768 case
BLKTRACETEARDOWN:
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 769 ret =
__blk_trace_remove(q);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 770 break;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 771
default:
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 772 ret =
-ENOTTY;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 773 break;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 774 }
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 775
5acb3cc2c2e9d3 kernel/trace/blktrace.c Waiman Long 2017-09-20 776
mutex_unlock(&q->blk_trace_mutex);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 777 return
ret;
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 778 }
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 779
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 780 /**
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 781 *
blk_trace_shutdown: - stop and cleanup trace structures
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 782 * @q:
the request queue associated with the device
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 783 *
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 784 **/
165125e1e480f9 block/blktrace.c Jens Axboe 2007-07-24 785 void
blk_trace_shutdown(struct request_queue *q)
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 786 {
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 787
mutex_lock(&q->blk_trace_mutex);
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 788 if
(rcu_dereference_protected(q->blk_trace,
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 789
lockdep_is_held(&q->blk_trace_mutex))) {
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 790
__blk_trace_startstop(q, 0);
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 791
__blk_trace_remove(q);
2056a782f8e7e6 block/blktrace.c Jens Axboe 2006-03-23 792 }
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 793
1f2cac107c591c kernel/trace/blktrace.c Jens Axboe 2017-11-05 794
mutex_unlock(&q->blk_trace_mutex);
6c5c934153513d block/blktrace.c Alexey Dobriyan 2006-09-29 795 }
5f3ea37c7716db block/blktrace.c Arnaldo Carvalho de Melo 2008-10-30 796
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 797 #ifdef
CONFIG_BLK_CGROUP
67c0496e87d193 kernel/trace/blktrace.c Tejun Heo 2019-11-04 @798 static
u64 blk_trace_bio_get_cgid(struct request_queue *q, struct bio *bio)
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 799 {
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 800 struct
blk_trace *bt;
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 801
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 802 /* We
don't use the 'bt' value here except as an optimization... */
c780e86dd48ef6 kernel/trace/blktrace.c Jan Kara 2020-02-06 803 bt =
rcu_dereference_protected(q->blk_trace, 1);
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 804 if (!bt
|| !(blk_tracer_flags.val & TRACE_BLK_OPT_CGROUP))
67c0496e87d193 kernel/trace/blktrace.c Tejun Heo 2019-11-04 805 return
0;
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 806
db6638d7d177a8 kernel/trace/blktrace.c Dennis Zhou 2018-12-05 807 if
(!bio->bi_blkg)
67c0496e87d193 kernel/trace/blktrace.c Tejun Heo 2019-11-04 808 return
0;
743210386c0354 kernel/trace/blktrace.c Tejun Heo 2019-11-04 809 return
cgroup_id(bio_blkcg(bio)->css.cgroup);
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 810 }
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 811 #else
67c0496e87d193 kernel/trace/blktrace.c Tejun Heo 2019-11-04 812 u64
blk_trace_bio_get_cgid(struct request_queue *q, struct bio *bio)
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 813 {
67c0496e87d193 kernel/trace/blktrace.c Tejun Heo 2019-11-04 814 return
0;
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 815 }
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 816 #endif
ca1136c99b66b1 kernel/trace/blktrace.c Shaohua Li 2017-07-12 817
:::::: The code at line 603 was first introduced by commit
:::::: 1f2cac107c591c24b60b115d6050adc213d10fc0 blktrace: fix unlocked access to
init/start-stop/teardown
:::::: TO: Jens Axboe <axboe(a)kernel.dk>
:::::: CC: Jens Axboe <axboe(a)kernel.dk>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org