From 21ef8d3415a6d70d843fff9d763c0132f0fe1327 Mon Sep 17 00:00:00 2001 From: Stephen Lord Date: Tue, 7 Oct 2003 23:23:57 -0500 Subject: [PATCH] [XFS] switch xfs to use linux imode flags internally SGI Modid: 2.5.x-xfs:slinx:159631a --- fs/xfs/linux/xfs_lrw.c | 8 ++--- fs/xfs/linux/xfs_sysctl.h | 2 +- fs/xfs/quota/xfs_qm.c | 2 +- fs/xfs/xfs_attr.c | 8 ++--- fs/xfs/xfs_bmap.c | 4 +-- fs/xfs/xfs_dfrag.c | 4 +-- fs/xfs/xfs_dinode.h | 21 +----------- fs/xfs/xfs_dir.c | 18 +++++----- fs/xfs/xfs_dir2.c | 16 ++++----- fs/xfs/xfs_inode.c | 70 +++++++++++++++++++-------------------- fs/xfs/xfs_inode.h | 6 ++-- fs/xfs/xfs_log_recover.c | 4 +-- fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_rename.c | 6 ++-- fs/xfs/xfs_rw.c | 8 ++--- fs/xfs/xfs_vnodeops.c | 44 ++++++++++++------------ 16 files changed, 102 insertions(+), 121 deletions(-) diff --git a/fs/xfs/linux/xfs_lrw.c b/fs/xfs/linux/xfs_lrw.c index 3dafbf0c61191..faf9166396d48 100644 --- a/fs/xfs/linux/xfs_lrw.c +++ b/fs/xfs/linux/xfs_lrw.c @@ -671,9 +671,9 @@ start: * setgid binaries. */ - if (((xip->i_d.di_mode & ISUID) || - ((xip->i_d.di_mode & (ISGID | (IEXEC >> 3))) == - (ISGID | (IEXEC >> 3)))) && + if (((xip->i_d.di_mode & S_ISUID) || + ((xip->i_d.di_mode & (S_ISGID | S_IXGRP)) == + (S_ISGID | S_IXGRP))) && !capable(CAP_FSETID)) { error = xfs_write_clear_setuid(xip); if (error) { @@ -851,7 +851,7 @@ xfs_bmap(bhv_desc_t *bdp, xfs_inode_t *ip = XFS_BHVTOI(bdp); xfs_iocore_t *io = &ip->i_iocore; - ASSERT((ip->i_d.di_mode & IFMT) == IFREG); + ASSERT((ip->i_d.di_mode & S_IFMT) == S_IFREG); ASSERT(((ip->i_d.di_flags & XFS_DIFLAG_REALTIME) != 0) == ((ip->i_iocore.io_flags & XFS_IOCORE_RT) != 0)); diff --git a/fs/xfs/linux/xfs_sysctl.h b/fs/xfs/linux/xfs_sysctl.h index c08d419b18564..3f528fc49cd84 100644 --- a/fs/xfs/linux/xfs_sysctl.h +++ b/fs/xfs/linux/xfs_sysctl.h @@ -47,7 +47,7 @@ typedef struct xfs_sysctl_val { typedef struct xfs_param { xfs_sysctl_val_t restrict_chown;/* Root/non-root can give away files.*/ - xfs_sysctl_val_t sgid_inherit; /* Inherit ISGID bit if process' GID + xfs_sysctl_val_t sgid_inherit; /* Inherit S_ISGID bit if process' GID * is not a member of the parent dir * GID */ xfs_sysctl_val_t symlink_mode; /* Link creat mode affected by umask */ diff --git a/fs/xfs/quota/xfs_qm.c b/fs/xfs/quota/xfs_qm.c index cfff63847e0af..3fd42fecc56f9 100644 --- a/fs/xfs/quota/xfs_qm.c +++ b/fs/xfs/quota/xfs_qm.c @@ -1433,7 +1433,7 @@ xfs_qm_qino_alloc( } memset(&zerocr, 0, sizeof(zerocr)); - if ((error = xfs_dir_ialloc(&tp, mp->m_rootip, IFREG, 1, 0, + if ((error = xfs_dir_ialloc(&tp, mp->m_rootip, S_IFREG, 1, 0, &zerocr, 0, 1, ip, &committed))) { xfs_trans_cancel(tp, XFS_TRANS_RELEASE_LOG_RES | XFS_TRANS_ABORT); diff --git a/fs/xfs/xfs_attr.c b/fs/xfs/xfs_attr.c index 5fdb7f1526471..a8e73a8922d9c 100644 --- a/fs/xfs/xfs_attr.c +++ b/fs/xfs/xfs_attr.c @@ -143,7 +143,7 @@ xfs_attr_get_int(xfs_inode_t *ip, char *name, char *value, int *valuelenp, /* * Do we answer them, or ignore them? */ - if ((error = xfs_iaccess(ip, IREAD, cred))) { + if ((error = xfs_iaccess(ip, S_IRUSR, cred))) { xfs_iunlock(ip, XFS_ILOCK_SHARED); return(XFS_ERROR(error)); } @@ -239,7 +239,7 @@ xfs_attr_set(bhv_desc_t *bdp, char *name, char *value, int valuelen, int flags, return (EIO); xfs_ilock(dp, XFS_ILOCK_SHARED); - if ((error = xfs_iaccess(dp, IWRITE, cred))) { + if ((error = xfs_iaccess(dp, S_IWUSR, cred))) { xfs_iunlock(dp, XFS_ILOCK_SHARED); return(XFS_ERROR(error)); } @@ -498,7 +498,7 @@ xfs_attr_remove(bhv_desc_t *bdp, char *name, int flags, struct cred *cred) return (EIO); xfs_ilock(dp, XFS_ILOCK_SHARED); - if ((error = xfs_iaccess(dp, IWRITE, cred))) { + if ((error = xfs_iaccess(dp, S_IWUSR, cred))) { xfs_iunlock(dp, XFS_ILOCK_SHARED); return(XFS_ERROR(error)); } else if (XFS_IFORK_Q(dp) == 0 || @@ -687,7 +687,7 @@ xfs_attr_list(bhv_desc_t *bdp, char *buffer, int bufsize, int flags, * Do they have permission? */ xfs_ilock(dp, XFS_ILOCK_SHARED); - if ((error = xfs_iaccess(dp, IREAD, cred))) { + if ((error = xfs_iaccess(dp, S_IRUSR, cred))) { xfs_iunlock(dp, XFS_ILOCK_SHARED); return(XFS_ERROR(error)); } diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c index 349f0f1684ecd..1f2c33637a51d 100644 --- a/fs/xfs/xfs_bmap.c +++ b/fs/xfs/xfs_bmap.c @@ -521,7 +521,7 @@ xfs_bmap_add_attrfork_local( if (ip->i_df.if_bytes <= XFS_IFORK_DSIZE(ip)) return 0; - if ((ip->i_d.di_mode & IFMT) == IFDIR) { + if ((ip->i_d.di_mode & S_IFMT) == S_IFDIR) { mp = ip->i_mount; memset(&dargs, 0, sizeof(dargs)); dargs.dp = ip; @@ -3354,7 +3354,7 @@ xfs_bmap_local_to_extents( * We don't want to deal with the case of keeping inode data inline yet. * So sending the data fork of a regular inode is invalid. */ - ASSERT(!((ip->i_d.di_mode & IFMT) == IFREG && + ASSERT(!((ip->i_d.di_mode & S_IFMT) == S_IFREG && whichfork == XFS_DATA_FORK)); ifp = XFS_IFORK_PTR(ip, whichfork); ASSERT(XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL); diff --git a/fs/xfs/xfs_dfrag.c b/fs/xfs/xfs_dfrag.c index 4a6cf85eb8c41..19229371462c9 100644 --- a/fs/xfs/xfs_dfrag.c +++ b/fs/xfs/xfs_dfrag.c @@ -154,12 +154,12 @@ xfs_swapext( goto error0; } if ((current->fsuid != ip->i_d.di_uid) && - (error = xfs_iaccess(ip, IWRITE, NULL)) && + (error = xfs_iaccess(ip, S_IWUSR, NULL)) && !capable_cred(NULL, CAP_FOWNER)) { goto error0; } if ((current->fsuid != tip->i_d.di_uid) && - (error = xfs_iaccess(tip, IWRITE, NULL)) && + (error = xfs_iaccess(tip, S_IWUSR, NULL)) && !capable_cred(NULL, CAP_FOWNER)) { goto error0; } diff --git a/fs/xfs/xfs_dinode.h b/fs/xfs/xfs_dinode.h index 69a2ca652b83a..e0b529b337d92 100644 --- a/fs/xfs/xfs_dinode.h +++ b/fs/xfs/xfs_dinode.h @@ -107,7 +107,7 @@ typedef struct xfs_dinode xfs_dir_shortform_t di_dirsf; /* shortform directory */ xfs_dir2_sf_t di_dir2sf; /* shortform directory v2 */ char di_c[1]; /* local contents */ - xfs_dev_t di_dev; /* device for IFCHR/IFBLK */ + xfs_dev_t di_dev; /* device for S_IFCHR/S_IFBLK */ uuid_t di_muuid; /* mount point value */ char di_symlink[1]; /* local symbolic link */ } di_u; @@ -436,25 +436,6 @@ void xfs_dfork_next_set(xfs_dinode_t *dip, int w, int n); #endif -/* - * File types (mode field) - */ -#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); #define XFS_BUF_TO_DINODE(bp) xfs_buf_to_dinode(bp) diff --git a/fs/xfs/xfs_dir.c b/fs/xfs/xfs_dir.c index 224404471a69f..ef08220232a95 100644 --- a/fs/xfs/xfs_dir.c +++ b/fs/xfs/xfs_dir.c @@ -216,7 +216,7 @@ xfs_dir_isempty(xfs_inode_t *dp) { xfs_dir_sf_hdr_t *hdr; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); if (dp->i_d.di_size == 0) return(1); if (dp->i_d.di_size > XFS_IFORK_DSIZE(dp)) @@ -238,7 +238,7 @@ xfs_dir_init(xfs_trans_t *trans, xfs_inode_t *dir, xfs_inode_t *parent_dir) args.dp = dir; args.trans = trans; - ASSERT((dir->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dir->i_d.di_mode & S_IFMT) == S_IFDIR); if ((error = xfs_dir_ino_validate(trans->t_mountp, parent_dir->i_ino))) return error; @@ -257,7 +257,7 @@ xfs_dir_createname(xfs_trans_t *trans, xfs_inode_t *dp, char *name, xfs_da_args_t args; int retval, newsize, done; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); if ((retval = xfs_dir_ino_validate(trans->t_mountp, inum))) return (retval); @@ -321,7 +321,7 @@ xfs_dir_canenter(xfs_trans_t *trans, xfs_inode_t *dp, char *name, int namelen) xfs_da_args_t args; int retval, newsize; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); /* * Fill in the arg structure for this request. */ @@ -366,7 +366,7 @@ xfs_dir_removename(xfs_trans_t *trans, xfs_inode_t *dp, char *name, xfs_da_args_t args; int count, totallen, newsize, retval; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); XFS_STATS_INC(xs_dir_remove); /* * Fill in the arg structure for this request. @@ -409,7 +409,7 @@ xfs_dir_lookup(xfs_trans_t *trans, xfs_inode_t *dp, char *name, int namelen, xfs_da_args_t args; int retval; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); XFS_STATS_INC(xs_dir_lookup); /* @@ -455,7 +455,7 @@ xfs_dir_getdents(xfs_trans_t *trans, xfs_inode_t *dp, uio_t *uio, int *eofp) xfs_dir_put_t put; XFS_STATS_INC(xs_dir_getdents); - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); /* * If our caller has given us a single contiguous memory buffer, @@ -499,7 +499,7 @@ xfs_dir_replace(xfs_trans_t *trans, xfs_inode_t *dp, char *name, int namelen, xfs_da_args_t args; int retval; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); if ((retval = xfs_dir_ino_validate(trans->t_mountp, inum))) return retval; @@ -545,7 +545,7 @@ xfs_dir_shortform_validate_ondisk(xfs_mount_t *mp, xfs_dinode_t *dp) - if ((INT_GET(dp->di_core.di_mode, ARCH_CONVERT) & IFMT) != IFDIR) { + if ((INT_GET(dp->di_core.di_mode, ARCH_CONVERT) & S_IFMT) != S_IFDIR) { return 0; } if (INT_GET(dp->di_core.di_format, ARCH_CONVERT) != XFS_DINODE_FMT_LOCAL) { diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c index 38bb5bbbc08c1..bd062886d5841 100644 --- a/fs/xfs/xfs_dir2.c +++ b/fs/xfs/xfs_dir2.c @@ -155,7 +155,7 @@ xfs_dir2_isempty( { xfs_dir2_sf_t *sfp; /* shortform directory structure */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); /* * Might happen during shutdown. */ @@ -183,7 +183,7 @@ xfs_dir2_init( memset((char *)&args, 0, sizeof(args)); args.dp = dp; args.trans = tp; - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); if ((error = xfs_dir_ino_validate(tp->t_mountp, pdp->i_ino))) { return error; } @@ -208,7 +208,7 @@ xfs_dir2_createname( int rval; /* return value */ int v; /* type-checking value */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum))) { return rval; } @@ -261,7 +261,7 @@ xfs_dir2_lookup( int rval; /* return value */ int v; /* type-checking value */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); XFS_STATS_INC(xs_dir_lookup); /* @@ -319,7 +319,7 @@ xfs_dir2_removename( int rval; /* return value */ int v; /* type-checking value */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); XFS_STATS_INC(xs_dir_remove); /* * Fill in the arg structure for this request. @@ -369,7 +369,7 @@ xfs_dir2_getdents( int rval; /* return value */ int v; /* type-checking value */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); XFS_STATS_INC(xs_dir_getdents); /* * If our caller has given us a single contiguous aligned memory buffer, @@ -422,7 +422,7 @@ xfs_dir2_replace( int rval; /* return value */ int v; /* type-checking value */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); if ((rval = xfs_dir_ino_validate(tp->t_mountp, inum))) { return rval; @@ -473,7 +473,7 @@ xfs_dir2_canenter( int rval; /* return value */ int v; /* type-checking value */ - ASSERT((dp->i_d.di_mode & IFMT) == IFDIR); + ASSERT((dp->i_d.di_mode & S_IFMT) == S_IFDIR); /* * Fill in the arg structure for this request. */ diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 7cb24a4a39a0a..69347c027fe84 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -487,11 +487,11 @@ xfs_iformat( return XFS_ERROR(EFSCORRUPTED); } - switch (ip->i_d.di_mode & IFMT) { - case IFIFO: - case IFCHR: - case IFBLK: - case IFSOCK: + switch (ip->i_d.di_mode & S_IFMT) { + case S_IFIFO: + case S_IFCHR: + case S_IFBLK: + case S_IFSOCK: if (unlikely(INT_GET(dip->di_core.di_format, ARCH_CONVERT) != XFS_DINODE_FMT_DEV)) { XFS_CORRUPTION_ERROR("xfs_iformat(3)", XFS_ERRLEVEL_LOW, ip->i_mount, dip); @@ -501,15 +501,15 @@ xfs_iformat( ip->i_df.if_u2.if_rdev = INT_GET(dip->di_u.di_dev, ARCH_CONVERT); break; - case IFREG: - case IFLNK: - case IFDIR: + case S_IFREG: + case S_IFLNK: + case S_IFDIR: switch (INT_GET(dip->di_core.di_format, ARCH_CONVERT)) { case XFS_DINODE_FMT_LOCAL: /* * no local regular files yet */ - if (unlikely((INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & IFMT) == IFREG)) { + if (unlikely((INT_GET(dip->di_core.di_mode, ARCH_CONVERT) & S_IFMT) == S_IFREG)) { xfs_fs_cmn_err(CE_WARN, ip->i_mount, "corrupt inode (local format for regular file) %Lu. Unmount and run xfs_repair.", (unsigned long long) ip->i_ino); @@ -1172,20 +1172,20 @@ xfs_ialloc( if (XFS_INHERIT_GID(pip, vp->v_vfsp)) { ip->i_d.di_gid = pip->i_d.di_gid; - if ((pip->i_d.di_mode & ISGID) && (mode & IFMT) == IFDIR) { - ip->i_d.di_mode |= ISGID; + if ((pip->i_d.di_mode & S_ISGID) && (mode & S_IFMT) == S_IFDIR) { + ip->i_d.di_mode |= S_ISGID; } } /* * If the group ID of the new file does not match the effective group - * ID or one of the supplementary group IDs, the ISGID bit is cleared + * ID or one of the supplementary group IDs, the S_ISGID bit is cleared * (and only if the irix_sgid_inherit compatibility variable is set). */ if ((irix_sgid_inherit) && - (ip->i_d.di_mode & ISGID) && + (ip->i_d.di_mode & S_ISGID) && (!in_group_p((gid_t)ip->i_d.di_gid))) { - ip->i_d.di_mode &= ~ISGID; + ip->i_d.di_mode &= ~S_ISGID; } ip->i_d.di_size = 0; @@ -1200,18 +1200,18 @@ xfs_ialloc( ip->i_d.di_dmstate = 0; ip->i_d.di_flags = 0; flags = XFS_ILOG_CORE; - switch (mode & IFMT) { - case IFIFO: - case IFCHR: - case IFBLK: - case IFSOCK: + switch (mode & S_IFMT) { + case S_IFIFO: + case S_IFCHR: + case S_IFBLK: + case S_IFSOCK: ip->i_d.di_format = XFS_DINODE_FMT_DEV; ip->i_df.if_u2.if_rdev = rdev; ip->i_df.if_flags = 0; flags |= XFS_ILOG_DEV; break; - case IFREG: - case IFDIR: + case S_IFREG: + case S_IFDIR: if (pip->i_d.di_flags & (XFS_DIFLAG_NOATIME|XFS_DIFLAG_NODUMP|XFS_DIFLAG_SYNC)) { if ((pip->i_d.di_flags & XFS_DIFLAG_NOATIME) && @@ -1224,7 +1224,7 @@ xfs_ialloc( xfs_inherit_sync) ip->i_d.di_flags |= XFS_DIFLAG_SYNC; } - case IFLNK: + case S_IFLNK: ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_df.if_flags = XFS_IFEXTENTS; ip->i_df.if_bytes = ip->i_df.if_real_bytes = 0; @@ -1268,7 +1268,7 @@ xfs_isize_check( int nimaps; xfs_bmbt_irec_t imaps[2]; - if ((ip->i_d.di_mode & IFMT) != IFREG) + if ((ip->i_d.di_mode & S_IFMT) != S_IFREG) return; if ( ip->i_d.di_flags & XFS_DIFLAG_REALTIME ) @@ -2304,7 +2304,7 @@ xfs_ifree( ASSERT(ip->i_d.di_nextents == 0); ASSERT(ip->i_d.di_anextents == 0); ASSERT((ip->i_d.di_size == 0) || - ((ip->i_d.di_mode & IFMT) != IFREG)); + ((ip->i_d.di_mode & S_IFMT) != S_IFREG)); ASSERT(ip->i_d.di_nblocks == 0); /* @@ -2746,10 +2746,10 @@ xfs_idestroy( xfs_inode_t *ip) { - switch (ip->i_d.di_mode & IFMT) { - case IFREG: - case IFDIR: - case IFLNK: + switch (ip->i_d.di_mode & S_IFMT) { + case S_IFREG: + case S_IFDIR: + case S_IFLNK: xfs_idestroy_fork(ip, XFS_DATA_FORK); break; } @@ -3390,7 +3390,7 @@ xfs_iflush_int( ip->i_ino, ip, ip->i_d.di_magic); goto corrupt_out; } - if ((ip->i_d.di_mode & IFMT) == IFREG) { + if ((ip->i_d.di_mode & S_IFMT) == S_IFREG) { if (XFS_TEST_ERROR( (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS) && (ip->i_d.di_format != XFS_DINODE_FMT_BTREE), @@ -3400,7 +3400,7 @@ xfs_iflush_int( ip->i_ino, ip); goto corrupt_out; } - } else if ((ip->i_d.di_mode & IFMT) == IFDIR) { + } else if ((ip->i_d.di_mode & S_IFMT) == S_IFDIR) { if (XFS_TEST_ERROR( (ip->i_d.di_format != XFS_DINODE_FMT_EXTENTS) && (ip->i_d.di_format != XFS_DINODE_FMT_BTREE) && @@ -3689,7 +3689,7 @@ xfs_iaccess( if ((error = _MAC_XFS_IACCESS(ip, mode, cr))) return XFS_ERROR(error); - if (mode & IWRITE) { + if (mode & S_IWUSR) { umode_t imode = inode->i_mode; if (IS_RDONLY(inode) && @@ -3722,13 +3722,13 @@ xfs_iaccess( * Read/write DACs are always overridable. * Executable DACs are overridable if at least one exec bit is set. */ - if ((orgmode & (IREAD|IWRITE)) || (inode->i_mode & S_IXUGO)) + if ((orgmode & (S_IRUSR|S_IWUSR)) || (inode->i_mode & S_IXUGO)) if (capable_cred(cr, CAP_DAC_OVERRIDE)) return 0; - if ((orgmode == IREAD) || - (((ip->i_d.di_mode & IFMT) == IFDIR) && - (!(orgmode & ~(IWRITE|IEXEC))))) { + if ((orgmode == S_IRUSR) || + (((ip->i_d.di_mode & S_IFMT) == S_IFDIR) && + (!(orgmode & ~(S_IWUSR|S_IXUSR))))) { if (capable_cred(cr, CAP_DAC_READ_SEARCH)) return 0; #ifdef NOISE diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h index 7150e3a92c16d..50ab2fd6c4b78 100644 --- a/fs/xfs/xfs_inode.h +++ b/fs/xfs/xfs_inode.h @@ -438,12 +438,12 @@ xfs_inode_t *xfs_bhvtoi(struct bhv_desc *bhvp); #define XFS_CHASH(mp,blk) ((mp)->m_chash + (((uint)blk) % (mp)->m_chsize)) /* - * For multiple groups support: if ISGID bit is set in the parent + * For multiple groups support: if S_ISGID bit is set in the parent * directory, group of new file is set to that of the parent, and - * new subdirectory gets ISGID bit from parent. + * new subdirectory gets S_ISGID bit from parent. */ #define XFS_INHERIT_GID(pip, vfsp) ((pip) != NULL && \ - (((vfsp)->vfs_flag & VFS_GRPID) || ((pip)->i_d.di_mode & ISGID))) + (((vfsp)->vfs_flag & VFS_GRPID) || ((pip)->i_d.di_mode & S_ISGID))) /* * xfs_iget.c prototypes. diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 6c5173b997819..0e2a54fa6e9bb 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -2383,7 +2383,7 @@ xlog_recover_do_inode_trans( /* Take the opportunity to reset the flush iteration count */ dicp->di_flushiter = 0; - if (unlikely((dicp->di_mode & IFMT) == IFREG)) { + if (unlikely((dicp->di_mode & S_IFMT) == S_IFREG)) { if ((dicp->di_format != XFS_DINODE_FMT_EXTENTS) && (dicp->di_format != XFS_DINODE_FMT_BTREE)) { XFS_CORRUPTION_ERROR("xlog_recover_do_inode_trans(3)", @@ -2394,7 +2394,7 @@ xlog_recover_do_inode_trans( item, dip, bp, ino); return XFS_ERROR(EFSCORRUPTED); } - } else if (unlikely((dicp->di_mode & IFMT) == IFDIR)) { + } else if (unlikely((dicp->di_mode & S_IFMT) == S_IFDIR)) { if ((dicp->di_format != XFS_DINODE_FMT_EXTENTS) && (dicp->di_format != XFS_DINODE_FMT_BTREE) && (dicp->di_format != XFS_DINODE_FMT_LOCAL)) { diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 5ef5dbc631005..5bb50ff4d172a 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -977,7 +977,7 @@ xfs_mountfs( rvp = XFS_ITOV(rip); VMAP(rvp, vmap); - if (unlikely((rip->i_d.di_mode & IFMT) != IFDIR)) { + if (unlikely((rip->i_d.di_mode & S_IFMT) != S_IFDIR)) { cmn_err(CE_WARN, "XFS: corrupted root inode"); prdev("Root inode %llu is not a directory", mp->m_ddev_targp, (unsigned long long)rip->i_ino); diff --git a/fs/xfs/xfs_rename.c b/fs/xfs/xfs_rename.c index b7845aa06b2da..87e794774c3b3 100644 --- a/fs/xfs/xfs_rename.c +++ b/fs/xfs/xfs_rename.c @@ -326,7 +326,7 @@ xfs_rename( ASSERT(src_ip != NULL); - if ((src_ip->i_d.di_mode & IFMT) == IFDIR) { + if ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR) { /* * Check for link count overflow on target_dp */ @@ -340,7 +340,7 @@ xfs_rename( } new_parent = (src_dp != target_dp); - src_is_directory = ((src_ip->i_d.di_mode & IFMT) == IFDIR); + src_is_directory = ((src_ip->i_d.di_mode & S_IFMT) == S_IFDIR); /* * Drop the locks on our inodes so that we can do the ancestor @@ -449,7 +449,7 @@ xfs_rename( * target and source are directories and that target can be * destroyed, or that neither is a directory. */ - if ((target_ip->i_d.di_mode & IFMT) == IFDIR) { + if ((target_ip->i_d.di_mode & S_IFMT) == S_IFDIR) { /* * Make sure target dir is empty. */ diff --git a/fs/xfs/xfs_rw.c b/fs/xfs/xfs_rw.c index 5b355858c11c5..18157253c20a0 100644 --- a/fs/xfs/xfs_rw.c +++ b/fs/xfs/xfs_rw.c @@ -86,17 +86,17 @@ xfs_write_clear_setuid( xfs_ilock(ip, XFS_ILOCK_EXCL); xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); - ip->i_d.di_mode &= ~ISUID; + ip->i_d.di_mode &= ~S_ISUID; /* * Note that we don't have to worry about mandatory * file locking being disabled here because we only - * clear the ISGID bit if the Group execute bit is + * clear the S_ISGID bit if the Group execute bit is * on, but if it was on then mandatory locking wouldn't * have been enabled. */ - if (ip->i_d.di_mode & (IEXEC >> 3)) { - ip->i_d.di_mode &= ~ISGID; + if (ip->i_d.di_mode & S_IXGRP) { + ip->i_d.di_mode &= ~S_ISGID; } xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); xfs_trans_set_sync(tp); diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 0ae3996e902d8..961aef51e70be 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c @@ -470,15 +470,15 @@ xfs_setattr( if (mask & XFS_AT_MODE) { mode_t m = 0; - if ((vap->va_mode & ISUID) && !file_owner) - m |= ISUID; - if ((vap->va_mode & ISGID) && + if ((vap->va_mode & S_ISUID) && !file_owner) + m |= S_ISUID; + if ((vap->va_mode & S_ISGID) && !in_group_p((gid_t)ip->i_d.di_gid)) - m |= ISGID; + m |= S_ISGID; #if 0 /* Linux allows this, Irix doesn't. */ - if ((vap->va_mode & ISVTX) && vp->v_type != VDIR) - m |= ISVTX; + if ((vap->va_mode & S_ISVTX) && vp->v_type != VDIR) + m |= S_ISVTX; #endif if (m && !capable(CAP_FSETID)) vap->va_mode &= ~m; @@ -755,8 +755,8 @@ xfs_setattr( * Change file access modes. */ if (mask & XFS_AT_MODE) { - ip->i_d.di_mode &= IFMT; - ip->i_d.di_mode |= vap->va_mode & ~IFMT; + ip->i_d.di_mode &= S_IFMT; + ip->i_d.di_mode |= vap->va_mode & ~S_IFMT; xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE); timeflags |= XFS_ICHGTIME_CHG; @@ -776,9 +776,9 @@ xfs_setattr( * The set-user-ID and set-group-ID bits of a file will be * cleared upon successful return from chown() */ - if ((ip->i_d.di_mode & (ISUID|ISGID)) && + if ((ip->i_d.di_mode & (S_ISUID|S_ISGID)) && !capable(CAP_FSETID)) { - ip->i_d.di_mode &= ~(ISUID|ISGID); + ip->i_d.di_mode &= ~(S_ISUID|S_ISGID); } /* @@ -1019,7 +1019,7 @@ xfs_readlink( xfs_ilock(ip, XFS_ILOCK_SHARED); - ASSERT((ip->i_d.di_mode & IFMT) == IFLNK); + ASSERT((ip->i_d.di_mode & S_IFMT) == S_IFLNK); offset = uiop->uio_offset; count = uiop->uio_resid; @@ -1662,7 +1662,7 @@ xfs_release( mp = ip->i_mount; if (ip->i_d.di_nlink != 0) { - if ((((ip->i_d.di_mode & IFMT) == IFREG) && + if ((((ip->i_d.di_mode & S_IFMT) == S_IFREG) && ((ip->i_d.di_size > 0) || (VN_CACHED(vp) > 0)) && (ip->i_df.if_flags & XFS_IFEXTENTS)) && (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)))) { @@ -1723,7 +1723,7 @@ xfs_inactive( */ truncate = ((ip->i_d.di_nlink == 0) && ((ip->i_d.di_size != 0) || (ip->i_d.di_nextents > 0)) && - ((ip->i_d.di_mode & IFMT) == IFREG)); + ((ip->i_d.di_mode & S_IFMT) == S_IFREG)); mp = ip->i_mount; @@ -1739,7 +1739,7 @@ xfs_inactive( goto out; if (ip->i_d.di_nlink != 0) { - if ((((ip->i_d.di_mode & IFMT) == IFREG) && + if ((((ip->i_d.di_mode & S_IFMT) == S_IFREG) && ((ip->i_d.di_size > 0) || (VN_CACHED(vp) > 0)) && (ip->i_df.if_flags & XFS_IFEXTENTS)) && (!(ip->i_d.di_flags & (XFS_DIFLAG_PREALLOC|XFS_DIFLAG_APPEND)) || @@ -1802,7 +1802,7 @@ xfs_inactive( xfs_iunlock(ip, XFS_IOLOCK_EXCL | XFS_ILOCK_EXCL); return (VN_INACTIVE_CACHE); } - } else if ((ip->i_d.di_mode & IFMT) == IFLNK) { + } else if ((ip->i_d.di_mode & S_IFMT) == S_IFLNK) { /* * If we get an error while cleaning up a @@ -3508,7 +3508,7 @@ xfs_symlink( /* * Allocate an inode for the symlink. */ - error = xfs_dir_ialloc(&tp, dp, IFLNK | (vap->va_mode&~IFMT), + error = xfs_dir_ialloc(&tp, dp, S_IFLNK | (vap->va_mode&~S_IFMT), 1, 0, credp, prid, resblks > 0, &ip, NULL); if (error) { if (error == ENOSPC) @@ -3891,7 +3891,7 @@ xfs_reclaim( ASSERT(!VN_MAPPED(vp)); ip = XFS_BHVTOI(bdp); - if ((ip->i_d.di_mode & IFMT) == IFREG) { + if ((ip->i_d.di_mode & S_IFMT) == S_IFREG) { if (ip->i_d.di_size > 0) { /* * Flush and invalidate any data left around that is @@ -4597,7 +4597,7 @@ xfs_change_file_space( xfs_ilock(ip, XFS_ILOCK_SHARED); - if ((error = xfs_iaccess(ip, IWRITE, credp))) { + if ((error = xfs_iaccess(ip, S_IWUSR, credp))) { xfs_iunlock(ip, XFS_ILOCK_SHARED); return error; } @@ -4704,17 +4704,17 @@ xfs_change_file_space( xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL); xfs_trans_ihold(tp, ip); - ip->i_d.di_mode &= ~ISUID; + ip->i_d.di_mode &= ~S_ISUID; /* * Note that we don't have to worry about mandatory * file locking being disabled here because we only - * clear the ISGID bit if the Group execute bit is + * clear the S_ISGID bit if the Group execute bit is * on, but if it was on then mandatory locking wouldn't * have been enabled. */ - if (ip->i_d.di_mode & (IEXEC >> 3)) - ip->i_d.di_mode &= ~ISGID; + if (ip->i_d.di_mode & S_IXGRP) + ip->i_d.di_mode &= ~S_ISGID; xfs_ichgtime(ip, XFS_ICHGTIME_MOD | XFS_ICHGTIME_CHG); -- 2.53.0