aboutsummaryrefslogtreecommitdiff
path: root/net/checksum.c
diff options
context:
space:
mode:
authorJan Dakinevich <jan.dakinevich@gmail.com>2017-09-20 08:48:51 +0200
committerGreg Kurz <groug@kaod.org>2017-09-20 08:48:51 +0200
commit6069537f4336a59054afda91a6545d3648c64619 (patch)
treefc01c161a713022e5886ae111ac1d34694a69102 /net/checksum.c
parentc51700273ad9802a21c19f8d2b4bcb67c38e74ac (diff)
9pfs: fix readdir() for 9p2000.u
If the client is using 9p2000.u, the following occurs: $ cd ${virtfs_shared_dir} $ mkdir -p a/b/c $ ls a/b ls: cannot access 'a/b/a': No such file or directory ls: cannot access 'a/b/b': No such file or directory a b c instead of the expected: $ ls a/b c This is a regression introduced by commit f57f5878578a; local_name_to_path() now resolves ".." and "." in paths, and v9fs_do_readdir_with_stat()->stat_to_v9stat() then copies the basename of the resulting path to the response. With the example above, this means that "." and ".." are turned into "b" and "a" respectively... stat_to_v9stat() currently assumes it is passed a full canonicalized path and uses it to do two different things: 1) to pass it to v9fs_co_readlink() in case the file is a symbolic link 2) to set the name field of the V9fsStat structure to the basename part of the given path It only has two users: v9fs_stat() and v9fs_do_readdir_with_stat(). v9fs_stat() really needs 1) and 2) to be performed since it starts with the full canonicalized path stored in the fid. It is different for v9fs_do_readdir_with_stat() though because the name we want to put into the V9fsStat structure is the d_name field of the dirent actually (ie, we want to keep the "." and ".." special names). So, we only need 1) in this case. This patch hence adds a basename argument to stat_to_v9stat(), to be used to set the name field of the V9fsStat structure, and moves the basename logic to v9fs_stat(). Signed-off-by: Jan Dakinevich <jan.dakinevich@gmail.com> (groug, renamed old name argument to path and updated changelog) Signed-off-by: Greg Kurz <groug@kaod.org>
Diffstat (limited to 'net/checksum.c')
0 files changed, 0 insertions, 0 deletions