Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 107466
b: refs/heads/master
c: f13fae2
h: refs/heads/master
v: v3
  • Loading branch information
Christoph Hellwig authored and Niv Sardi committed Jul 28, 2008
1 parent 536d68e commit 2ddbc0c
Show file tree
Hide file tree
Showing 7 changed files with 40 additions and 74 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 0f285c8a1c4cacfd9f2aec077b06e2b537ee57ab
refs/heads/master: f13fae2d2a9372a5155d20bc9da4c14f02193277
29 changes: 27 additions & 2 deletions trunk/fs/xfs/linux-2.6/xfs_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -923,6 +923,30 @@ xfs_set_diflags(
ip->i_d.di_flags = di_flags;
}

STATIC void
xfs_diflags_to_linux(
struct xfs_inode *ip)
{
struct inode *inode = XFS_ITOV(ip);
unsigned int xflags = xfs_ip2xflags(ip);

if (xflags & XFS_XFLAG_IMMUTABLE)
inode->i_flags |= S_IMMUTABLE;
else
inode->i_flags &= ~S_IMMUTABLE;
if (xflags & XFS_XFLAG_APPEND)
inode->i_flags |= S_APPEND;
else
inode->i_flags &= ~S_APPEND;
if (xflags & XFS_XFLAG_SYNC)
inode->i_flags |= S_SYNC;
else
inode->i_flags &= ~S_SYNC;
if (xflags & XFS_XFLAG_NOATIME)
inode->i_flags |= S_NOATIME;
else
inode->i_flags &= ~S_NOATIME;
}

#define FSX_PROJID 1
#define FSX_EXTSIZE 2
Expand Down Expand Up @@ -1121,8 +1145,10 @@ xfs_ioctl_setattr(

if (mask & FSX_EXTSIZE)
ip->i_d.di_extsize = fa->fsx_extsize >> mp->m_sb.sb_blocklog;
if (mask & FSX_XFLAGS)
if (mask & FSX_XFLAGS) {
xfs_set_diflags(ip, fa->fsx_xflags);
xfs_diflags_to_linux(ip);
}

xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
xfs_ichgtime(ip, XFS_ICHGTIME_CHG);
Expand Down Expand Up @@ -1160,7 +1186,6 @@ xfs_ioctl_setattr(
(mask & FSX_NONBLOCK) ? DM_FLAGS_NDELAY : 0);
}

vn_revalidate(XFS_ITOV(ip)); /* update flags */
return 0;

error_return:
Expand Down
16 changes: 1 addition & 15 deletions trunk/fs/xfs/linux-2.6/xfs_iops.c
Original file line number Diff line number Diff line change
Expand Up @@ -650,21 +650,7 @@ xfs_vn_setattr(
struct dentry *dentry,
struct iattr *iattr)
{
struct inode *inode = dentry->d_inode;
int error;

if (iattr->ia_valid & ATTR_ATIME)
inode->i_atime = iattr->ia_atime;

if (iattr->ia_valid & ATTR_MODE) {
if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID))
inode->i_mode &= ~S_ISGID;
}

error = xfs_setattr(XFS_I(inode), iattr, 0, NULL);
if (likely(!error))
vn_revalidate(vn_from_inode(inode));
return -error;
return -xfs_setattr(XFS_I(dentry->d_inode), iattr, 0, NULL);
}

/*
Expand Down
50 changes: 0 additions & 50 deletions trunk/fs/xfs/linux-2.6/xfs_vnode.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,56 +82,6 @@ vn_ioerror(
xfs_do_force_shutdown(ip->i_mount, SHUTDOWN_DEVICE_REQ, f, l);
}

/*
* Revalidate the Linux inode from the XFS inode.
* Note: i_size _not_ updated; we must hold the inode
* semaphore when doing that - callers responsibility.
*/
int
vn_revalidate(
bhv_vnode_t *vp)
{
struct inode *inode = vn_to_inode(vp);
struct xfs_inode *ip = XFS_I(inode);
struct xfs_mount *mp = ip->i_mount;
unsigned long xflags;

xfs_itrace_entry(ip);

if (XFS_FORCED_SHUTDOWN(mp))
return -EIO;

xfs_ilock(ip, XFS_ILOCK_SHARED);
inode->i_mode = ip->i_d.di_mode;
inode->i_uid = ip->i_d.di_uid;
inode->i_gid = ip->i_d.di_gid;
inode->i_mtime.tv_sec = ip->i_d.di_mtime.t_sec;
inode->i_mtime.tv_nsec = ip->i_d.di_mtime.t_nsec;
inode->i_ctime.tv_sec = ip->i_d.di_ctime.t_sec;
inode->i_ctime.tv_nsec = ip->i_d.di_ctime.t_nsec;

xflags = xfs_ip2xflags(ip);
if (xflags & XFS_XFLAG_IMMUTABLE)
inode->i_flags |= S_IMMUTABLE;
else
inode->i_flags &= ~S_IMMUTABLE;
if (xflags & XFS_XFLAG_APPEND)
inode->i_flags |= S_APPEND;
else
inode->i_flags &= ~S_APPEND;
if (xflags & XFS_XFLAG_SYNC)
inode->i_flags |= S_SYNC;
else
inode->i_flags &= ~S_SYNC;
if (xflags & XFS_XFLAG_NOATIME)
inode->i_flags |= S_NOATIME;
else
inode->i_flags &= ~S_NOATIME;
xfs_iunlock(ip, XFS_ILOCK_SHARED);

xfs_iflags_clear(ip, XFS_IMODIFIED);
return 0;
}

