Commit:     b93bd20cd59eb7ec172f95d08b100fea688d8bcf
Parent:     da353b0d64e070ae7c5342a0d56ec20ae9ef5cfb
Author:     Vlad Apostolov <[EMAIL PROTECTED]>
AuthorDate: Tue Aug 28 14:00:28 2007 +1000
Committer:  Tim Shimmin <[EMAIL PROTECTED]>
CommitDate: Mon Oct 15 16:53:36 2007 +1000

    [XFS] do not have XFSMNT_IDELETE as default when mounted with XFSMNT_DMAPI
    XFS inodes are dynamically allocated on demand, rather than being
    allocated at mkfs time. Chunks of 64 inodes are allocated at once, but
    they are never freed. Over time, this can lead to filesystem
    fragmentation, clusters of inodes and the btrees which point at them can
    be scattered around the system.
    By freeing clusters as they are emptied, we will reduce fragmentation of
    the free space after removing files. This in turn will allow us to make
    better placement decisions when repopulating a filesystem. The
    XFSMNT_IDELETE mount option enables freeing clusters when they get empty.
    Unfortunately a side effect of freeing inode clusters is that the inode
    generation numbers of such inodes would be reset to zero when the cluster
    is reclaimed. This is a problem in particular for a DMAPI enabled
    filesystem as the the DMAPI handles need to be unique and persistent in
    time. An unique DMAPI handle is built with the help of the inode
    generation number. When the last one is prematurely reset by an inode
    cluster reclaim, there is a high probability of different generation
    inodes to end up having identical DMAPI handles.
    To avoid the problem with identical DMAPI handles, the XFSMNT_IDELETE
    mount option should be set as default, only if the filesystem is not
    mounted with XFSMNT_DMAPI.
    SGI-PV: 969192
    SGI-Modid: xfs-linux-melb:xfs-kern:29486a
    Signed-off-by: Vlad Apostolov <[EMAIL PROTECTED]>
    Signed-off-by: David Chinner <[EMAIL PROTECTED]>
    Signed-off-by: Mark Goodwin <[EMAIL PROTECTED]>
    Signed-off-by: Tim Shimmin <[EMAIL PROTECTED]>
 fs/xfs/xfs_vfsops.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/fs/xfs/xfs_vfsops.c b/fs/xfs/xfs_vfsops.c
index 1644be1..b4db8a2 100644
--- a/fs/xfs/xfs_vfsops.c
+++ b/fs/xfs/xfs_vfsops.c
@@ -1720,7 +1720,18 @@ xfs_parseargs(
        int                     dsunit, dswidth, vol_dsunit, vol_dswidth;
        int                     iosize;
-       args->flags |= XFSMNT_IDELETE;
+       /*
+        * Applications using DMI filesystems often expect the
+        * inode generation number to be monotonically increasing.
+        * If we delete inode chunks we break this assumption, so
+        * keep unused inode chunks on disk for DMI filesystems
+        * until we come up with a better solution.
+        * Note that if "ikeep" or "noikeep" mount options are
+        * supplied, then they are honored.
+        */
+       if (!(args->flags & XFSMNT_DMAPI))
+               args->flags |= XFSMNT_IDELETE;
        args->flags |= XFSMNT_BARRIER;
        args->flags2 |= XFSMNT2_COMPAT_IOSIZE;
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at

Reply via email to