From 632c7e0816303bf8a2f859ba6ed505a5eb3929b5 Mon Sep 17 00:00:00 2001 From: Stephen Lord Date: Fri, 3 Oct 2003 00:29:00 -0500 Subject: [PATCH] [XFS] Code cleanup SGI Modid: 2.5.x-xfs:slinx:159439a --- fs/xfs/linux/xfs_iops.c | 1 + fs/xfs/linux/xfs_vnode.h | 107 ++++++++++++++++++++++++--------------- fs/xfs/quota/xfs_qm.h | 6 +-- fs/xfs/support/move.c | 50 ++++++------------ fs/xfs/support/move.h | 8 +-- fs/xfs/xfs_dinode.h | 34 ++++++------- fs/xfs/xfs_dir2.c | 2 +- fs/xfs/xfs_dir_leaf.c | 2 +- fs/xfs/xfs_vnodeops.c | 16 +++--- 9 files changed, 109 insertions(+), 117 deletions(-) diff --git a/fs/xfs/linux/xfs_iops.c b/fs/xfs/linux/xfs_iops.c index b37ac6166c20e..e0f9924f0a62e 100644 --- a/fs/xfs/linux/xfs_iops.c +++ b/fs/xfs/linux/xfs_iops.c @@ -386,6 +386,7 @@ linvfs_readlink( uio.uio_segflg = UIO_USERSPACE; uio.uio_resid = size; uio.uio_iovcnt = 1; + uio.uio_fmode = 0; VOP_READLINK(vp, &uio, NULL, error); if (error) diff --git a/fs/xfs/linux/xfs_vnode.h b/fs/xfs/linux/xfs_vnode.h index 70486f370a0ca..fe65817844b20 100644 --- a/fs/xfs/linux/xfs_vnode.h +++ b/fs/xfs/linux/xfs_vnode.h @@ -28,6 +28,37 @@ * For further information regarding this notice, see: * * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ + * + * Portions Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ #ifndef __XFS_VNODE_H__ #define __XFS_VNODE_H__ @@ -39,19 +70,9 @@ struct page_buf_bmap_s; struct attrlist_cursor_kern; /* - * Vnode types (unrelated to on-disk inodes). VNON means no type. + * Vnode types. VNON means no type. */ -typedef enum vtype { - VNON = 0, - VREG = 1, - VDIR = 2, - VBLK = 3, - VCHR = 4, - VLNK = 5, - VFIFO = 6, - VBAD = 7, - VSOCK = 8 -} vtype_t; +enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VFIFO, VBAD, VSOCK }; typedef xfs_ino_t vnumber_t; typedef struct dentry vname_t; @@ -115,14 +136,15 @@ typedef enum { #define LINVFS_GET_IP(vp) (&(vp)->v_inode) /* - * Conversion between vnode types/modes and encoded type/mode as - * seen by stat(2) and mknod(2). + * Convert between vnode types and inode formats (since POSIX.1 + * defines mode word of stat structure in terms of inode formats). */ -extern enum vtype iftovt_tab[]; -extern ushort vttoif_tab[]; -#define IFTOVT(M) (iftovt_tab[((M) & S_IFMT) >> 12]) -#define VTTOIF(T) (vttoif_tab[(int)(T)]) -#define MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT)) +extern enum vtype iftovt_tab[]; +extern u_short vttoif_tab[]; +#define IFTOVT(mode) (iftovt_tab[((mode) & S_IFMT) >> 12]) +#define VTTOIF(indx) (vttoif_tab[(int)(indx)]) +#define MAKEIMODE(indx, mode) (int)(VTTOIF(indx) | (mode)) + /* * Vnode flags. @@ -370,30 +392,29 @@ typedef struct vnodeops { /* * Vnode attributes. va_mask indicates those attributes the caller - * wants to set (setattr) or extract (getattr). + * wants to set or extract. */ typedef struct vattr { - int va_mask; /* bit-mask of attributes */ - vtype_t va_type; /* vnode type (for create) */ - mode_t va_mode; /* file access mode */ + int va_mask; /* bit-mask of attributes present */ + enum vtype va_type; /* vnode type (for create) */ + mode_t va_mode; /* file access mode and type */ + nlink_t va_nlink; /* number of references to file */ uid_t va_uid; /* owner user id */ gid_t va_gid; /* owner group id */ - xfs_ino_t va_nodeid; /* node id */ - nlink_t va_nlink; /* number of references to file */ + xfs_ino_t va_nodeid; /* file id */ xfs_off_t va_size; /* file size in bytes */ - timespec_t va_atime; /* time of last access */ - timespec_t va_mtime; /* time of last modification */ - timespec_t va_ctime; /* time file ``created'' */ - xfs_dev_t va_rdev; /* device the file represents */ - u_long va_blksize; /* fundamental block size */ - __int64_t va_nblocks; /* # of blocks allocated */ - u_long va_vcode; /* version code */ + u_long va_blocksize; /* blocksize preferred for i/o */ + struct timespec va_atime; /* time of last access */ + struct timespec va_mtime; /* time of last modification */ + struct timespec va_ctime; /* time file changed */ + u_int va_gen; /* generation number of file */ + xfs_dev_t va_rdev; /* device the special file represents */ + __int64_t va_nblocks; /* number of blocks allocated */ u_long va_xflags; /* random extended file flags */ u_long va_extsize; /* file extent size */ u_long va_nextents; /* number of extents in file */ u_long va_anextents; /* number of attr extents in file */ int va_projid; /* project id */ - u_int va_gencount; /* object generation count */ } vattr_t; /* @@ -449,11 +470,17 @@ typedef struct vattr { XFS_AT_TYPE|XFS_AT_BLKSIZE|XFS_AT_NBLOCKS|XFS_AT_VCODE|\ XFS_AT_NEXTENTS|XFS_AT_ANEXTENTS|XFS_AT_GENCOUNT) -#define VREAD 00400 -#define VWRITE 00200 -#define VEXEC 00100 -#define VSGID 02000 /* set group id on execution */ -#define MODEMASK 07777 /* mode bits plus permission bits */ +/* + * Modes. + */ +#define VSUID S_ISUID /* set user id on execution */ +#define VSGID S_ISGID /* set group id on execution */ +#define VSVTX S_ISVTX /* save swapped text even after use */ +#define VREAD S_IRUSR /* read, write, execute permissions */ +#define VWRITE S_IWUSR +#define VEXEC S_IXUSR + +#define MODEMASK S_IALLUGO /* mode bits plus permission bits */ /* * Check whether mandatory file locking is enabled. @@ -568,13 +595,9 @@ static __inline__ void vn_flagclr(struct vnode *vp, uint flag) * Flags to VOP_SETATTR/VOP_GETATTR. */ #define ATTR_UTIME 0x01 /* non-default utime(2) request */ -#define ATTR_EXEC 0x02 /* invocation from exec(2) */ -#define ATTR_COMM 0x04 /* yield common vp attributes */ #define ATTR_DMI 0x08 /* invocation from a DMI function */ #define ATTR_LAZY 0x80 /* set/get attributes lazily */ #define ATTR_NONBLOCK 0x100 /* return EAGAIN if operation would block */ -#define ATTR_NOLOCK 0x200 /* Don't grab any conflicting locks */ -#define ATTR_NOSIZETOK 0x400 /* Don't get the DVN_SIZE_READ token */ /* * Flags to VOP_FSYNC and VOP_RECLAIM. diff --git a/fs/xfs/quota/xfs_qm.h b/fs/xfs/quota/xfs_qm.h index c4bc3abdd6086..4924a1116fa93 100644 --- a/fs/xfs/quota/xfs_qm.h +++ b/fs/xfs/quota/xfs_qm.h @@ -165,9 +165,9 @@ typedef struct xfs_dquot_acct { * Users are allowed to have a usage exceeding their softlimit for * a period this long. */ -#define XFS_QM_BTIMELIMIT DQ_BTIMELIMIT -#define XFS_QM_RTBTIMELIMIT DQ_BTIMELIMIT -#define XFS_QM_ITIMELIMIT DQ_FTIMELIMIT +#define XFS_QM_BTIMELIMIT (7 * 24*60*60) /* 1 week */ +#define XFS_QM_RTBTIMELIMIT (7 * 24*60*60) /* 1 week */ +#define XFS_QM_ITIMELIMIT (7 * 24*60*60) /* 1 week */ #define XFS_QM_BWARNLIMIT 5 #define XFS_QM_IWARNLIMIT 5 diff --git a/fs/xfs/support/move.c b/fs/xfs/support/move.c index ceeb8e86bc92a..23974f142bc91 100644 --- a/fs/xfs/support/move.c +++ b/fs/xfs/support/move.c @@ -38,57 +38,37 @@ #include "debug.h" #include "move.h" -/* - * Move "n" bytes at byte address "cp"; "rw" indicates the direction - * of the move, and the I/O parameters are provided in "uio", which is - * update to reflect the data which was moved. Returns 0 on success or - * a non-zero errno on failure. +/* Read from kernel buffer at src to user/kernel buffer defined + * by the uio structure. Advance the pointer in the uio struct + * as we go. */ int -uiomove(void *cp, size_t n, enum uio_rw rw, struct uio *uio) +uio_read(caddr_t src, size_t len, struct uio *uio) { - register struct iovec *iov; + struct iovec *iov; u_int cnt; int error; - while (n > 0 && uio->uio_resid) { + if (len > 0 && uio->uio_resid) { iov = uio->uio_iov; cnt = (u_int)iov->iov_len; - if (cnt == 0) { - uio->uio_iov++; - uio->uio_iovcnt--; - continue; - } - if (cnt > n) - cnt = (u_int)n; - switch (uio->uio_segflg) { - case UIO_USERSPACE: - if (rw == UIO_READ) - error = copy_to_user(iov->iov_base, cp, cnt); - else - error = copy_from_user(cp, iov->iov_base, cnt); + if (cnt == 0) + return 0; + if (cnt > len) + cnt = (u_int)len; + if (uio->uio_segflg == UIO_USERSPACE) { + error = copy_to_user(iov->iov_base, src, cnt); if (error) return EFAULT; - break; - - - case UIO_SYSSPACE: - if (rw == UIO_READ) - memcpy(iov->iov_base, cp, cnt); - else - memcpy(cp, iov->iov_base, cnt); - break; - - default: + } else if (uio->uio_segflg == UIO_SYSSPACE) { + memcpy(iov->iov_base, src, cnt); + } else { ASSERT(0); - break; } iov->iov_base = (void *)((char *)iov->iov_base + cnt); iov->iov_len -= cnt; uio->uio_resid -= cnt; uio->uio_offset += cnt; - cp = (void *)((char *)cp + cnt); - n -= cnt; } return 0; } diff --git a/fs/xfs/support/move.h b/fs/xfs/support/move.h index 81a8260480d20..902bc54ccda37 100644 --- a/fs/xfs/support/move.h +++ b/fs/xfs/support/move.h @@ -47,11 +47,6 @@ typedef struct uio { ssize_t uio_resid; /* residual count */ } uio_t; -/* - * I/O direction. - */ -typedef enum uio_rw { UIO_READ, UIO_WRITE } uio_rw_t; - /* * Segment flag values. */ @@ -60,7 +55,6 @@ typedef enum uio_seg { UIO_SYSSPACE, /* uio_iov describes system space */ } uio_seg_t; - -extern int uiomove (void *, size_t, uio_rw_t, uio_t *); +extern int uio_read (caddr_t, size_t, uio_t *); #endif /* __XFS_SUPPORT_MOVE_H__ */ diff --git a/fs/xfs/xfs_dinode.h b/fs/xfs/xfs_dinode.h index 86968706bae71..69a2ca652b83a 100644 --- a/fs/xfs/xfs_dinode.h +++ b/fs/xfs/xfs_dinode.h @@ -439,25 +439,21 @@ void xfs_dfork_next_set(xfs_dinode_t *dip, int w, int n); /* * File types (mode field) */ -#define IFMT 0170000 /* type of file */ -#define IFIFO 0010000 /* named pipe (fifo) */ -#define IFCHR 0020000 /* character special */ -#define IFDIR 0040000 /* directory */ -#define IFBLK 0060000 /* block special */ -#define IFREG 0100000 /* regular */ -#define IFLNK 0120000 /* symbolic link */ -#define IFSOCK 0140000 /* socket */ -#define IFMNT 0160000 /* mount point */ - -/* - * File execution and access modes. - */ -#define ISUID 04000 /* set user id on execution */ -#define ISGID 02000 /* set group id on execution */ -#define ISVTX 01000 /* sticky directory */ -#define IREAD 0400 /* read, write, execute permissions */ -#define IWRITE 0200 -#define IEXEC 0100 +#define IFMT S_IFMT +#define IFSOCK S_IFSOCK +#define IFLNK S_IFLNK +#define IFREG S_IFREG +#define IFBLK S_IFBLK +#define IFDIR S_IFDIR +#define IFCHR S_IFCHR +#define IFIFO S_IFIFO + +#define ISUID S_ISUID +#define ISGID S_ISGID +#define ISVTX S_ISVTX +#define IREAD S_IRUSR +#define IWRITE S_IWUSR +#define IEXEC S_IXUSR #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BUF_TO_DINODE) xfs_dinode_t *xfs_buf_to_dinode(struct xfs_buf *bp); diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index 8ad6b5c1ac29f..38bb5bbbc08c1 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c @@ -773,7 +773,7 @@ xfs_dir2_put_dirent64_uio( idbp->d_off = pa->cook; idbp->d_name[namelen] = '\0'; memcpy(idbp->d_name, pa->name, namelen); - rval = uiomove((caddr_t)idbp, reclen, UIO_READ, uio); + rval = uio_read((caddr_t)idbp, reclen, uio); pa->done = (rval == 0); return rval; } diff --git a/fs/xfs/xfs_dir_leaf.c b/fs/xfs/xfs_dir_leaf.c index d03aaaa4725b2..2f889ce88f4cc 100644 --- a/fs/xfs/xfs_dir_leaf.c +++ b/fs/xfs/xfs_dir_leaf.c @@ -2225,7 +2225,7 @@ xfs_dir_put_dirent64_uio(xfs_dir_put_args_t *pa) idbp->d_off = pa->cook.o; idbp->d_name[namelen] = '\0'; memcpy(idbp->d_name, pa->name, namelen); - retval = uiomove((caddr_t)idbp, reclen, UIO_READ, uio); + retval = uio_read((caddr_t)idbp, reclen, uio); pa->done = (retval == 0); return retval; } diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 3fa9c9aaaf7a2..d9cfdbed7636b 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -188,7 +188,7 @@ xfs_getattr( * stripe size through is not a good * idea for now. */ - vap->va_blksize = mp->m_swidth ? + vap->va_blocksize = mp->m_swidth ? /* * If the underlying volume is a stripe, then * return the stripe width in bytes as the @@ -205,7 +205,7 @@ xfs_getattr( mp->m_writeio_log)); #else - vap->va_blksize = + vap->va_blocksize = /* * Return the largest of the preferred buffer * sizes since doing small I/Os into larger @@ -223,13 +223,13 @@ xfs_getattr( * realtime extent size or the realtime volume's * extent size. */ - vap->va_blksize = ip->i_d.di_extsize ? + vap->va_blocksize = ip->i_d.di_extsize ? (ip->i_d.di_extsize << mp->m_sb.sb_blocklog) : (mp->m_sb.sb_rextsize << mp->m_sb.sb_blocklog); } } else { vap->va_rdev = ip->i_df.if_u2.if_rdev; - vap->va_blksize = BLKDEV_IOSIZE; + vap->va_blocksize = BLKDEV_IOSIZE; } vap->va_atime.tv_sec = ip->i_d.di_atime.t_sec; @@ -289,8 +289,7 @@ xfs_getattr( ip->i_d.di_anextents; else vap->va_anextents = 0; - vap->va_gencount = ip->i_d.di_gen; - vap->va_vcode = 0L; + vap->va_gen = ip->i_d.di_gen; all_done: if (!(flags & ATTR_LAZY)) @@ -1044,7 +1043,7 @@ xfs_readlink( pathlen = (int)ip->i_d.di_size; if (ip->i_df.if_flags & XFS_IFINLINE) { - error = uiomove(ip->i_df.if_u1.if_data, pathlen, UIO_READ, uiop); + error = uio_read(ip->i_df.if_u1.if_data, pathlen, uiop); } else { /* @@ -1075,8 +1074,7 @@ xfs_readlink( byte_cnt = pathlen; pathlen -= byte_cnt; - error = uiomove(XFS_BUF_PTR(bp), byte_cnt, - UIO_READ, uiop); + error = uio_read(XFS_BUF_PTR(bp), byte_cnt, uiop); xfs_buf_relse (bp); } -- 2.53.0