/*
* Add a reference to a referenced vnode.
Expand Down
1 change: 0 additions & 1 deletion trunk/fs/xfs/linux-2.6/xfs_vnode.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ static inline struct inode *vn_to_inode(bhv_vnode_t *vnode)


extern void vn_init(void);
extern int vn_revalidate(bhv_vnode_t *);

/*
* Yeah, these don't take vnode anymore at all, all this should be
Expand Down
7 changes: 2 additions & 5 deletions trunk/fs/xfs/linux-2.6/xfs_xattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ static int
xfs_xattr_system_set(struct inode *inode, const char *name,
const void *value, size_t size, int flags)
{
int error, acl;
int acl;

acl = xfs_decode_acl(name);
if (acl < 0)
Expand All @@ -75,10 +75,7 @@ xfs_xattr_system_set(struct inode *inode, const char *name,
if (!value)
return xfs_acl_vremove(inode, acl);

error = xfs_acl_vset(inode, (void *)value, size, acl);
if (!error)
vn_revalidate(inode);
return error;
return xfs_acl_vset(inode, (void *)value, size, acl);
}

static struct xattr_handler xfs_xattr_system_handler = {
Expand Down
9 changes: 9 additions & 0 deletions trunk/fs/xfs/xfs_vnodeops.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ xfs_setattr(
cred_t *credp)
{
xfs_mount_t *mp = ip->i_mount;
struct inode *inode = XFS_ITOV(ip);
int mask = iattr->ia_valid;
xfs_trans_t *tp;
int code;
Expand Down Expand Up @@ -446,6 +447,9 @@ xfs_setattr(
ip->i_d.di_mode &= S_IFMT;
ip->i_d.di_mode |= iattr->ia_mode & ~S_IFMT;

inode->i_mode &= S_IFMT;
inode->i_mode |= iattr->ia_mode & ~S_IFMT;

xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE);
timeflags |= XFS_ICHGTIME_CHG;
}
Expand Down Expand Up @@ -481,6 +485,7 @@ xfs_setattr(
&ip->i_udquot, udqp);
}
ip->i_d.di_uid = uid;
inode->i_uid = uid;
}
if (igid != gid) {
if (XFS_IS_GQUOTA_ON(mp)) {
Expand All @@ -491,6 +496,7 @@ xfs_setattr(
&ip->i_gdquot, gdqp);
}
ip->i_d.di_gid = gid;
inode->i_gid = gid;
}

xfs_trans_log_inode (tp, ip, XFS_ILOG_CORE);
Expand All @@ -503,12 +509,14 @@ xfs_setattr(
*/
if (mask & (ATTR_ATIME|ATTR_MTIME)) {
if (mask & ATTR_ATIME) {
inode->i_atime = iattr->ia_atime;
ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec;
ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec;
ip->i_update_core = 1;
timeflags &= ~XFS_ICHGTIME_ACC;
}
if (mask & ATTR_MTIME) {
inode->i_mtime = iattr->ia_mtime;
ip->i_d.di_mtime.t_sec = iattr->ia_mtime.tv_sec;
ip->i_d.di_mtime.t_nsec = iattr->ia_mtime.tv_nsec;
timeflags &= ~XFS_ICHGTIME_MOD;
Expand All @@ -524,6 +532,7 @@ xfs_setattr(
*/

if ((flags & XFS_ATTR_DMI) && (mask & ATTR_CTIME)) {
inode->i_ctime = iattr->ia_ctime;
ip->i_d.di_ctime.t_sec = iattr->ia_ctime.tv_sec;
ip->i_d.di_ctime.t_nsec = iattr->ia_ctime.tv_nsec;
ip->i_update_core = 1;
Expand Down

0 comments on commit 2ddbc0c

Please sign in to comment.