diff options
| author | Paolo Bonzini <pbonzini@redhat.com> | 2017-02-09 18:01:23 +0300 | 
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2017-02-09 18:01:23 +0300 | 
| commit | 2e751dfb5ffd20d1a31837dbc9718741df69bffe (patch) | |
| tree | 8b7e0e47cf0ef4efda0f1090f0ccbbeb17e5a085 /fs/xfs/libxfs/xfs_dir2.c | |
| parent | a0e136d436ded817c0aade72efdefa56a00b4e5e (diff) | |
| parent | 7b6b46311a8562fb3a9e035ed6ffab6d49c28886 (diff) | |
| download | linux-2e751dfb5ffd20d1a31837dbc9718741df69bffe.tar.xz | |
Merge tag 'kvmarm-for-4.11' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
kvmarm updates for 4.11
- GICv3 save restore
- Cache flushing fixes
- MSI injection fix for GICv3 ITS
- Physical timer emulation support
Diffstat (limited to 'fs/xfs/libxfs/xfs_dir2.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_dir2.c | 39 | 
1 files changed, 24 insertions, 15 deletions
| diff --git a/fs/xfs/libxfs/xfs_dir2.c b/fs/xfs/libxfs/xfs_dir2.c index c58d72c220f5..2f389d366e93 100644 --- a/fs/xfs/libxfs/xfs_dir2.c +++ b/fs/xfs/libxfs/xfs_dir2.c @@ -36,21 +36,29 @@  struct xfs_name xfs_name_dotdot = { (unsigned char *)"..", 2, XFS_DIR3_FT_DIR };  /* - * @mode, if set, indicates that the type field needs to be set up. - * This uses the transformation from file mode to DT_* as defined in linux/fs.h - * for file type specification. This will be propagated into the directory - * structure if appropriate for the given operation and filesystem config. + * Convert inode mode to directory entry filetype   */ -const unsigned char xfs_mode_to_ftype[S_IFMT >> S_SHIFT] = { -	[0]			= XFS_DIR3_FT_UNKNOWN, -	[S_IFREG >> S_SHIFT]    = XFS_DIR3_FT_REG_FILE, -	[S_IFDIR >> S_SHIFT]    = XFS_DIR3_FT_DIR, -	[S_IFCHR >> S_SHIFT]    = XFS_DIR3_FT_CHRDEV, -	[S_IFBLK >> S_SHIFT]    = XFS_DIR3_FT_BLKDEV, -	[S_IFIFO >> S_SHIFT]    = XFS_DIR3_FT_FIFO, -	[S_IFSOCK >> S_SHIFT]   = XFS_DIR3_FT_SOCK, -	[S_IFLNK >> S_SHIFT]    = XFS_DIR3_FT_SYMLINK, -}; +unsigned char xfs_mode_to_ftype(int mode) +{ +	switch (mode & S_IFMT) { +	case S_IFREG: +		return XFS_DIR3_FT_REG_FILE; +	case S_IFDIR: +		return XFS_DIR3_FT_DIR; +	case S_IFCHR: +		return XFS_DIR3_FT_CHRDEV; +	case S_IFBLK: +		return XFS_DIR3_FT_BLKDEV; +	case S_IFIFO: +		return XFS_DIR3_FT_FIFO; +	case S_IFSOCK: +		return XFS_DIR3_FT_SOCK; +	case S_IFLNK: +		return XFS_DIR3_FT_SYMLINK; +	default: +		return XFS_DIR3_FT_UNKNOWN; +	} +}  /*   * ASCII case-insensitive (ie. A-Z) support for directories that was @@ -631,7 +639,8 @@ xfs_dir2_isblock(  	if ((rval = xfs_bmap_last_offset(args->dp, &last, XFS_DATA_FORK)))  		return rval;  	rval = XFS_FSB_TO_B(args->dp->i_mount, last) == args->geo->blksize; -	ASSERT(rval == 0 || args->dp->i_d.di_size == args->geo->blksize); +	if (rval != 0 && args->dp->i_d.di_size != args->geo->blksize) +		return -EFSCORRUPTED;  	*vp = rval;  	return 0;  } | 
