mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
FreeBSD: Cleanup zfs_readdir()
The FreeBSD project's coverity scans found dead code in `zfs_readdir()`. Also, the comment above `zfs_readdir()` is out of date. I fixed the comment and deleted all of the dead code, plus additional dead code that was found upon review. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Ryan Moeller <ryan@iXsystems.com> Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Closes #13924
This commit is contained in:
parent
9276e202eb
commit
3f400b0f58
@ -21,7 +21,6 @@ noinst_HEADERS = \
|
||||
%D%/spl/sys/dirent.h \
|
||||
%D%/spl/sys/disp.h \
|
||||
%D%/spl/sys/dkio.h \
|
||||
%D%/spl/sys/extdirent.h \
|
||||
%D%/spl/sys/fcntl.h \
|
||||
%D%/spl/sys/file.h \
|
||||
%D%/spl/sys/freebsd_rwlock.h \
|
||||
|
@ -1,71 +0,0 @@
|
||||
/*
|
||||
* CDDL HEADER START
|
||||
*
|
||||
* The contents of this file are subject to the terms of the
|
||||
* Common Development and Distribution License (the "License").
|
||||
* You may not use this file except in compliance with the License.
|
||||
*
|
||||
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
||||
* or https://opensource.org/licenses/CDDL-1.0.
|
||||
* See the License for the specific language governing permissions
|
||||
* and limitations under the License.
|
||||
*
|
||||
* When distributing Covered Code, include this CDDL HEADER in each
|
||||
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
||||
* If applicable, add the following below this CDDL HEADER, with the
|
||||
* fields enclosed by brackets "[]" replaced with your own identifying
|
||||
* information: Portions Copyright [yyyy] [name of copyright owner]
|
||||
*
|
||||
* CDDL HEADER END
|
||||
*/
|
||||
/*
|
||||
* Copyright 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
* Use is subject to license terms.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_EXTDIRENT_H
|
||||
#define _SYS_EXTDIRENT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/dirent.h>
|
||||
|
||||
/*
|
||||
* Extended file-system independent directory entry. This style of
|
||||
* dirent provides additional informational flag bits for each
|
||||
* directory entry. This dirent will be returned instead of the
|
||||
* standard dirent if a VOP_READDIR() requests dirent flags via
|
||||
* V_RDDIR_ENTFLAGS, and if the file system supports the flags.
|
||||
*/
|
||||
typedef struct edirent {
|
||||
ino64_t ed_ino; /* "inode number" of entry */
|
||||
off64_t ed_off; /* offset of disk directory entry */
|
||||
uint32_t ed_eflags; /* per-entry flags */
|
||||
unsigned short ed_reclen; /* length of this record */
|
||||
char ed_name[1]; /* name of file */
|
||||
} edirent_t;
|
||||
|
||||
#define EDIRENT_RECLEN(namelen) \
|
||||
((offsetof(edirent_t, ed_name[0]) + 1 + (namelen) + 7) & ~ 7)
|
||||
#define EDIRENT_NAMELEN(reclen) \
|
||||
((reclen) - (offsetof(edirent_t, ed_name[0])))
|
||||
|
||||
/*
|
||||
* Extended entry flags
|
||||
* Extended entries include a bitfield of extra information
|
||||
* regarding that entry.
|
||||
*/
|
||||
#define ED_CASE_CONFLICT 0x10 /* Disconsidering case, entry is not unique */
|
||||
|
||||
/*
|
||||
* Extended flags accessor function
|
||||
*/
|
||||
#define ED_CASE_CONFLICTS(x) ((x)->ed_eflags & ED_CASE_CONFLICT)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _SYS_EXTDIRENT_H */
|
@ -44,8 +44,6 @@
|
||||
#define IS_DEVVP(vp) \
|
||||
((vp)->v_type == VCHR || (vp)->v_type == VBLK || (vp)->v_type == VFIFO)
|
||||
|
||||
#define V_XATTRDIR 0x0000 /* attribute unnamed directory */
|
||||
|
||||
#define AV_SCANSTAMP_SZ 32 /* length of anti-virus scanstamp */
|
||||
|
||||
/*
|
||||
@ -193,11 +191,6 @@
|
||||
#define MODEMASK 07777 /* mode bits plus permission bits */
|
||||
#define PERMMASK 00777 /* permission bits */
|
||||
|
||||
/*
|
||||
* VOP_ACCESS flags
|
||||
*/
|
||||
#define V_ACE_MASK 0x1 /* mask represents NFSv4 ACE permissions */
|
||||
|
||||
/*
|
||||
* Flags for vnode operations.
|
||||
*/
|
||||
@ -234,12 +227,6 @@ struct taskq;
|
||||
#define CREATE_XATTR_DIR 0x04 /* Create extended attr dir */
|
||||
#define LOOKUP_HAVE_SYSATTR_DIR 0x08 /* Already created virtual GFS dir */
|
||||
|
||||
/*
|
||||
* Flags for VOP_READDIR
|
||||
*/
|
||||
#define V_RDDIR_ENTFLAGS 0x01 /* request dirent flags */
|
||||
#define V_RDDIR_ACCFILTER 0x02 /* filter out inaccessible dirents */
|
||||
|
||||
/*
|
||||
* Public vnode manipulation functions.
|
||||
*/
|
||||
|
@ -33,7 +33,6 @@
|
||||
#include <sys/resource.h>
|
||||
#include <sys/vfs.h>
|
||||
#include <sys/vnode.h>
|
||||
#include <sys/extdirent.h>
|
||||
#include <sys/file.h>
|
||||
#include <sys/kmem.h>
|
||||
#include <sys/uio.h>
|
||||
|
@ -76,7 +76,6 @@
|
||||
#include <sys/zfs_quota.h>
|
||||
#include <sys/zfs_sa.h>
|
||||
#include <sys/zfs_rlock.h>
|
||||
#include <sys/extdirent.h>
|
||||
#include <sys/bio.h>
|
||||
#include <sys/buf.h>
|
||||
#include <sys/sched.h>
|
||||
@ -1648,10 +1647,11 @@ zfs_rmdir(znode_t *dzp, const char *name, znode_t *cwd, cred_t *cr, int flags)
|
||||
* and return buffer.
|
||||
* cr - credentials of caller.
|
||||
* ct - caller context
|
||||
* flags - case flags
|
||||
*
|
||||
* OUT: uio - updated offset and range, buffer filled.
|
||||
* eofp - set to true if end-of-file detected.
|
||||
* ncookies- number of entries in cookies
|
||||
* cookies - offsets to directory entries
|
||||
*
|
||||
* RETURN: 0 on success, error code on failure.
|
||||
*
|
||||
@ -1669,7 +1669,6 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
|
||||
{
|
||||
znode_t *zp = VTOZ(vp);
|
||||
iovec_t *iovp;
|
||||
edirent_t *eodp;
|
||||
dirent64_t *odp;
|
||||
zfsvfs_t *zfsvfs = zp->z_zfsvfs;
|
||||
objset_t *os;
|
||||
@ -1687,7 +1686,6 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
|
||||
uint8_t type;
|
||||
int ncooks;
|
||||
cookie_t *cooks = NULL;
|
||||
int flags = 0;
|
||||
|
||||
if ((error = zfs_enter_verify_zp(zfsvfs, zp, FTAG)) != 0)
|
||||
return (error);
|
||||
@ -1755,7 +1753,6 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
|
||||
outbuf = NULL;
|
||||
odp = (struct dirent64 *)iovp->iov_base;
|
||||
}
|
||||
eodp = (struct edirent *)odp;
|
||||
|
||||
if (ncookies != NULL) {
|
||||
/*
|
||||
@ -1824,25 +1821,7 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
|
||||
type = ZFS_DIRENT_TYPE(zap.za_first_integer);
|
||||
}
|
||||
|
||||
if (flags & V_RDDIR_ACCFILTER) {
|
||||
/*
|
||||
* If we have no access at all, don't include
|
||||
* this entry in the returned information
|
||||
*/
|
||||
znode_t *ezp;
|
||||
if (zfs_zget(zp->z_zfsvfs, objnum, &ezp) != 0)
|
||||
goto skip_entry;
|
||||
if (!zfs_has_access(ezp, cr)) {
|
||||
vrele(ZTOV(ezp));
|
||||
goto skip_entry;
|
||||
}
|
||||
vrele(ZTOV(ezp));
|
||||
}
|
||||
|
||||
if (flags & V_RDDIR_ENTFLAGS)
|
||||
reclen = EDIRENT_RECLEN(strlen(zap.za_name));
|
||||
else
|
||||
reclen = DIRENT64_RECLEN(strlen(zap.za_name));
|
||||
reclen = DIRENT64_RECLEN(strlen(zap.za_name));
|
||||
|
||||
/*
|
||||
* Will this entry fit in the buffer?
|
||||
@ -1857,33 +1836,19 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (flags & V_RDDIR_ENTFLAGS) {
|
||||
/*
|
||||
* Add extended flag entry:
|
||||
*/
|
||||
eodp->ed_ino = objnum;
|
||||
eodp->ed_reclen = reclen;
|
||||
/* NOTE: ed_off is the offset for the *next* entry */
|
||||
next = &(eodp->ed_off);
|
||||
eodp->ed_eflags = zap.za_normalization_conflict ?
|
||||
ED_CASE_CONFLICT : 0;
|
||||
(void) strncpy(eodp->ed_name, zap.za_name,
|
||||
EDIRENT_NAMELEN(reclen));
|
||||
eodp = (edirent_t *)((intptr_t)eodp + reclen);
|
||||
} else {
|
||||
/*
|
||||
* Add normal entry:
|
||||
*/
|
||||
odp->d_ino = objnum;
|
||||
odp->d_reclen = reclen;
|
||||
odp->d_namlen = strlen(zap.za_name);
|
||||
/* NOTE: d_off is the offset for the *next* entry. */
|
||||
next = &odp->d_off;
|
||||
strlcpy(odp->d_name, zap.za_name, odp->d_namlen + 1);
|
||||
odp->d_type = type;
|
||||
dirent_terminate(odp);
|
||||
odp = (dirent64_t *)((intptr_t)odp + reclen);
|
||||
}
|
||||
/*
|
||||
* Add normal entry:
|
||||
*/
|
||||
odp->d_ino = objnum;
|
||||
odp->d_reclen = reclen;
|
||||
odp->d_namlen = strlen(zap.za_name);
|
||||
/* NOTE: d_off is the offset for the *next* entry. */
|
||||
next = &odp->d_off;
|
||||
strlcpy(odp->d_name, zap.za_name, odp->d_namlen + 1);
|
||||
odp->d_type = type;
|
||||
dirent_terminate(odp);
|
||||
odp = (dirent64_t *)((intptr_t)odp + reclen);
|
||||
|
||||
outcount += reclen;
|
||||
|
||||
ASSERT3S(outcount, <=, bufsize);
|
||||
@ -1893,7 +1858,6 @@ zfs_readdir(vnode_t *vp, zfs_uio_t *uio, cred_t *cr, int *eofp,
|
||||
dmu_prefetch(os, objnum, 0, 0, 0,
|
||||
ZIO_PRIORITY_SYNC_READ);
|
||||
|
||||
skip_entry:
|
||||
/*
|
||||
* Move to the next entry, fill in the previous offset.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user