diff options
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_file.c | 6 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 4 | ||||
| -rw-r--r-- | fs/xfs/xfs_vnodeops.c | 3 | ||||
| -rw-r--r-- | fs/xfs/xfs_vnodeops.h | 1 |
4 files changed, 12 insertions, 2 deletions
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index a55c1b46b219..52aadfbed132 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c | |||
| @@ -896,6 +896,7 @@ xfs_file_fallocate( | |||
| 896 | xfs_flock64_t bf; | 896 | xfs_flock64_t bf; |
| 897 | xfs_inode_t *ip = XFS_I(inode); | 897 | xfs_inode_t *ip = XFS_I(inode); |
| 898 | int cmd = XFS_IOC_RESVSP; | 898 | int cmd = XFS_IOC_RESVSP; |
| 899 | int attr_flags = XFS_ATTR_NOLOCK; | ||
| 899 | 900 | ||
| 900 | if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) | 901 | if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) |
| 901 | return -EOPNOTSUPP; | 902 | return -EOPNOTSUPP; |
| @@ -918,7 +919,10 @@ xfs_file_fallocate( | |||
| 918 | goto out_unlock; | 919 | goto out_unlock; |
| 919 | } | 920 | } |
| 920 | 921 | ||
| 921 | error = -xfs_change_file_space(ip, cmd, &bf, 0, XFS_ATTR_NOLOCK); | 922 | if (file->f_flags & O_DSYNC) |
| 923 | attr_flags |= XFS_ATTR_SYNC; | ||
| 924 | |||
| 925 | error = -xfs_change_file_space(ip, cmd, &bf, 0, attr_flags); | ||
| 922 | if (error) | 926 | if (error) |
| 923 | goto out_unlock; | 927 | goto out_unlock; |
| 924 | 928 | ||
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index 0ca0e3c024d7..acca2c5ca3fa 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
| @@ -624,6 +624,10 @@ xfs_ioc_space( | |||
| 624 | 624 | ||
| 625 | if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) | 625 | if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) |
| 626 | attr_flags |= XFS_ATTR_NONBLOCK; | 626 | attr_flags |= XFS_ATTR_NONBLOCK; |
| 627 | |||
| 628 | if (filp->f_flags & O_DSYNC) | ||
| 629 | attr_flags |= XFS_ATTR_SYNC; | ||
| 630 | |||
| 627 | if (ioflags & IO_INVIS) | 631 | if (ioflags & IO_INVIS) |
| 628 | attr_flags |= XFS_ATTR_DMI; | 632 | attr_flags |= XFS_ATTR_DMI; |
| 629 | 633 | ||
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index 37d8146ee15b..c48b4217ec47 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
| @@ -2831,7 +2831,8 @@ xfs_change_file_space( | |||
| 2831 | ip->i_d.di_flags &= ~XFS_DIFLAG_PREALLOC; | 2831 | ip->i_d.di_flags &= ~XFS_DIFLAG_PREALLOC; |
| 2832 | 2832 | ||
| 2833 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); | 2833 | xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); |
| 2834 | xfs_trans_set_sync(tp); | 2834 | if (attr_flags & XFS_ATTR_SYNC) |
| 2835 | xfs_trans_set_sync(tp); | ||
| 2835 | 2836 | ||
| 2836 | error = xfs_trans_commit(tp, 0); | 2837 | error = xfs_trans_commit(tp, 0); |
| 2837 | 2838 | ||
diff --git a/fs/xfs/xfs_vnodeops.h b/fs/xfs/xfs_vnodeops.h index f6702927eee4..3bcd23353d6c 100644 --- a/fs/xfs/xfs_vnodeops.h +++ b/fs/xfs/xfs_vnodeops.h | |||
| @@ -18,6 +18,7 @@ int xfs_setattr(struct xfs_inode *ip, struct iattr *vap, int flags); | |||
| 18 | #define XFS_ATTR_NONBLOCK 0x02 /* return EAGAIN if operation would block */ | 18 | #define XFS_ATTR_NONBLOCK 0x02 /* return EAGAIN if operation would block */ |
| 19 | #define XFS_ATTR_NOLOCK 0x04 /* Don't grab any conflicting locks */ | 19 | #define XFS_ATTR_NOLOCK 0x04 /* Don't grab any conflicting locks */ |
| 20 | #define XFS_ATTR_NOACL 0x08 /* Don't call xfs_acl_chmod */ | 20 | #define XFS_ATTR_NOACL 0x08 /* Don't call xfs_acl_chmod */ |
| 21 | #define XFS_ATTR_SYNC 0x10 /* synchronous operation required */ | ||
| 21 | 22 | ||
| 22 | int xfs_readlink(struct xfs_inode *ip, char *link); | 23 | int xfs_readlink(struct xfs_inode *ip, char *link); |
| 23 | int xfs_release(struct xfs_inode *ip); | 24 | int xfs_release(struct xfs_inode *ip); |
