|
[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 |