Currently shipping discard capable SSDs and arrays have rather sub-optimal implementations of the command and can the use of it can cause massive slowdowns. Make issueing these commands option as it's already in btrfs and gfs2. Signed-off-by: Christoph Hellwig <hch@xxxxxx> Index: linux-2.6/fs/fat/fat.h =================================================================== --- linux-2.6.orig/fs/fat/fat.h 2009-11-18 13:47:49.380003970 +0100 +++ linux-2.6/fs/fat/fat.h 2009-11-18 13:48:13.169014622 +0100 @@ -44,7 +44,8 @@ struct fat_mount_options { nocase:1, /* Does this need case conversion? 0=need case conversion*/ usefree:1, /* Use free_clusters for FAT32 */ tz_utc:1, /* Filesystem timestamps are in UTC */ - rodir:1; /* allow ATTR_RO for directory */ + rodir:1, /* allow ATTR_RO for directory */ + discard:1; /* Issue discard requests on deletions */ }; #define FAT_HASH_BITS 8 Index: linux-2.6/fs/fat/fatent.c =================================================================== --- linux-2.6.orig/fs/fat/fatent.c 2009-11-18 13:48:24.102254108 +0100 +++ linux-2.6/fs/fat/fatent.c 2009-11-18 13:49:14.338033708 +0100 @@ -573,8 +573,11 @@ int fat_free_clusters(struct inode *inod if (cluster != fatent.entry + 1) { int nr_clus = fatent.entry - first_cl + 1; - sb_issue_discard(sb, fat_clus_to_blknr(sbi, first_cl), - nr_clus * sbi->sec_per_clus); + if (sbi->options.discard) { + sb_issue_discard(sb, + fat_clus_to_blknr(sbi, first_cl), + nr_clus * sbi->sec_per_clus); + } first_cl = cluster; } Index: linux-2.6/fs/fat/inode.c =================================================================== --- linux-2.6.orig/fs/fat/inode.c 2009-11-18 13:46:40.484256340 +0100 +++ linux-2.6/fs/fat/inode.c 2009-11-18 13:47:39.457256306 +0100 @@ -871,7 +871,7 @@ enum { Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes, Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes, Opt_obsolate, Opt_flush, Opt_tz_utc, Opt_rodir, Opt_err_cont, - Opt_err_panic, Opt_err_ro, Opt_err, + Opt_err_panic, Opt_err_ro, Opt_discard, Opt_err, }; static const match_table_t fat_tokens = { @@ -910,6 +910,7 @@ static const match_table_t fat_tokens = {Opt_obsolate, "cvf_format=%20s"}, {Opt_obsolate, "cvf_options=%100s"}, {Opt_obsolate, "posix"}, + {Opt_discard, "discard"}, {Opt_err, NULL}, }; static const match_table_t msdos_tokens = { @@ -1136,6 +1137,9 @@ static int parse_options(char *options, case Opt_rodir: opts->rodir = 1; break; + case Opt_discard: + opts->discard = 1; + break; /* obsolete mount options */ case Opt_obsolate: -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html