lkml.org 
[lkml]   [2009]   [Dec]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH] ext2/3 as ext4
    From
    Hello Everyone,
    Below is a small patch I wrote for kernel version 2.6.31.6. It
    causes ext2/3 filesystems to be mounted using the ext4 driver, in a
    way that is transparent to the userspace (and kernelspace for that
    matter, as long as the code uses the kernel's mounting API) and
    requires no change to the userspace (/kernelspace). This patch is
    useful because: 1) It allows minimalist kernel fanatics, like myself,
    to drop 2 drivers from their builds without any loss in functionality.
    2) It allows the ext2/3 filesystems to take advantage of the
    performance/general improvements in the ext4 driver. 3) In the future,
    with this patch, the ext2/3 driver code could be dropped from the
    kernel without any loss in functionality. I have been using this patch
    for 2 months now with no flaws on my home Linux box, which uses ext3
    drives on a daily basis.

    Let me know if you use this patch, if enough people use it I will
    write a proper KCONFIG and submit it for inclusion into the kernel.

    So without further ado, here is the patch.

    Sincerely,
    Philip Wernersbach <philip.wernersbach@gmail.com>

    --- linux-2.6.31.6.orig/fs/namespace.c 2009-11-28 22:30:07.178682500 -0500
    +++ linux-2.6.31.6/fs/namespace.c 2009-11-28 22:32:42.813462139 -0500
    @@ -6,6 +6,8 @@
    *
    * Based on code from fs/super.c, copyright Linus Torvalds and others.
    * Heavily rewritten.
    + *
    + * Uses ext2/3 as ext4 patch by Philip Wernersbach (November 2009)
    */

    #include <linux/syscalls.h>
    @@ -1838,6 +1840,34 @@
    return n;
    }

    +/*
    + * compare_fs_names(char *fs1, char *fs2) - Part of the ext2/3 as ext4 patch
    + *
    + * The following is a standard string compare function, made to compare
    + * filesystem names, it returns 0 if they equal, and 1 if they do not.
    + * It only handles strings up to 255 characters though, so be cautious.
    + */
    +static int compare_fs_names(char *fs1, char *fs2)
    +{
    + int i;
    +
    + if (fs1 == 0L || fs2 == 0L) return 1;
    +
    + for (i=0;i<256;i++)
    + {
    + if (fs1[i] != fs2[i])
    + return 1;
    + if (fs1[i] == 0 && fs2[i] == 0)
    + return 0;
    + if (fs1[i] == 0)
    + return 1;
    + if (fs2[i] == 0)
    + return 1;
    + }
    + return 0;
    +}
    +
    +
    int copy_mount_options(const void __user * data, unsigned long *where)
    {
    int i;
    @@ -1891,6 +1921,22 @@
    struct path path;
    int retval = 0;
    int mnt_flags = 0;
    +
    + /*
    + * This causes ext2 filesystems to be mounted with the ext4 driver.
    + *
    + * Part of the ext2/3 as ext4 patch.
    + */
    + if (compare_fs_names(type_page, "ext2") == 0)
    + type_page[3] = '4';
    +
    + /*
    + * This causes ext3 filesystems to be mounted with the ext4 driver.
    + *
    + * Part of the ext2/3 as ext4 patch.
    + */
    + if (compare_fs_names(type_page, "ext3") == 0)
    + type_page[3] = '4';

    /* Discard magic */
    if ((flags & MS_MGC_MSK) == MS_MGC_VAL)

    \
     
     \ /
      Last update: 2009-12-02 02:47    [W:0.023 / U:124.260 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site