[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 11/17] xen/hypfs: add getsize() and findentry() callbacks to hypfs_funcs
On 01.12.2020 09:21, Juergen Gross wrote: > @@ -197,28 +235,12 @@ static struct hypfs_entry *hypfs_get_entry_rel(struct > hypfs_entry_dir *dir, > end = strchr(path, '\0'); > name_len = end - path; > > - again = false; > + entry = dir->e.funcs->findentry(dir, path, name_len); > + if ( IS_ERR(entry) || !*end ) > + return entry; > > - list_for_each_entry ( entry, &dir->dirlist, list ) > - { > - int cmp = strncmp(path, entry->name, name_len); > - struct hypfs_entry_dir *d = container_of(entry, > - struct hypfs_entry_dir, > e); > - > - if ( cmp < 0 ) > - return ERR_PTR(-ENOENT); > - if ( !cmp && strlen(entry->name) == name_len ) > - { > - if ( !*end ) > - return entry; > - > - again = true; > - dir = d; > - path = end + 1; > - > - break; > - } > - } > + path = end + 1; > + dir = container_of(entry, struct hypfs_entry_dir, e); > } Looking at patch 15 my understanding is that "dir" may get invalidated by the call to the ->findentry() hook above. That is, use of dir has to be avoided between the two calls. This isn't at all obvious, so I wonder whether at least a comment wouldn't want adding to avoid future mistakes. And of course the same comment applies to the IS_ERR() use here vs NULL coming back that I already gave for the ->enter() call site. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |