diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-09 15:29:12 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-09 15:29:12 -0400 |
commit | da89bd213fe719ec3552abbeb8be12d0cc0337ca (patch) | |
tree | 41d07c62c3e4c963504a72bce8043acdd4aa142d /fs/xfs/xfs_trans_buf.c | |
parent | be0c5d8c0bb0023e11f5c6d38e90f7b0f24edb64 (diff) | |
parent | 83e782e1a1cc0159888e58e14dfc8f3289663338 (diff) |
Merge tag 'for-linus-v3.11-rc1' of git://oss.sgi.com/xfs/xfs
Pull xfs update from Ben Myers:
"This includes several bugfixes, part of the work for project quotas
and group quotas to be used together, performance improvements for
inode creation/deletion, buffer readahead, and bulkstat,
implementation of the inode change count, an inode create transaction,
and the removal of a bunch of dead code.
There are also some duplicate commits that you already have from the
3.10-rc series.
- part of the work to allow project quotas and group quotas to be
used together
- inode change count
- inode create transaction
- block queue plugging in buffer readahead and bulkstat
- ordered log vector support
- removal of dead code in and around xfs_sync_inode_grab,
xfs_ialloc_get_rec, XFS_MOUNT_RETERR, XFS_ALLOCFREE_LOG_RES,
XFS_DIROP_LOG_RES, xfs_chash, ctl_table, and
xfs_growfs_data_private
- don't keep silent if sunit/swidth can not be changed via mount
- fix a leak of remote symlink blocks into the filesystem when xattrs
are used on symlinks
- fix for fiemap to return FIEMAP_EXTENT_UNKOWN flag on delay extents
- part of a fix for xfs_fsr
- disable speculative preallocation with small files
- performance improvements for inode creates and deletes"
* tag 'for-linus-v3.11-rc1' of git://oss.sgi.com/xfs/xfs: (61 commits)
xfs: Remove incore use of XFS_OQUOTA_ENFD and XFS_OQUOTA_CHKD
xfs: Change xfs_dquot_acct to be a 2-dimensional array
xfs: Code cleanup and removal of some typedef usage
xfs: Replace macro XFS_DQ_TO_QIP with a function
xfs: Replace macro XFS_DQUOT_TREE with a function
xfs: Define a new function xfs_is_quota_inode()
xfs: implement inode change count
xfs: Use inode create transaction
xfs: Inode create item recovery
xfs: Inode create transaction reservations
xfs: Inode create log items
xfs: Introduce an ordered buffer item
xfs: Introduce ordered log vector support
xfs: xfs_ifree doesn't need to modify the inode buffer
xfs: don't do IO when creating an new inode
xfs: don't use speculative prealloc for small files
xfs: plug directory buffer readahead
xfs: add pluging for bulkstat readahead
xfs: Remove dead function prototype xfs_sync_inode_grab()
xfs: Remove the left function variable from xfs_ialloc_get_rec()
...
Diffstat (limited to 'fs/xfs/xfs_trans_buf.c')
-rw-r--r-- | fs/xfs/xfs_trans_buf.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/fs/xfs/xfs_trans_buf.c b/fs/xfs/xfs_trans_buf.c index 73a5fa457e16..aa5a04b844d6 100644 --- a/fs/xfs/xfs_trans_buf.c +++ b/fs/xfs/xfs_trans_buf.c | |||
@@ -397,7 +397,6 @@ shutdown_abort: | |||
397 | return XFS_ERROR(EIO); | 397 | return XFS_ERROR(EIO); |
398 | } | 398 | } |
399 | 399 | ||
400 | |||
401 | /* | 400 | /* |
402 | * Release the buffer bp which was previously acquired with one of the | 401 | * Release the buffer bp which was previously acquired with one of the |
403 | * xfs_trans_... buffer allocation routines if the buffer has not | 402 | * xfs_trans_... buffer allocation routines if the buffer has not |
@@ -603,8 +602,14 @@ xfs_trans_log_buf(xfs_trans_t *tp, | |||
603 | 602 | ||
604 | tp->t_flags |= XFS_TRANS_DIRTY; | 603 | tp->t_flags |= XFS_TRANS_DIRTY; |
605 | bip->bli_item.li_desc->lid_flags |= XFS_LID_DIRTY; | 604 | bip->bli_item.li_desc->lid_flags |= XFS_LID_DIRTY; |
606 | bip->bli_flags |= XFS_BLI_LOGGED; | 605 | |
607 | xfs_buf_item_log(bip, first, last); | 606 | /* |
607 | * If we have an ordered buffer we are not logging any dirty range but | ||
608 | * it still needs to be marked dirty and that it has been logged. | ||
609 | */ | ||
610 | bip->bli_flags |= XFS_BLI_DIRTY | XFS_BLI_LOGGED; | ||
611 | if (!(bip->bli_flags & XFS_BLI_ORDERED)) | ||
612 | xfs_buf_item_log(bip, first, last); | ||
608 | } | 613 | } |
609 | 614 | ||
610 | 615 | ||
@@ -757,6 +762,29 @@ xfs_trans_inode_alloc_buf( | |||
757 | } | 762 | } |
758 | 763 | ||
759 | /* | 764 | /* |
765 | * Mark the buffer as ordered for this transaction. This means | ||
766 | * that the contents of the buffer are not recorded in the transaction | ||
767 | * but it is tracked in the AIL as though it was. This allows us | ||
768 | * to record logical changes in transactions rather than the physical | ||
769 | * changes we make to the buffer without changing writeback ordering | ||
770 | * constraints of metadata buffers. | ||
771 | */ | ||
772 | void | ||
773 | xfs_trans_ordered_buf( | ||
774 | struct xfs_trans *tp, | ||
775 | struct xfs_buf *bp) | ||
776 | { | ||
777 | struct xfs_buf_log_item *bip = bp->b_fspriv; | ||
778 | |||
779 | ASSERT(bp->b_transp == tp); | ||
780 | ASSERT(bip != NULL); | ||
781 | ASSERT(atomic_read(&bip->bli_refcount) > 0); | ||
782 | |||
783 | bip->bli_flags |= XFS_BLI_ORDERED; | ||
784 | trace_xfs_buf_item_ordered(bip); | ||
785 | } | ||
786 | |||
787 | /* | ||
760 | * Set the type of the buffer for log recovery so that it can correctly identify | 788 | * Set the type of the buffer for log recovery so that it can correctly identify |
761 | * and hence attach the correct buffer ops to the buffer after replay. | 789 | * and hence attach the correct buffer ops to the buffer after replay. |
762 | */ | 790 | */ |