xfs: update for 3.6-rc1
Numerous cleanups and several bug fixes. Here are some highlights: * Discontiguous directory buffer support * Inode allocator refactoring * Removal of the IO lock in inode reclaim * Implementation of .update_time * Fix for handling of EOF in xfs_vm_writepage * Fix for races in xfsaild, and idle mode is re-enabled * Fix for a crash in xfs_buf completion handlers on unmount. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQIcBAABAgAGBQJQFtCvAAoJENaLyazVq6ZOIuEQAINJXb4SK9oBrdwGmq+Vsqf2 Eh4OmzZmdnSPrxfFGmqvyL9DdUBvGBuidwOcVLMAXGtzbxE9USK9NuKC5zN/hJip 8tIyv/8bqZ0aD4RJlHGN5zKFoQh/9Tag+JsaaqWstO8Ir1tA/5p04hDAz492btfT 49SvnV64sJ1fi7pmaJblMWMMtlWJjD6iOldaHwnKBQ3LKmcgy9sD9DY5HiGOTr1j ecKtucX7B8Q9oFLKHaKEwTYZRRYDNuTbqZmI6hlEcA5hT280jotsGA4q/aXx/gHS lZuBaqVtNFT5WCKm+j/et76tmTfIh0CSbo64ZfgSOESy2BkEVXHg5XJ1gDvPdV+L 6eBlUx3jaiNyFVHxVzFhzwKC/XdaITCd/ixFEogRDmoppDXencTCibLJXHNXxupN BCAyTLCxEJIE9WCeOMmwHA0450bMY4or13NGep57pIvG8GomtdG1WncTRIo84KV5 0W5ocaUTGP7ROsr+KF8U9C7H866OHzVFijA+vvcTy8GtsT/xOCFxuJrqPVb+kgD7 mIKaoK7iH6Kufu433TzsLEcUkF36gq/7NytPKjQhURLpZhxkHG3rq6LC0HXp6uuZ QgX5Y5Gl7SwDovIrndXmQXRnGrzvqHLguZl65+rB1CKggjemkLSdSLhryoNVjLU2 iB7/hvzOUdYFMRRz2mLc =2wkC -----END PGP SIGNATURE----- Merge tag 'for-linus-v3.6-rc1' of git://oss.sgi.com/xfs/xfs Pull xfs update from Ben Myers: "Numerous cleanups and several bug fixes. Here are some highlights: - Discontiguous directory buffer support - Inode allocator refactoring - Removal of the IO lock in inode reclaim - Implementation of .update_time - Fix for handling of EOF in xfs_vm_writepage - Fix for races in xfsaild, and idle mode is re-enabled - Fix for a crash in xfs_buf completion handlers on unmount." Fix up trivial conflicts in fs/xfs/{xfs_buf.c,xfs_log.c,xfs_log_priv.h} due to duplicate patches that had already been merged for 3.5. * tag 'for-linus-v3.6-rc1' of git://oss.sgi.com/xfs/xfs: (44 commits) xfs: wait for the write the superblock on unmount xfs: re-enable xfsaild idle mode and fix associated races xfs: remove iolock lock classes xfs: avoid the iolock in xfs_free_eofblocks for evicted inodes xfs: do not take the iolock in xfs_inactive xfs: remove xfs_inactive_attrs xfs: clean up xfs_inactive xfs: do not read the AGI buffer in xfs_dialloc until nessecary xfs: refactor xfs_ialloc_ag_select xfs: add a short cut to xfs_dialloc for the non-NULL agbp case xfs: remove the alloc_done argument to xfs_dialloc xfs: split xfs_dialloc xfs: remove xfs_ialloc_find_free Prefix IO_XX flags with XFS_IO_XX to avoid namespace colision. xfs: remove xfs_inotobp xfs: merge xfs_itobp into xfs_imap_to_bp xfs: handle EOF correctly in xfs_vm_writepage xfs: implement ->update_time xfs: fix comment typo of struct xfs_da_blkinfo. xfs: do not call xfs_bdstrat_cb in xfs_buf_iodone_callbacks ...
This commit is contained in:
commit
37cd9600a9
46 changed files with 2509 additions and 2467 deletions
|
@ -897,6 +897,47 @@ xfs_vn_setattr(
|
|||
return -xfs_setattr_nonsize(XFS_I(dentry->d_inode), iattr, 0);
|
||||
}
|
||||
|
||||
STATIC int
|
||||
xfs_vn_update_time(
|
||||
struct inode *inode,
|
||||
struct timespec *now,
|
||||
int flags)
|
||||
{
|
||||
struct xfs_inode *ip = XFS_I(inode);
|
||||
struct xfs_mount *mp = ip->i_mount;
|
||||
struct xfs_trans *tp;
|
||||
int error;
|
||||
|
||||
trace_xfs_update_time(ip);
|
||||
|
||||
tp = xfs_trans_alloc(mp, XFS_TRANS_FSYNC_TS);
|
||||
error = xfs_trans_reserve(tp, 0, XFS_FSYNC_TS_LOG_RES(mp), 0, 0, 0);
|
||||
if (error) {
|
||||
xfs_trans_cancel(tp, 0);
|
||||
return -error;
|
||||
}
|
||||
|
||||
xfs_ilock(ip, XFS_ILOCK_EXCL);
|
||||
if (flags & S_CTIME) {
|
||||
inode->i_ctime = *now;
|
||||
ip->i_d.di_ctime.t_sec = (__int32_t)now->tv_sec;
|
||||
ip->i_d.di_ctime.t_nsec = (__int32_t)now->tv_nsec;
|
||||
}
|
||||
if (flags & S_MTIME) {
|
||||
inode->i_mtime = *now;
|
||||
ip->i_d.di_mtime.t_sec = (__int32_t)now->tv_sec;
|
||||
ip->i_d.di_mtime.t_nsec = (__int32_t)now->tv_nsec;
|
||||
}
|
||||
if (flags & S_ATIME) {
|
||||
inode->i_atime = *now;
|
||||
ip->i_d.di_atime.t_sec = (__int32_t)now->tv_sec;
|
||||
ip->i_d.di_atime.t_nsec = (__int32_t)now->tv_nsec;
|
||||
}
|
||||
xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL);
|
||||
xfs_trans_log_inode(tp, ip, XFS_ILOG_TIMESTAMP);
|
||||
return -xfs_trans_commit(tp, 0);
|
||||
}
|
||||
|
||||
#define XFS_FIEMAP_FLAGS (FIEMAP_FLAG_SYNC|FIEMAP_FLAG_XATTR)
|
||||
|
||||
/*
|
||||
|
@ -991,6 +1032,7 @@ static const struct inode_operations xfs_inode_operations = {
|
|||
.removexattr = generic_removexattr,
|
||||
.listxattr = xfs_vn_listxattr,
|
||||
.fiemap = xfs_vn_fiemap,
|
||||
.update_time = xfs_vn_update_time,
|
||||
};
|
||||
|
||||
static const struct inode_operations xfs_dir_inode_operations = {
|
||||
|
@ -1016,6 +1058,7 @@ static const struct inode_operations xfs_dir_inode_operations = {
|
|||
.getxattr = generic_getxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
.listxattr = xfs_vn_listxattr,
|
||||
.update_time = xfs_vn_update_time,
|
||||
};
|
||||
|
||||
static const struct inode_operations xfs_dir_ci_inode_operations = {
|
||||
|
@ -1041,6 +1084,7 @@ static const struct inode_operations xfs_dir_ci_inode_operations = {
|
|||
.getxattr = generic_getxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
.listxattr = xfs_vn_listxattr,
|
||||
.update_time = xfs_vn_update_time,
|
||||
};
|
||||
|
||||
static const struct inode_operations xfs_symlink_inode_operations = {
|
||||
|
@ -1054,6 +1098,7 @@ static const struct inode_operations xfs_symlink_inode_operations = {
|
|||
.getxattr = generic_getxattr,
|
||||
.removexattr = generic_removexattr,
|
||||
.listxattr = xfs_vn_listxattr,
|
||||
.update_time = xfs_vn_update_time,
|
||||
};
|
||||
|
||||
STATIC void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue