diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c index 1d38ed9a15d..711c0a6c25a 100644 --- a/sys/fs/tmpfs/tmpfs_vnops.c +++ b/sys/fs/tmpfs/tmpfs_vnops.c @@ -1219,22 +1219,25 @@ tmpfs_readdir(struct vop_readdir_args *v) startoff = uio->uio_offset; - switch (startoff) { - case TMPFS_DIRCOOKIE_DOT: + if (uio->uio_offset == TMPFS_DIRCOOKIE_DOT) { error = tmpfs_dir_getdotdent(node, uio); - if (error == 0) - cnt++; - break; - case TMPFS_DIRCOOKIE_DOTDOT: - error = tmpfs_dir_getdotdotdent(node, uio); - if (error == 0) - cnt++; - break; - default: - error = tmpfs_dir_getdents(node, uio, &cnt); - MPASS(error >= -1); + if (error != 0) + goto outok; + cnt++; } + if (uio->uio_offset == TMPFS_DIRCOOKIE_DOTDOT) { + error = tmpfs_dir_getdotdotdent(node, uio); + if (error != 0) + goto outok; + cnt++; + } + + error = tmpfs_dir_getdents(node, uio, &cnt); + +outok: + MPASS(error >= -1); + if (error == -1) error = 0;