Re: bio_add_folio argument order

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 28, 2021 at 10:58:44AM -0600, Jens Axboe wrote:
> On 4/28/21 10:50 AM, Matthew Wilcox wrote:
> > bio_add_page() has its arguments in the wrong order:
> > 
> > extern int bio_add_page(struct bio *, struct page *, unsigned int,unsigned int);
> > 
> > Oh, right, and the prototype commits the cardinal sin of just giving you
> > a pair of unsigned ints and doesn't bother to tell you what they mean.
> > I'll send a patch for that ... anyway:
> > 
> > int bio_add_page(struct bio *bio, struct page *page,
> >                  unsigned int len, unsigned int offset)
> > 
> > This fails to follow #4: https://ozlabs.org/~rusty/index.cgi/tech/2008-03-30.html
> > 
> > Here's what I want to do for the folio equivalent:
> > 
> > size_t bio_add_folio(struct bio *bio, struct folio *folio, size_t off,
> >                 size_t len)
> > 
> > This will make the transition more painful, but it does remove an irritant
> > for the future.  Any objections?
> 
> What's the point in shuffling len and offset around?

That almost everything else does (off, len).  Grepping include, here's
the (object, len, off) examples I found (will miss multi-line examples,
tried to use my best judgement, tried to exclude loff_t):

bio_add_zone_append_page
__bio_try_merge_page
__bio_add_page
bio_integrity_add_page
fscrypt_encrypt_block_inplace
fscrypt_decrypt_block_inplace
sg_set_page
sg_copy_buffer
sg_pcopy_from_buffer
sg_pcopy_to_buffer
sg_zero_buffer
copy_linear_skb

versus (object, off, len):

bpf_ctx_copy_t
->is_partially_uptodate
memcpy_from_page
memcpy_to_page
memzero_page
(basically all of the iomap functions)
kvm_write_guest_page
kvm_vcpu_write_guest_page
skb_gro_remcsum_process
nf_checksum_partial
perf_copy_f
read_module_eeprom
skb_frag_foreach_page
skb_to_sgvec_nomark
skb_to_sgvec
skb_send_sock
various skb_checksum_ops
sk_msg_clone
various gss_krb functions
xdr_process_buf
usercopy_warn
various network getfrag functions

Not _quite_ as one-sided as I thought, but there are basically three
families of functions (bio, fscrypt, sg) that are len-first (plus
copy_linear_skb() is out-of-family), then networking, filesystems,
highmem, perf, bpf, kvm are off-first.

So, you're the maintainer, it's your call ... do you want bio_add_folio()
to resemble the bio_add_page() calls as much as possible, or do you want
to migrate towards how the rest of the world works?



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux