nilfs2: add nodiscard mount option
Ryusuke Konishi [Mon, 5 Jul 2010 05:27:04 +0000 (14:27 +0900)]
Nilfs has "discard" mount option which issues discard/TRIM commands to
underlying block device, but it lacks a complementary option and has
no way to disable the feature through remount.

This adds "nodiscard" option to resolve this imbalance.

Signed-off-by: Ryusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>

Documentation/filesystems/nilfs2.txt
fs/nilfs2/super.c

index 54f61c0..d5c0cef 100644 (file)
@@ -77,9 +77,10 @@ norecovery           Disable recovery of the filesystem on mount.
                        This disables every write access on the device for
                        read-only mounts or snapshots.  This option will fail
                        for r/w mounts on an unclean volume.
-discard                        Issue discard/TRIM commands to the underlying block
-                       device when blocks are freed.  This is useful for SSD
-                       devices and sparse/thinly-provisioned LUNs.
+discard                        This enables/disables the use of discard/TRIM commands.
+nodiscard(*)           The discard/TRIM commands are sent to the underlying
+                       block device when blocks are freed.  This is useful
+                       for SSD devices and sparse/thinly-provisioned LUNs.
 
 NILFS2 usage
 ============
index 13b0e95..9da1221 100644 (file)
@@ -604,7 +604,7 @@ static const struct export_operations nilfs_export_ops = {
 enum {
        Opt_err_cont, Opt_err_panic, Opt_err_ro,
        Opt_barrier, Opt_nobarrier, Opt_snapshot, Opt_order, Opt_norecovery,
-       Opt_discard, Opt_err,
+       Opt_discard, Opt_nodiscard, Opt_err,
 };
 
 static match_table_t tokens = {
@@ -617,6 +617,7 @@ static match_table_t tokens = {
        {Opt_order, "order=%s"},
        {Opt_norecovery, "norecovery"},
        {Opt_discard, "discard"},
+       {Opt_nodiscard, "nodiscard"},
        {Opt_err, NULL}
 };
 
@@ -676,6 +677,9 @@ static int parse_options(char *options, struct super_block *sb)
                case Opt_discard:
                        nilfs_set_opt(sbi, DISCARD);
                        break;
+               case Opt_nodiscard:
+                       nilfs_clear_opt(sbi, DISCARD);
+                       break;
                default:
                        printk(KERN_ERR
                               "NILFS: Unrecognized mount option \"%s\"\n", p);