hw/9pfs: make get_st_gen() return ENOTTY error on special files

Currently we silently ignore getversion requests for anything except
file or directory. Let's instead return ENOTTY error to indicate that
getversion is not supported. It makes implementation consistent on
all not-supported cases.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
This commit is contained in:
Kirill A. Shutemov 2014-01-28 17:08:26 +02:00 committed by Aneesh Kumar K.V
parent b9317661d1
commit 1a9978a51a
3 changed files with 6 additions and 3 deletions

View File

@ -591,7 +591,8 @@ static int handle_ioc_getversion(FsContext *ctx, V9fsPath *path,
* We can get fd for regular files and directories only * We can get fd for regular files and directories only
*/ */
if (!S_ISREG(st_mode) && !S_ISDIR(st_mode)) { if (!S_ISREG(st_mode) && !S_ISDIR(st_mode)) {
return 0; errno = ENOTTY;
return -1;
} }
err = handle_open(ctx, path, O_RDONLY, &fid_open); err = handle_open(ctx, path, O_RDONLY, &fid_open);
if (err < 0) { if (err < 0) {

View File

@ -1077,7 +1077,8 @@ static int local_ioc_getversion(FsContext *ctx, V9fsPath *path,
* We can get fd for regular files and directories only * We can get fd for regular files and directories only
*/ */
if (!S_ISREG(st_mode) && !S_ISDIR(st_mode)) { if (!S_ISREG(st_mode) && !S_ISDIR(st_mode)) {
return 0; errno = ENOTTY;
return -1;
} }
err = local_open(ctx, path, O_RDONLY, &fid_open); err = local_open(ctx, path, O_RDONLY, &fid_open);
if (err < 0) { if (err < 0) {

View File

@ -1086,7 +1086,8 @@ static int proxy_ioc_getversion(FsContext *fs_ctx, V9fsPath *path,
* we can get fd for regular files and directories only * we can get fd for regular files and directories only
*/ */
if (!S_ISREG(st_mode) && !S_ISDIR(st_mode)) { if (!S_ISREG(st_mode) && !S_ISDIR(st_mode)) {
return 0; errno = ENOTTY;
return -1;
} }
err = v9fs_request(fs_ctx->private, T_GETVERSION, st_gen, "s", path); err = v9fs_request(fs_ctx->private, T_GETVERSION, st_gen, "s", path);
if (err < 0) { if (err < 0) {