|
|
1.1 ! root 1: diff -u -r linux-2.3.30-6-orig/fs/fat/cvf.c linux-2.3.30-6-new1/fs/fat/cvf.c ! 2: --- linux-2.3.30-6-orig/fs/fat/cvf.c Mon Aug 9 18:43:49 1999 ! 3: +++ linux-2.3.30-6-new1/fs/fat/cvf.c Wed Nov 3 00:28:53 1999 ! 4: @@ -53,49 +53,55 @@ ! 5: loff_t *ppos); ! 6: ! 7: struct cvf_format default_cvf = { ! 8: - 0, /* version - who cares? */ ! 9: - "plain", ! 10: - 0, /* flags - who cares? */ ! 11: - NULL, ! 12: - NULL, ! 13: - NULL, ! 14: - default_fat_bread, ! 15: - default_fat_getblk, ! 16: - default_fat_brelse, ! 17: - default_fat_mark_buffer_dirty, ! 18: - default_fat_set_uptodate, ! 19: - default_fat_is_uptodate, ! 20: - default_fat_ll_rw_block, ! 21: - default_fat_access, ! 22: - NULL, ! 23: - default_fat_bmap, ! 24: - generic_file_read, ! 25: - default_fat_file_write, ! 26: - NULL, ! 27: - NULL ! 28: + 0, /* cvf unique version number - 0 for fat internal CVF */ ! 29: + "plain", /* cvf version name */ ! 30: + 0, /* flags - capabilities, ex. CVF_USE_READPAGE */ ! 31: + NULL, /* detect_cvf */ ! 32: + NULL, /* mount_cvf */ ! 33: + NULL, /* unmount_cvf */ ! 34: + default_fat_bread, /* cvf_bread */ ! 35: + default_fat_getblk, /* cvf_getblk */ ! 36: + default_fat_brelse, /* cvf_brelse */ ! 37: + default_fat_mark_buffer_dirty, /* cvf_mark_buffer_dirty */ ! 38: + default_fat_set_uptodate, /* cvf_set_uptodate */ ! 39: + default_fat_is_uptodate, /* cvf_is_uptodate */ ! 40: + default_fat_ll_rw_block, /* cvf_ll_rw_block */ ! 41: + default_fat_access, /* fat_access */ ! 42: + NULL, /* cvf_statfs */ ! 43: + default_fat_bmap, /* cvf_bmap */ ! 44: + generic_file_read, /* cvf_file_read */ ! 45: + default_fat_file_write, /* cvf_file_write */ ! 46: + NULL, /* cvf_mmap */ ! 47: + block_read_full_page, /* cvf_readpage */ ! 48: + NULL, /* cvf_writepage */ ! 49: + NULL, /* cvf_dir_ioctl */ ! 50: + NULL /* zero_out_cluster */ ! 51: }; ! 52: ! 53: struct cvf_format bigblock_cvf = { ! 54: - 0, /* version - who cares? */ ! 55: - "big_blocks", ! 56: - 0, /* flags - who cares? */ ! 57: - NULL, ! 58: - NULL, ! 59: - NULL, ! 60: - bigblock_fat_bread, ! 61: - bigblock_fat_bread, ! 62: - bigblock_fat_brelse, ! 63: - bigblock_fat_mark_buffer_dirty, ! 64: - bigblock_fat_set_uptodate, ! 65: - bigblock_fat_is_uptodate, ! 66: - bigblock_fat_ll_rw_block, ! 67: - default_fat_access, ! 68: - NULL, ! 69: - default_fat_bmap, ! 70: - NULL, ! 71: - default_fat_file_write, ! 72: - NULL, ! 73: - NULL ! 74: + 0, /* cvf unique version number - 0 for fat internal CVF */ ! 75: + "big_blocks", /* cvf version name */ ! 76: + 0, /* flags - capabilities, ex. CVF_USE_READPAGE */ ! 77: + NULL, /* detect_cvf */ ! 78: + NULL, /* mount_cvf */ ! 79: + NULL, /* unmount_cvf */ ! 80: + bigblock_fat_bread, /* cvf_bread */ ! 81: + bigblock_fat_bread, /* cvf_getblk */ ! 82: + bigblock_fat_brelse, /* cvf_brelse */ ! 83: + bigblock_fat_mark_buffer_dirty, /* cvf_mark_buffer_dirty */ ! 84: + bigblock_fat_set_uptodate, /* cvf_set_uptodate */ ! 85: + bigblock_fat_is_uptodate, /* cvf_is_uptodate */ ! 86: + bigblock_fat_ll_rw_block, /* cvf_ll_rw_block */ ! 87: + default_fat_access, /* fat_access */ ! 88: + NULL, /* cvf_statfs */ ! 89: + default_fat_bmap, /* cvf_bmap */ ! 90: + NULL, /* ?????? */ /* cvf_file_read */ ! 91: + default_fat_file_write, /* cvf_file_write */ ! 92: + NULL, /* cvf_mmap */ ! 93: + block_read_full_page, /* cvf_readpage */ ! 94: + NULL, /* cvf_writepage */ ! 95: + NULL, /* cvf_dir_ioctl */ ! 96: + NULL /* zero_out_cluster */ ! 97: }; ! 98: ! 99: struct cvf_format *cvf_formats[MAX_CVF_FORMATS]={NULL,NULL,NULL}; ! 100: diff -u -r linux-2.3.30-6-orig/fs/fat/fatfs_syms.c linux-2.3.30-6-new1/fs/fat/fatfs_syms.c ! 101: --- linux-2.3.30-6-orig/fs/fat/fatfs_syms.c Tue Oct 26 18:21:46 1999 ! 102: +++ linux-2.3.30-6-new1/fs/fat/fatfs_syms.c Mon Nov 1 22:29:25 1999 ! 103: @@ -17,6 +17,7 @@ ! 104: ! 105: extern struct file_operations fat_dir_operations; ! 106: ! 107: +EXPORT_SYMBOL(fat_add_cluster); ! 108: EXPORT_SYMBOL(fat_new_dir); ! 109: EXPORT_SYMBOL(fat_bmap); ! 110: EXPORT_SYMBOL(fat_get_block); ! 111: @@ -55,6 +56,12 @@ ! 112: EXPORT_SYMBOL(fat_dir_ioctl); ! 113: EXPORT_SYMBOL(fat_add_entries); ! 114: EXPORT_SYMBOL(fat_dir_empty); ! 115: + ! 116: +#if 0 /* will be reenabled again for CVF mmap support */ ! 117: +EXPORT_SYMBOL(fat_mmap); ! 118: +EXPORT_SYMBOL(fat_readpage); ! 119: +EXPORT_SYMBOL(fat_writepage); ! 120: +#endif ! 121: ! 122: int init_fat_fs(void) ! 123: { ! 124: diff -u -r linux-2.3.30-6-orig/fs/fat/inode.c linux-2.3.30-6-new1/fs/fat/inode.c ! 125: --- linux-2.3.30-6-orig/fs/fat/inode.c Sat Nov 6 00:27:28 1999 ! 126: +++ linux-2.3.30-6-new1/fs/fat/inode.c Sun Dec 5 01:16:44 1999 ! 127: @@ -434,12 +434,15 @@ ! 128: struct msdos_sb_info *sbi = MSDOS_SB(sb); ! 129: char *p; ! 130: int data_sectors,logical_sector_size,sector_mult,fat_clusters=0; ! 131: - int debug,error,fat,cp; ! 132: + int debug; ! 133: + int error = 0; ! 134: + int fat,cp; ! 135: int blksize = 512; ! 136: int fat32; ! 137: struct fat_mount_options opts; ! 138: char buf[50]; ! 139: - int i; ! 140: + int cvf_index=-1; ! 141: + /* int i; */ ! 142: char cvf_format[21]; ! 143: char cvf_options[101]; ! 144: ! 145: @@ -514,14 +517,15 @@ ! 146: sbi->cluster_size = b->cluster_size*sector_mult; ! 147: if (!sbi->cluster_size || (sbi->cluster_size & (sbi->cluster_size-1))) { ! 148: printk("fatfs: bogus cluster size\n"); ! 149: - brelse(bh); ! 150: - goto out_invalid; ! 151: + error = 1; ! 152: + /* brelse(bh);goto out_invalid; */ ! 153: + }else{ ! 154: + for (sbi->cluster_bits=0; ! 155: + 1<<sbi->cluster_bits<sbi->cluster_size; ! 156: + sbi->cluster_bits++) ! 157: + ; ! 158: + sbi->cluster_bits += SECTOR_BITS; ! 159: } ! 160: - for (sbi->cluster_bits=0; ! 161: - 1<<sbi->cluster_bits<sbi->cluster_size; ! 162: - sbi->cluster_bits++) ! 163: - ; ! 164: - sbi->cluster_bits += SECTOR_BITS; ! 165: sbi->fats = b->fats; ! 166: sbi->fat_start = CF_LE_W(b->reserved)*sector_mult; ! 167: if (!b->fat_length && b->fat32_length) { ! 168: @@ -573,7 +577,7 @@ ! 169: data_sectors = CF_LE_L(b->total_sect); ! 170: } ! 171: data_sectors = data_sectors * sector_mult - sbi->data_start; ! 172: - error = !b->cluster_size || !sector_mult; ! 173: + error |= !sector_mult; ! 174: if (!error) { ! 175: sbi->clusters = b->cluster_size ? data_sectors/ ! 176: b->cluster_size/sector_mult : 0; ! 177: @@ -599,11 +603,14 @@ ! 178: /* on odd sectors. */ ! 179: sb->s_blocksize_bits = blksize == 512 ? 9 : (blksize == 1024 ? 10 : 11); ! 180: if (!strcmp(cvf_format,"none")) ! 181: - i = -1; ! 182: + cvf_index = -1; ! 183: else ! 184: - i = detect_cvf(sb,cvf_format); ! 185: - if (i >= 0) ! 186: - error = cvf_formats[i]->mount_cvf(sb,cvf_options); ! 187: + cvf_index = detect_cvf(sb,cvf_format); ! 188: + if (cvf_index >= 0) { ! 189: + ++cvf_format_use_count[cvf_index]; ! 190: + sbi->cvf_format = cvf_formats[cvf_index]; ! 191: + error = cvf_formats[cvf_index]->mount_cvf(sb,cvf_options); ! 192: + } ! 193: else if (sb->s_blocksize == 512) ! 194: sbi->cvf_format = &default_cvf; ! 195: else ! 196: @@ -627,7 +634,7 @@ ! 197: sbi->root_cluster,sbi->free_clusters); ! 198: printk ("Transaction block size = %d\n",blksize); ! 199: } ! 200: - if (i<0) if (sbi->clusters+2 > fat_clusters) ! 201: + if (cvf_index<0) if (sbi->clusters+2 > fat_clusters) ! 202: sbi->clusters = fat_clusters-2; ! 203: if (error) ! 204: goto out_invalid; ! 205: @@ -672,10 +679,6 @@ ! 206: sb->s_root = d_alloc_root(root_inode); ! 207: if (!sb->s_root) ! 208: goto out_no_root; ! 209: - if(i>=0) { ! 210: - sbi->cvf_format = cvf_formats[i]; ! 211: - ++cvf_format_use_count[i]; ! 212: - } ! 213: return sb; ! 214: ! 215: out_no_root: ! 216: @@ -687,6 +690,8 @@ ! 217: unload_nls(sbi->nls_disk); ! 218: goto out_fail; ! 219: out_invalid: ! 220: + if(cvf_index>=0) ! 221: + --cvf_format_use_count[cvf_index]; ! 222: if (!silent) ! 223: printk("VFS: Can't find a valid MSDOS filesystem on dev %s.\n", ! 224: kdevname(sb->s_dev)); ! 225: diff -u -r linux-2.3.30-6-orig/fs/fat/misc.c linux-2.3.30-6-new1/fs/fat/misc.c ! 226: --- linux-2.3.30-6-orig/fs/fat/misc.c Mon Aug 30 17:23:14 1999 ! 227: +++ linux-2.3.30-6-new1/fs/fat/misc.c Sun Dec 5 03:11:47 1999 ! 228: @@ -209,8 +209,16 @@ ! 229: int cluster_size = MSDOS_SB(sb)->cluster_size; ! 230: ! 231: if (MSDOS_SB(sb)->fat_bits != 32) { ! 232: - if (inode->i_ino == MSDOS_ROOT_INO) return res; ! 233: + if (inode->i_ino == MSDOS_ROOT_INO){ ! 234: +#ifdef DEBUG ! 235: +printk("FAT extend dir called for root\n"); ! 236: +#endif ! 237: + return res; ! 238: + } ! 239: } ! 240: +#ifdef DEBUG ! 241: +printk("FAT extend dir called for NON-root\n"); ! 242: +#endif ! 243: if (!MSDOS_SB(sb)->free_clusters) return res; ! 244: lock_fat(sb); ! 245: limit = MSDOS_SB(sb)->clusters; ! 246: @@ -279,9 +287,11 @@ ! 247: sector = MSDOS_SB(sb)->data_start+(nr-2)*cluster_size; ! 248: last_sector = sector + cluster_size; ! 249: if (MSDOS_SB(sb)->cvf_format && ! 250: - MSDOS_SB(sb)->cvf_format->zero_out_cluster) ! 251: + MSDOS_SB(sb)->cvf_format->zero_out_cluster){ ! 252: + /* CVF zeroes full cluster only */ ! 253: MSDOS_SB(sb)->cvf_format->zero_out_cluster(inode,nr); ! 254: - else ! 255: + res=fat_bread(sb,fat_bmap(inode,inode->i_blocks)); ! 256: + }else ! 257: for ( ; sector < last_sector; sector++) { ! 258: #ifdef DEBUG ! 259: printk("zeroing sector %d\n",sector); ! 260: diff -u -r linux-2.3.30-6-orig/include/linux/fat_cvf.h linux-2.3.30-6-new1/include/linux/fat_cvf.h ! 261: --- linux-2.3.30-6-orig/include/linux/fat_cvf.h Mon Aug 9 18:43:49 1999 ! 262: +++ linux-2.3.30-6-new1/include/linux/fat_cvf.h Sat Dec 4 23:25:26 1999 ! 263: @@ -30,8 +30,8 @@ ! 264: ssize_t (*cvf_file_read) ( struct file *, char *, size_t, loff_t *); ! 265: ssize_t (*cvf_file_write) ( struct file *, const char *, size_t, loff_t *); ! 266: int (*cvf_mmap) (struct file *, struct vm_area_struct *); ! 267: - int (*cvf_readpage) (struct inode *, struct page *); ! 268: - int (*cvf_writepage) (struct inode *, struct page *); ! 269: + int (*cvf_readpage) (struct dentry *, struct page *); ! 270: + int (*cvf_writepage) (struct dentry *, struct page *); ! 271: int (*cvf_dir_ioctl) (struct inode * inode, struct file * filp, ! 272: unsigned int cmd, unsigned long arg); ! 273: void (*zero_out_cluster) (struct inode*, int clusternr); ! 274: diff -u -r linux-2.3.30-6-orig/include/linux/msdos_fs.h linux-2.3.30-6-new1/include/linux/msdos_fs.h ! 275: --- linux-2.3.30-6-orig/include/linux/msdos_fs.h Wed Oct 27 23:19:11 1999 ! 276: +++ linux-2.3.30-6-new1/include/linux/msdos_fs.h Wed Nov 24 22:25:31 1999 ! 277: @@ -274,6 +274,7 @@ ! 278: /* mmap.c */ ! 279: extern int fat_mmap(struct file *, struct vm_area_struct *); ! 280: extern int fat_readpage(struct file *, struct page *); ! 281: +extern int fat_writepage(struct file *, struct page *); ! 282: ! 283: ! 284: /* vfat.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.