summaryrefslogtreecommitdiffstats
path: root/sys/fs
diff options
context:
space:
mode:
authorbdrewery <bdrewery@FreeBSD.org>2014-03-14 13:55:48 +0000
committerbdrewery <bdrewery@FreeBSD.org>2014-03-14 13:55:48 +0000
commit104b00d969c797674a31a020661b20ebe0bce2f2 (patch)
tree646669e2a832f5f00cf2e26ff3100907d2869591 /sys/fs
parent3bb457bf57a12c1bce94de7a45b8df15a7b171fc (diff)
downloadFreeBSD-src-104b00d969c797674a31a020661b20ebe0bce2f2.zip
FreeBSD-src-104b00d969c797674a31a020661b20ebe0bce2f2.tar.gz
Rename cnt to maxcookies and change its use as the condition for when to
lookup cookies to be less obscure. No functional change. Since r245115, cnt has not really been needed in tmpfs_dir_getdents(). Keep it for the MPASS() for now though. Sponsored by: EMC / Isilon Storage Division MFC after: 2 weeks
Diffstat (limited to 'sys/fs')
-rw-r--r--sys/fs/tmpfs/tmpfs_subr.c17
-rw-r--r--sys/fs/tmpfs/tmpfs_vnops.c18
2 files changed, 21 insertions, 14 deletions
diff --git a/sys/fs/tmpfs/tmpfs_subr.c b/sys/fs/tmpfs/tmpfs_subr.c
index 727fbe4..1308377 100644
--- a/sys/fs/tmpfs/tmpfs_subr.c
+++ b/sys/fs/tmpfs/tmpfs_subr.c
@@ -1147,7 +1147,7 @@ tmpfs_dir_getdotdotdent(struct tmpfs_node *node, struct uio *uio)
* error code if another error happens.
*/
int
-tmpfs_dir_getdents(struct tmpfs_node *node, struct uio *uio, int cnt,
+tmpfs_dir_getdents(struct tmpfs_node *node, struct uio *uio, int maxcookies,
u_long *cookies, int *ncookies)
{
struct tmpfs_dir_cursor dc;
@@ -1173,7 +1173,7 @@ tmpfs_dir_getdents(struct tmpfs_node *node, struct uio *uio, int cnt,
if (error != 0)
return (error);
uio->uio_offset = TMPFS_DIRCOOKIE_DOTDOT;
- if (cnt != 0)
+ if (cookies != NULL)
cookies[(*ncookies)++] = off = uio->uio_offset;
case TMPFS_DIRCOOKIE_DOTDOT:
error = tmpfs_dir_getdotdotdent(node, uio);
@@ -1181,7 +1181,7 @@ tmpfs_dir_getdents(struct tmpfs_node *node, struct uio *uio, int cnt,
return (error);
de = tmpfs_dir_first(node, &dc);
uio->uio_offset = tmpfs_dirent_cookie(de);
- if (cnt != 0)
+ if (cookies != NULL)
cookies[(*ncookies)++] = off = uio->uio_offset;
/* EOF. */
if (de == NULL)
@@ -1193,7 +1193,7 @@ tmpfs_dir_getdents(struct tmpfs_node *node, struct uio *uio, int cnt,
de = tmpfs_dir_lookup_cookie(node, uio->uio_offset, &dc);
if (de == NULL)
return (EINVAL);
- if (cnt != 0)
+ if (cookies != NULL)
off = tmpfs_dirent_cookie(de);
}
@@ -1261,18 +1261,19 @@ tmpfs_dir_getdents(struct tmpfs_node *node, struct uio *uio, int cnt,
error = uiomove(&d, d.d_reclen, uio);
if (error == 0) {
de = tmpfs_dir_next(node, &dc);
- if (cnt != 0) {
+ if (cookies != NULL) {
off = tmpfs_dirent_cookie(de);
- MPASS(*ncookies < cnt);
+ MPASS(*ncookies < maxcookies);
cookies[(*ncookies)++] = off;
}
}
} while (error == 0 && uio->uio_resid > 0 && de != NULL);
- /* Update the offset and cache. */
- if (cnt == 0)
+ /* Skip setting off when using cookies as it is already done above. */
+ if (cookies == NULL)
off = tmpfs_dirent_cookie(de);
+ /* Update the offset and cache. */
uio->uio_offset = off;
node->tn_dir.tn_readdir_lastn = off;
node->tn_dir.tn_readdir_lastp = de;
diff --git a/sys/fs/tmpfs/tmpfs_vnops.c b/sys/fs/tmpfs/tmpfs_vnops.c
index 073a9fe..7f74f20 100644
--- a/sys/fs/tmpfs/tmpfs_vnops.c
+++ b/sys/fs/tmpfs/tmpfs_vnops.c
@@ -1199,32 +1199,38 @@ tmpfs_readdir(struct vop_readdir_args *v)
int error;
ssize_t startresid;
- int cnt = 0;
+ int maxcookies;
struct tmpfs_node *node;
/* This operation only makes sense on directory nodes. */
if (vp->v_type != VDIR)
return ENOTDIR;
+ maxcookies = 0;
node = VP_TO_TMPFS_DIR(vp);
startresid = uio->uio_resid;
+ /* Allocate cookies for NFS and compat modules. */
if (cookies != NULL && ncookies != NULL) {
- cnt = howmany(node->tn_size, sizeof(struct tmpfs_dirent)) + 2;
- *cookies = malloc(cnt * sizeof(**cookies), M_TEMP, M_WAITOK);
+ maxcookies = howmany(node->tn_size,
+ sizeof(struct tmpfs_dirent)) + 2;
+ *cookies = malloc(maxcookies * sizeof(**cookies), M_TEMP,
+ M_WAITOK);
*ncookies = 0;
}
- if (cnt == 0)
+ if (cookies == NULL)
error = tmpfs_dir_getdents(node, uio, 0, NULL, NULL);
else
- error = tmpfs_dir_getdents(node, uio, cnt, *cookies, ncookies);
+ error = tmpfs_dir_getdents(node, uio, maxcookies, *cookies,
+ ncookies);
+ /* Buffer was filled without hitting EOF. */
if (error == EJUSTRETURN)
error = (uio->uio_resid != startresid) ? 0 : EINVAL;
- if (error != 0 && cnt != 0)
+ if (error != 0 && cookies != NULL)
free(*cookies, M_TEMP);
if (eofflag != NULL)
OpenPOWER on IntegriCloud