|
|
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.