On Tue, Mar 03, 2020 at 11:53:03PM +0300, Alexey Dobriyan wrote: > On Tue, Mar 03, 2020 at 12:29:23PM -0800, Matthew Wilcox wrote: > > On Tue, Mar 03, 2020 at 10:55:29PM +0300, Alexey Dobriyan wrote: > > > On Sat, Feb 29, 2020 at 08:59:08AM -0800, Matthew Wilcox wrote: > > > > -static void *m_next(struct seq_file *m, void *v, loff_t *pos) > > > > +static void *m_next(struct seq_file *m, void *v, loff_t *ppos) > > > > > > This looks like hungarian notation. > > > > It's the standard naming convention used throughout the VFS. loff_t is > > pos, loff_t * is ppos. > > > > $ git grep 'loff_t \*' fs/*.c |wc > > 77 556 5233 > > $ git grep 'loff_t \*ppos' fs/*.c |wc > > 43 309 2974 > > $ git grep 'loff_t \*pos' fs/*.c |wc > > 22 168 1524 > > Yes, people copy-pasted terrible thing for years! > Oh well, whatever... In an environment where we sometimes pass loff_t and sometimes pass loff_t *, this convention is a great way to catch copy-and-paste mistakes. If I have 'pos += done' in a function which takes a loff_t pos, and I copy-and-paste it to a function which takes a 'loff_t *pos', it's going to create a bug that hits at runtime. If that function takes an loff_t *ppos instead, it'll be a compile-time error, and I'll know to transform it to *ppos += done;