X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fxfs%2Fxfs_inode.c;h=c661c948b26d6d54cf05aee0057296595953a511;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=8a821fed5a8c7abf96a6f63254090b8c395b4d9e;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 8a821fed5..c661c948b 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -860,25 +860,32 @@ xfs_dic2xflags( xfs_arch_t arch) { __uint16_t di_flags; - uint flags = 0; + uint flags; di_flags = INT_GET(dic->di_flags, arch); - if (di_flags & XFS_DIFLAG_REALTIME) - flags |= XFS_XFLAG_REALTIME; - if (di_flags & XFS_DIFLAG_PREALLOC) - flags |= XFS_XFLAG_PREALLOC; - if (di_flags & XFS_DIFLAG_IMMUTABLE) - flags |= XFS_XFLAG_IMMUTABLE; - if (di_flags & XFS_DIFLAG_APPEND) - flags |= XFS_XFLAG_APPEND; - if (di_flags & XFS_DIFLAG_SYNC) - flags |= XFS_XFLAG_SYNC; - if (di_flags & XFS_DIFLAG_NOATIME) - flags |= XFS_XFLAG_NOATIME; - if (di_flags & XFS_DIFLAG_NODUMP) - flags |= XFS_XFLAG_NODUMP; - if (XFS_CFORK_Q_ARCH(dic, arch)) - flags |= XFS_XFLAG_HASATTR; + flags = XFS_CFORK_Q_ARCH(dic, arch) ? XFS_XFLAG_HASATTR : 0; + if (di_flags & XFS_DIFLAG_ANY) { + if (di_flags & XFS_DIFLAG_REALTIME) + flags |= XFS_XFLAG_REALTIME; + if (di_flags & XFS_DIFLAG_PREALLOC) + flags |= XFS_XFLAG_PREALLOC; + if (di_flags & XFS_DIFLAG_IMMUTABLE) + flags |= XFS_XFLAG_IMMUTABLE; + if (di_flags & XFS_DIFLAG_APPEND) + flags |= XFS_XFLAG_APPEND; + if (di_flags & XFS_DIFLAG_SYNC) + flags |= XFS_XFLAG_SYNC; + if (di_flags & XFS_DIFLAG_NOATIME) + flags |= XFS_XFLAG_NOATIME; + if (di_flags & XFS_DIFLAG_NODUMP) + flags |= XFS_XFLAG_NODUMP; + if (di_flags & XFS_DIFLAG_RTINHERIT) + flags |= XFS_XFLAG_RTINHERIT; + if (di_flags & XFS_DIFLAG_PROJINHERIT) + flags |= XFS_XFLAG_PROJINHERIT; + if (di_flags & XFS_DIFLAG_NOSYMLINKS) + flags |= XFS_XFLAG_NOSYMLINKS; + } return flags; } @@ -1236,8 +1243,15 @@ xfs_ialloc( break; case S_IFREG: case S_IFDIR: - if (pip->i_d.di_flags & - (XFS_DIFLAG_NOATIME|XFS_DIFLAG_NODUMP|XFS_DIFLAG_SYNC)) { + if (unlikely(pip->i_d.di_flags & XFS_DIFLAG_ANY)) { + if (pip->i_d.di_flags & XFS_DIFLAG_RTINHERIT) { + if ((mode & S_IFMT) == S_IFDIR) { + ip->i_d.di_flags |= XFS_DIFLAG_RTINHERIT; + } else { + ip->i_d.di_flags |= XFS_DIFLAG_REALTIME; + ip->i_iocore.io_flags |= XFS_IOCORE_RT; + } + } if ((pip->i_d.di_flags & XFS_DIFLAG_NOATIME) && xfs_inherit_noatime) ip->i_d.di_flags |= XFS_DIFLAG_NOATIME; @@ -1247,7 +1261,11 @@ xfs_ialloc( if ((pip->i_d.di_flags & XFS_DIFLAG_SYNC) && xfs_inherit_sync) ip->i_d.di_flags |= XFS_DIFLAG_SYNC; + if ((pip->i_d.di_flags & XFS_DIFLAG_NOSYMLINKS) && + xfs_inherit_nosymlinks) + ip->i_d.di_flags |= XFS_DIFLAG_NOSYMLINKS; } + /* FALLTHROUGH */ case S_IFLNK: ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; ip->i_df.if_flags = XFS_IFEXTENTS; @@ -3579,6 +3597,7 @@ corrupt_out: return XFS_ERROR(EFSCORRUPTED); } + /* * Flush all inactive inodes in mp. Return true if no user references * were found, false otherwise. @@ -3634,7 +3653,6 @@ xfs_iflush_all( continue; } if (!(flag & XFS_FLUSH_ALL)) { - ASSERT(0); busy = 1; done = 1; break; @@ -3851,6 +3869,6 @@ xfs_ilock_trace(xfs_inode_t *ip, int lock, unsigned int lockflags, inst_t *ra) (void *)ra, /* caller of ilock */ (void *)(unsigned long)current_cpu(), (void *)(unsigned long)current_pid(), - 0,0,0,0,0,0,0,0,0,0); + NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); } #endif