Fix inode allocation latency
The log force added in xfs_iget_core() has been a performance
issue since it was introduced for tight loops that allocate
then unlink a single file. under heavy writeback, this can
introduce unnecessary latency due tothe log I/o getting
stuck behind bulk data writes.
Fix this latency problem by avoinding the need for the log
force by moving the place we mark linux inode dirty to the
transaction commit rather than on transaction completion.
This also closes a potential hole in the sync code where a
linux inode is not dirty between the time it is modified and
the time the log buffer has been written to disk.
Date: Fri Nov 2 13:35:27 AEDT 2007
Workarea: chook.melbourne.sgi.com:/build/dgc/isms/2.6.x-xfs
Inspected by: hch@xxxxxxxxxxxxx
The following file(s) were checked into:
longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb
Modid: xfs-linux-melb:xfs-kern:30007a
fs/xfs/xfs_inode_item.c - 1.132 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode_item.c.diff?r1=text&tr1=1.132&r2=text&tr2=1.131&f=h
- Remove the need to mark the linux inode dirty in xfs_iunpin by marking
it dirty during transaction commit.
fs/xfs/xfs_iget.c - 1.237 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iget.c.diff?r1=text&tr1=1.237&r2=text&tr2=1.236&f=h
- Remove the need to force the log on pinned inode reuse by making sure
we never need to touch the linux inode during transaction completion.
fs/xfs/xfs_inode.c - 1.485 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.c.diff?r1=text&tr1=1.485&r2=text&tr2=1.484&f=h
- Remove the need to mark the linux inode dirty in xfs_iunpin by marking
it dirty during transaction commit.
fs/xfs/xfs_inode.h - 1.237 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_inode.h.diff?r1=text&tr1=1.237&r2=text&tr2=1.236&f=h
- Remove the need to mark the linux inode dirty in xfs_iunpin by marking
it dirty during transaction commit.
fs/xfs/linux-2.6/xfs_iops.c - 1.267 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_iops.c.diff?r1=text&tr1=1.267&r2=text&tr2=1.266&f=h
- Remove the need to mark the linux inode dirty in xfs_iunpin by marking
it dirty during transaction commit.
|