Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/hirofumi/fatfs-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/hirofumi/fatfs-2.6:
fat: make discard a mount option

+23 -11
+2 -1
fs/fat/fat.h
··· 44 44 nocase:1, /* Does this need case conversion? 0=need case conversion*/ 45 45 usefree:1, /* Use free_clusters for FAT32 */ 46 46 tz_utc:1, /* Filesystem timestamps are in UTC */ 47 - rodir:1; /* allow ATTR_RO for directory */ 47 + rodir:1, /* allow ATTR_RO for directory */ 48 + discard:1; /* Issue discard requests on deletions */ 48 49 }; 49 50 50 51 #define FAT_HASH_BITS 8
+14 -9
fs/fat/fatent.c
··· 566 566 goto error; 567 567 } 568 568 569 - /* 570 - * Issue discard for the sectors we no longer care about, 571 - * batching contiguous clusters into one request 572 - */ 573 - if (cluster != fatent.entry + 1) { 574 - int nr_clus = fatent.entry - first_cl + 1; 569 + if (sbi->options.discard) { 570 + /* 571 + * Issue discard for the sectors we no longer 572 + * care about, batching contiguous clusters 573 + * into one request 574 + */ 575 + if (cluster != fatent.entry + 1) { 576 + int nr_clus = fatent.entry - first_cl + 1; 575 577 576 - sb_issue_discard(sb, fat_clus_to_blknr(sbi, first_cl), 577 - nr_clus * sbi->sec_per_clus); 578 - first_cl = cluster; 578 + sb_issue_discard(sb, 579 + fat_clus_to_blknr(sbi, first_cl), 580 + nr_clus * sbi->sec_per_clus); 581 + 582 + first_cl = cluster; 583 + } 579 584 } 580 585 581 586 ops->ent_put(&fatent, FAT_ENT_FREE);
+7 -1
fs/fat/inode.c
··· 858 858 seq_puts(m, ",errors=panic"); 859 859 else 860 860 seq_puts(m, ",errors=remount-ro"); 861 + if (opts->discard) 862 + seq_puts(m, ",discard"); 861 863 862 864 return 0; 863 865 } ··· 873 871 Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes, 874 872 Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes, 875 873 Opt_obsolate, Opt_flush, Opt_tz_utc, Opt_rodir, Opt_err_cont, 876 - Opt_err_panic, Opt_err_ro, Opt_err, 874 + Opt_err_panic, Opt_err_ro, Opt_discard, Opt_err, 877 875 }; 878 876 879 877 static const match_table_t fat_tokens = { ··· 901 899 {Opt_err_cont, "errors=continue"}, 902 900 {Opt_err_panic, "errors=panic"}, 903 901 {Opt_err_ro, "errors=remount-ro"}, 902 + {Opt_discard, "discard"}, 904 903 {Opt_obsolate, "conv=binary"}, 905 904 {Opt_obsolate, "conv=text"}, 906 905 {Opt_obsolate, "conv=auto"}, ··· 1138 1135 break; 1139 1136 case Opt_rodir: 1140 1137 opts->rodir = 1; 1138 + break; 1139 + case Opt_discard: 1140 + opts->discard = 1; 1141 1141 break; 1142 1142 1143 1143 /* obsolete mount options */