On mercoledì 11 gennaio 2023 03:34:47 CET Al Viro wrote: > On Mon, Jan 09, 2023 at 06:06:37PM +0100, Fabio M. De Francesco wrote: > > -struct sysv_dir_entry * sysv_dotdot (struct inode *dir, struct page **p) > > +struct sysv_dir_entry *sysv_dotdot(struct inode *dir, struct page **p) > > > > { > > > > - struct page *page = dir_get_page(dir, 0); > > - struct sysv_dir_entry *de = NULL; > > + struct page *page = NULL; > > + struct sysv_dir_entry *de = dir_get_page(dir, 0, &page); > > > > - if (!IS_ERR(page)) { > > - de = (struct sysv_dir_entry*) page_address(page) + 1; > > + if (!IS_ERR(de)) { > > > > *p = page; > > > > + return (struct sysv_dir_entry *)page_address(page) + 1; > > > > } > > > > - return de; > > + return NULL; > > > > } > > Would be better off with > > struct sysv_dir_entry *de = dir_get_page(dir, 0, p); > > if (!IS_ERR(de)) > return de + 1; // ".." is the second directory entry > return NULL; > > IMO... I totally agree with you... 1) This comment is a good way to explain why we return "de + 1". 2) "*p = page" is redundant, so it's not necessary because we assign the out argument in dir_get_page() if and only if read_mapping_page() doesn't fail. I will send v3 asap. Thanks for your suggestions. Fabio