On 01/12/2020 04:49, Chaitanya Kulkarni wrote: > On 11/30/20 04:29, Johannes Thumshirn wrote: >> On 30/11/2020 04:32, Chaitanya Kulkarni wrote: >>> + ret = __bio_iov_append_get_pages(bio, &from); >> Can't you just use bio_iov_iter_get_pages() here? >> >> It does have a >> >> if (WARN_ON_ONCE(is_bvec)) >> return -EINVAL; >> >> in it but I think that can be deleted. >> > That was my initial patch but it adds an extra function call to the > > fast patch for NVMeOF. We don't need any of the generic functionality from > > bio_iov_iter_get_pages() anyway. > > > Why add an extra function call overhead in the hot path for each I/O ? At least in my compilation (gcc 10.1) there's now extra function call overhead. __bio_iov_append_get_pages() get's fully inlined into bio_iov_iter_get_pages(). $ make block/bio.s CALL scripts/checksyscalls.sh CALL scripts/atomic/check-atomics.sh DESCEND objtool CC block/bio.s $ grep __bio_iov_append_get_pages block/bio.s $ grep bio_iov_iter_get_pages block/bio.s __kstrtab_bio_iov_iter_get_pages: .asciz "bio_iov_iter_get_pages" __kstrtabns_bio_iov_iter_get_pages: .section "___ksymtab_gpl+bio_iov_iter_get_pages", "a" __ksymtab_bio_iov_iter_get_pages: .long bio_iov_iter_get_pages- . .long __kstrtab_bio_iov_iter_get_pages- . .long __kstrtabns_bio_iov_iter_get_pages- . .globl bio_iov_iter_get_pages .type bio_iov_iter_get_pages, @function bio_iov_iter_get_pages: .type bio_iov_iter_get_pages.cold, @function bio_iov_iter_get_pages.cold: .size bio_iov_iter_get_pages, .-bio_iov_iter_get_pages .size bio_iov_iter_get_pages.cold, .-bio_iov_iter_get_pages.cold .type __UNIQUE_ID___addressable_bio_iov_iter_get_pages499, @object .size __UNIQUE_ID___addressable_bio_iov_iter_get_pages499, 8 __UNIQUE_ID___addressable_bio_iov_iter_get_pages499: .quad bio_iov_iter_get_pages