15 Mar, 2012

1 commit


14 Mar, 2012

1 commit

  • Timestamps on regular files are the last metadata that XFS does not update
    transactionally. Now that we use the delaylog mode exclusively and made
    the log scode scale extremly well there is no need to bypass that code for
    timestamp updates. Logging all updates allows to drop a lot of code, and
    will allow for further performance improvements later on.

    Note that this patch drops optimized handling of fdatasync - it will be
    added back in a separate commit.

    Reviewed-by: Dave Chinner
    Signed-off-by: Christoph Hellwig
    Reviewed-by: Mark Tinguely
    Signed-off-by: Ben Myers

    Christoph Hellwig
     

18 Jan, 2012

1 commit

  • There is no fundamental need to keep an in-memory inode size copy in the XFS
    inode. We already have the on-disk value in the dinode, and the separate
    in-memory copy that we need for regular files only in the XFS inode.

    Remove the xfs_inode i_size field and change the XFS_ISIZE macro to use the
    VFS inode i_size field for regular files. Switch code that was directly
    accessing the i_size field in the xfs_inode to XFS_ISIZE, or in cases where
    we are limited to regular files direct access of the VFS inode i_size field.

    This also allows dropping some fairly complicated code in the write path
    which dealt with keeping the xfs_inode i_size uptodate with the VFS i_size
    that is getting updated inside ->write_end.

    Note that we do not bother resetting the VFS i_size when truncating a file
    that gets freed to zero as there is no point in doing so because the VFS inode
    is no longer in use at this point. Just relax the assert in xfs_ifree to
    only check the on-disk size instead.

    Reviewed-by: Dave Chinner
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Ben Myers

    Christoph Hellwig
     

14 Jan, 2012

1 commit

  • This wrapper isn't overly useful, not to say rather confusing.

    Around the call to xfs_itruncate_extents it does:

    - add tracing
    - add a few asserts in debug builds
    - conditionally update the inode size in two places
    - log the inode

    Both the tracing and the inode logging can be moved to xfs_itruncate_extents
    as they are useful for the attribute fork as well - in fact the attr code
    already does an equivalent xfs_trans_log_inode call just after calling
    xfs_itruncate_extents. The conditional size updates are a mess, and there
    was no reason to do them in two places anyway, as the first one was
    conditional on the inode having extents - but without extents we
    xfs_itruncate_extents would be a no-op and the placement wouldn't matter
    anyway. Instead move the size assignments and the asserts that make sense
    to the callers that want it.

    As a side effect of this clean up xfs_setattr_size by introducing variables
    for the old and new inode size, and moving the size updates into a common
    place.

    Reviewed-by: Dave Chinner
    Signed-off-by: Christoph Hellwig
    Signed-off-by: Ben Myers

    Christoph Hellwig
     

04 Jan, 2012

4 commits


02 Nov, 2011

1 commit


29 Oct, 2011

1 commit

  • * 'for-linus' of git://oss.sgi.com/xfs/xfs: (69 commits)
    xfs: add AIL pushing tracepoints
    xfs: put in missed fix for merge problem
    xfs: do not flush data workqueues in xfs_flush_buftarg
    xfs: remove XFS_bflush
    xfs: remove xfs_buf_target_name
    xfs: use xfs_ioerror_alert in xfs_buf_iodone_callbacks
    xfs: clean up xfs_ioerror_alert
    xfs: clean up buffer allocation
    xfs: remove buffers from the delwri list in xfs_buf_stale
    xfs: remove XFS_BUF_STALE and XFS_BUF_SUPER_STALE
    xfs: remove XFS_BUF_SET_VTYPE and XFS_BUF_SET_VTYPE_REF
    xfs: remove XFS_BUF_FINISH_IOWAIT
    xfs: remove xfs_get_buftarg_list
    xfs: fix buffer flushing during unmount
    xfs: optimize fsync on directories
    xfs: reduce the number of log forces from tail pushing
    xfs: Don't allocate new buffers on every call to _xfs_buf_find
    xfs: simplify xfs_trans_ijoin* again
    xfs: unlock the inode before log force in xfs_change_file_space
    xfs: unlock the inode before log force in xfs_fs_nfs_commit_metadata
    ...

    Linus Torvalds
     

25 Oct, 2011

1 commit

  • * 'next' of git://selinuxproject.org/~jmorris/linux-security: (95 commits)
    TOMOYO: Fix incomplete read after seek.
    Smack: allow to access /smack/access as normal user
    TOMOYO: Fix unused kernel config option.
    Smack: fix: invalid length set for the result of /smack/access
    Smack: compilation fix
    Smack: fix for /smack/access output, use string instead of byte
    Smack: domain transition protections (v3)
    Smack: Provide information for UDS getsockopt(SO_PEERCRED)
    Smack: Clean up comments
    Smack: Repair processing of fcntl
    Smack: Rule list lookup performance
    Smack: check permissions from user space (v2)
    TOMOYO: Fix quota and garbage collector.
    TOMOYO: Remove redundant tasklist_lock.
    TOMOYO: Fix domain transition failure warning.
    TOMOYO: Remove tomoyo_policy_memory_lock spinlock.
    TOMOYO: Simplify garbage collector.
    TOMOYO: Fix make namespacecheck warnings.
    target: check hex2bin result
    encrypted-keys: check hex2bin result
    ...

    Linus Torvalds
     

12 Oct, 2011

4 commits

  • There is no reason to keep a reference to the inode even if we unlock
    it during transaction commit because we never drop a reference between
    the ijoin and commit. Also use this fact to merge xfs_trans_ijoin_ref
    back into xfs_trans_ijoin - the third argument decides if an unlock
    is needed now.

    I'm actually starting to wonder if allowing inodes to be unlocked
    at transaction commit really is worth the effort. The only real
    benefit is that they can be unlocked earlier when commiting a
    synchronous transactions, but that could be solved by doing the
    log force manually after the unlock, too.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • An attribute of inode can be fetched via xfs_vn_getattr() in XFS.
    Currently it returns EIO, not negative value, when it failed. As a
    result, the system call returns not negative value even though an
    error occured. The stat(2), ls and mv commands cannot handle this
    error and do not work correctly.

    This patch fixes this bug, and returns -EIO, not EIO when an error
    is detected in xfs_vn_getattr().

    Signed-off-by: Mitsuo Hayasaka
    Reviewed-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Mitsuo Hayasaka
     
  • We now have an i_dio_count filed and surrounding infrastructure to wait
    for direct I/O completion instead of i_icount, and we have never needed
    to iocount waits for buffered I/O given that we only set the page uptodate
    after finishing all required work. Thus remove i_iocount, and replace
    the actually needed waits with calls to inode_dio_wait.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner
    Signed-off-by: Alex Elder

    Christoph Hellwig
     
  • The current code relies on the xfs_ioend_wait call later on to make sure
    all I/O actually has completed. The xfs_ioend_wait call will go away soon,
    so prepare for that by using the waiting filemap function.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner
    Signed-off-by: Alex Elder

    Christoph Hellwig
     

01 Sep, 2011

1 commit

  • During umount we do not add a dirty inode to the lru and wait for it to
    become clean first, but force writeback of data and metadata with
    I_WILL_FREE set. Currently there is no way for XFS to detect that the
    inode has been redirtied for metadata operations, as we skip the
    mark_inode_dirty call during teardown. Fix this by setting i_update_core
    nanually in that case, so that the inode gets flushed during inode reclaim.

    Alternatively we could enable calling mark_inode_dirty for inodes in
    I_WILL_FREE state, and let the VFS dirty tracking handle this. I decided
    against this as we will get better I/O patterns from reclaim compared to
    the synchronous writeout in write_inode_now, and always marking the inode
    dirty in some way from xfs_mark_inode_dirty is a better safetly net in
    either case.

    Signed-off-by: Christoph Hellwig
    Reviewed-by: Dave Chinner
    Signed-off-by: Alex Elder
    (cherry picked from commit da6742a5a4cc844a9982fdd936ddb537c0747856)

    Signed-off-by: Alex Elder

    Christoph Hellwig
     

13 Aug, 2011

1 commit

  • Use the move from Linux 2.6 to Linux 3.x as an excuse to kill the
    annoying subdirectories in the XFS source code. Besides the large
    amount of file rename the only changes are to the Makefile, a few
    files including headers with the subdirectory prefix, and the binary
    sysctl compat code that includes a header under fs/xfs/ from
    kernel/.

    Signed-off-by: Christoph Hellwig
    Signed-off-by: Alex Elder

    Christoph Hellwig