super.c (020abf03cd659388f94cb328e1e1df0656e0d7ff) | super.c (8de52778798fe39660a8d6b26f290e0c93202761) |
---|---|
1/* 2 * linux/fs/sysv/inode.c 3 * 4 * minix/inode.c 5 * Copyright (C) 1991, 1992 Linus Torvalds 6 * 7 * xenix/inode.c 8 * Copyright (C) 1992 Doug Evans --- 30 unchanged lines hidden (view full) --- 39 * We discriminate among SystemV4 and SystemV2 FS by the assumption that 40 * the time stamp is not < 01-01-1980. 41 */ 42 43enum { 44 JAN_1_1980 = (10*365 + 2) * 24 * 60 * 60 45}; 46 | 1/* 2 * linux/fs/sysv/inode.c 3 * 4 * minix/inode.c 5 * Copyright (C) 1991, 1992 Linus Torvalds 6 * 7 * xenix/inode.c 8 * Copyright (C) 1992 Doug Evans --- 30 unchanged lines hidden (view full) --- 39 * We discriminate among SystemV4 and SystemV2 FS by the assumption that 40 * the time stamp is not < 01-01-1980. 41 */ 42 43enum { 44 JAN_1_1980 = (10*365 + 2) * 24 * 60 * 60 45}; 46 |
47static void detected_xenix(struct sysv_sb_info *sbi) | 47static void detected_xenix(struct sysv_sb_info *sbi, unsigned *max_links) |
48{ 49 struct buffer_head *bh1 = sbi->s_bh1; 50 struct buffer_head *bh2 = sbi->s_bh2; 51 struct xenix_super_block * sbd1; 52 struct xenix_super_block * sbd2; 53 54 if (bh1 != bh2) 55 sbd1 = sbd2 = (struct xenix_super_block *) bh1->b_data; 56 else { 57 /* block size = 512, so bh1 != bh2 */ 58 sbd1 = (struct xenix_super_block *) bh1->b_data; 59 sbd2 = (struct xenix_super_block *) (bh2->b_data - 512); 60 } 61 | 48{ 49 struct buffer_head *bh1 = sbi->s_bh1; 50 struct buffer_head *bh2 = sbi->s_bh2; 51 struct xenix_super_block * sbd1; 52 struct xenix_super_block * sbd2; 53 54 if (bh1 != bh2) 55 sbd1 = sbd2 = (struct xenix_super_block *) bh1->b_data; 56 else { 57 /* block size = 512, so bh1 != bh2 */ 58 sbd1 = (struct xenix_super_block *) bh1->b_data; 59 sbd2 = (struct xenix_super_block *) (bh2->b_data - 512); 60 } 61 |
62 sbi->s_link_max = XENIX_LINK_MAX; | 62 *max_links = XENIX_LINK_MAX; |
63 sbi->s_fic_size = XENIX_NICINOD; 64 sbi->s_flc_size = XENIX_NICFREE; 65 sbi->s_sbd1 = (char *)sbd1; 66 sbi->s_sbd2 = (char *)sbd2; 67 sbi->s_sb_fic_count = &sbd1->s_ninode; 68 sbi->s_sb_fic_inodes = &sbd1->s_inode[0]; 69 sbi->s_sb_total_free_inodes = &sbd2->s_tinode; 70 sbi->s_bcache_count = &sbd1->s_nfree; 71 sbi->s_bcache = &sbd1->s_free[0]; 72 sbi->s_free_blocks = &sbd2->s_tfree; 73 sbi->s_sb_time = &sbd2->s_time; 74 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd1->s_isize); 75 sbi->s_nzones = fs32_to_cpu(sbi, sbd1->s_fsize); 76} 77 | 63 sbi->s_fic_size = XENIX_NICINOD; 64 sbi->s_flc_size = XENIX_NICFREE; 65 sbi->s_sbd1 = (char *)sbd1; 66 sbi->s_sbd2 = (char *)sbd2; 67 sbi->s_sb_fic_count = &sbd1->s_ninode; 68 sbi->s_sb_fic_inodes = &sbd1->s_inode[0]; 69 sbi->s_sb_total_free_inodes = &sbd2->s_tinode; 70 sbi->s_bcache_count = &sbd1->s_nfree; 71 sbi->s_bcache = &sbd1->s_free[0]; 72 sbi->s_free_blocks = &sbd2->s_tfree; 73 sbi->s_sb_time = &sbd2->s_time; 74 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd1->s_isize); 75 sbi->s_nzones = fs32_to_cpu(sbi, sbd1->s_fsize); 76} 77 |
78static void detected_sysv4(struct sysv_sb_info *sbi) | 78static void detected_sysv4(struct sysv_sb_info *sbi, unsigned *max_links) |
79{ 80 struct sysv4_super_block * sbd; 81 struct buffer_head *bh1 = sbi->s_bh1; 82 struct buffer_head *bh2 = sbi->s_bh2; 83 84 if (bh1 == bh2) 85 sbd = (struct sysv4_super_block *) (bh1->b_data + BLOCK_SIZE/2); 86 else 87 sbd = (struct sysv4_super_block *) bh2->b_data; 88 | 79{ 80 struct sysv4_super_block * sbd; 81 struct buffer_head *bh1 = sbi->s_bh1; 82 struct buffer_head *bh2 = sbi->s_bh2; 83 84 if (bh1 == bh2) 85 sbd = (struct sysv4_super_block *) (bh1->b_data + BLOCK_SIZE/2); 86 else 87 sbd = (struct sysv4_super_block *) bh2->b_data; 88 |
89 sbi->s_link_max = SYSV_LINK_MAX; | 89 *max_links = SYSV_LINK_MAX; |
90 sbi->s_fic_size = SYSV_NICINOD; 91 sbi->s_flc_size = SYSV_NICFREE; 92 sbi->s_sbd1 = (char *)sbd; 93 sbi->s_sbd2 = (char *)sbd; 94 sbi->s_sb_fic_count = &sbd->s_ninode; 95 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 96 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 97 sbi->s_bcache_count = &sbd->s_nfree; 98 sbi->s_bcache = &sbd->s_free[0]; 99 sbi->s_free_blocks = &sbd->s_tfree; 100 sbi->s_sb_time = &sbd->s_time; 101 sbi->s_sb_state = &sbd->s_state; 102 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd->s_isize); 103 sbi->s_nzones = fs32_to_cpu(sbi, sbd->s_fsize); 104} 105 | 90 sbi->s_fic_size = SYSV_NICINOD; 91 sbi->s_flc_size = SYSV_NICFREE; 92 sbi->s_sbd1 = (char *)sbd; 93 sbi->s_sbd2 = (char *)sbd; 94 sbi->s_sb_fic_count = &sbd->s_ninode; 95 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 96 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 97 sbi->s_bcache_count = &sbd->s_nfree; 98 sbi->s_bcache = &sbd->s_free[0]; 99 sbi->s_free_blocks = &sbd->s_tfree; 100 sbi->s_sb_time = &sbd->s_time; 101 sbi->s_sb_state = &sbd->s_state; 102 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd->s_isize); 103 sbi->s_nzones = fs32_to_cpu(sbi, sbd->s_fsize); 104} 105 |
106static void detected_sysv2(struct sysv_sb_info *sbi) | 106static void detected_sysv2(struct sysv_sb_info *sbi, unsigned *max_links) |
107{ 108 struct sysv2_super_block *sbd; 109 struct buffer_head *bh1 = sbi->s_bh1; 110 struct buffer_head *bh2 = sbi->s_bh2; 111 112 if (bh1 == bh2) 113 sbd = (struct sysv2_super_block *) (bh1->b_data + BLOCK_SIZE/2); 114 else 115 sbd = (struct sysv2_super_block *) bh2->b_data; 116 | 107{ 108 struct sysv2_super_block *sbd; 109 struct buffer_head *bh1 = sbi->s_bh1; 110 struct buffer_head *bh2 = sbi->s_bh2; 111 112 if (bh1 == bh2) 113 sbd = (struct sysv2_super_block *) (bh1->b_data + BLOCK_SIZE/2); 114 else 115 sbd = (struct sysv2_super_block *) bh2->b_data; 116 |
117 sbi->s_link_max = SYSV_LINK_MAX; | 117 *max_links = SYSV_LINK_MAX; |
118 sbi->s_fic_size = SYSV_NICINOD; 119 sbi->s_flc_size = SYSV_NICFREE; 120 sbi->s_sbd1 = (char *)sbd; 121 sbi->s_sbd2 = (char *)sbd; 122 sbi->s_sb_fic_count = &sbd->s_ninode; 123 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 124 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 125 sbi->s_bcache_count = &sbd->s_nfree; 126 sbi->s_bcache = &sbd->s_free[0]; 127 sbi->s_free_blocks = &sbd->s_tfree; 128 sbi->s_sb_time = &sbd->s_time; 129 sbi->s_sb_state = &sbd->s_state; 130 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd->s_isize); 131 sbi->s_nzones = fs32_to_cpu(sbi, sbd->s_fsize); 132} 133 | 118 sbi->s_fic_size = SYSV_NICINOD; 119 sbi->s_flc_size = SYSV_NICFREE; 120 sbi->s_sbd1 = (char *)sbd; 121 sbi->s_sbd2 = (char *)sbd; 122 sbi->s_sb_fic_count = &sbd->s_ninode; 123 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 124 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 125 sbi->s_bcache_count = &sbd->s_nfree; 126 sbi->s_bcache = &sbd->s_free[0]; 127 sbi->s_free_blocks = &sbd->s_tfree; 128 sbi->s_sb_time = &sbd->s_time; 129 sbi->s_sb_state = &sbd->s_state; 130 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd->s_isize); 131 sbi->s_nzones = fs32_to_cpu(sbi, sbd->s_fsize); 132} 133 |
134static void detected_coherent(struct sysv_sb_info *sbi) | 134static void detected_coherent(struct sysv_sb_info *sbi, unsigned *max_links) |
135{ 136 struct coh_super_block * sbd; 137 struct buffer_head *bh1 = sbi->s_bh1; 138 139 sbd = (struct coh_super_block *) bh1->b_data; 140 | 135{ 136 struct coh_super_block * sbd; 137 struct buffer_head *bh1 = sbi->s_bh1; 138 139 sbd = (struct coh_super_block *) bh1->b_data; 140 |
141 sbi->s_link_max = COH_LINK_MAX; | 141 *max_links = COH_LINK_MAX; |
142 sbi->s_fic_size = COH_NICINOD; 143 sbi->s_flc_size = COH_NICFREE; 144 sbi->s_sbd1 = (char *)sbd; 145 sbi->s_sbd2 = (char *)sbd; 146 sbi->s_sb_fic_count = &sbd->s_ninode; 147 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 148 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 149 sbi->s_bcache_count = &sbd->s_nfree; 150 sbi->s_bcache = &sbd->s_free[0]; 151 sbi->s_free_blocks = &sbd->s_tfree; 152 sbi->s_sb_time = &sbd->s_time; 153 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd->s_isize); 154 sbi->s_nzones = fs32_to_cpu(sbi, sbd->s_fsize); 155} 156 | 142 sbi->s_fic_size = COH_NICINOD; 143 sbi->s_flc_size = COH_NICFREE; 144 sbi->s_sbd1 = (char *)sbd; 145 sbi->s_sbd2 = (char *)sbd; 146 sbi->s_sb_fic_count = &sbd->s_ninode; 147 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 148 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 149 sbi->s_bcache_count = &sbd->s_nfree; 150 sbi->s_bcache = &sbd->s_free[0]; 151 sbi->s_free_blocks = &sbd->s_tfree; 152 sbi->s_sb_time = &sbd->s_time; 153 sbi->s_firstdatazone = fs16_to_cpu(sbi, sbd->s_isize); 154 sbi->s_nzones = fs32_to_cpu(sbi, sbd->s_fsize); 155} 156 |
157static void detected_v7(struct sysv_sb_info *sbi) | 157static void detected_v7(struct sysv_sb_info *sbi, unsigned *max_links) |
158{ 159 struct buffer_head *bh2 = sbi->s_bh2; 160 struct v7_super_block *sbd = (struct v7_super_block *)bh2->b_data; 161 | 158{ 159 struct buffer_head *bh2 = sbi->s_bh2; 160 struct v7_super_block *sbd = (struct v7_super_block *)bh2->b_data; 161 |
162 sbi->s_link_max = V7_LINK_MAX; | 162 *max_links = V7_LINK_MAX; |
163 sbi->s_fic_size = V7_NICINOD; 164 sbi->s_flc_size = V7_NICFREE; 165 sbi->s_sbd1 = (char *)sbd; 166 sbi->s_sbd2 = (char *)sbd; 167 sbi->s_sb_fic_count = &sbd->s_ninode; 168 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 169 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 170 sbi->s_bcache_count = &sbd->s_nfree; --- 114 unchanged lines hidden (view full) --- 285 [FSTYPE_XENIX] = "Xenix", 286 [FSTYPE_SYSV4] = "SystemV", 287 [FSTYPE_SYSV2] = "SystemV Release 2", 288 [FSTYPE_COH] = "Coherent", 289 [FSTYPE_V7] = "V7", 290 [FSTYPE_AFS] = "AFS", 291}; 292 | 163 sbi->s_fic_size = V7_NICINOD; 164 sbi->s_flc_size = V7_NICFREE; 165 sbi->s_sbd1 = (char *)sbd; 166 sbi->s_sbd2 = (char *)sbd; 167 sbi->s_sb_fic_count = &sbd->s_ninode; 168 sbi->s_sb_fic_inodes = &sbd->s_inode[0]; 169 sbi->s_sb_total_free_inodes = &sbd->s_tinode; 170 sbi->s_bcache_count = &sbd->s_nfree; --- 114 unchanged lines hidden (view full) --- 285 [FSTYPE_XENIX] = "Xenix", 286 [FSTYPE_SYSV4] = "SystemV", 287 [FSTYPE_SYSV2] = "SystemV Release 2", 288 [FSTYPE_COH] = "Coherent", 289 [FSTYPE_V7] = "V7", 290 [FSTYPE_AFS] = "AFS", 291}; 292 |
293static void (*flavour_setup[])(struct sysv_sb_info *) = { | 293static void (*flavour_setup[])(struct sysv_sb_info *, unsigned *) = { |
294 [FSTYPE_XENIX] = detected_xenix, 295 [FSTYPE_SYSV4] = detected_sysv4, 296 [FSTYPE_SYSV2] = detected_sysv2, 297 [FSTYPE_COH] = detected_coherent, 298 [FSTYPE_V7] = detected_v7, 299 [FSTYPE_AFS] = detected_sysv4, 300}; 301 302static int complete_read_super(struct super_block *sb, int silent, int size) 303{ 304 struct sysv_sb_info *sbi = SYSV_SB(sb); 305 struct inode *root_inode; 306 char *found = flavour_names[sbi->s_type]; 307 u_char n_bits = size+8; 308 int bsize = 1 << n_bits; 309 int bsize_4 = bsize >> 2; 310 311 sbi->s_firstinodezone = 2; 312 | 294 [FSTYPE_XENIX] = detected_xenix, 295 [FSTYPE_SYSV4] = detected_sysv4, 296 [FSTYPE_SYSV2] = detected_sysv2, 297 [FSTYPE_COH] = detected_coherent, 298 [FSTYPE_V7] = detected_v7, 299 [FSTYPE_AFS] = detected_sysv4, 300}; 301 302static int complete_read_super(struct super_block *sb, int silent, int size) 303{ 304 struct sysv_sb_info *sbi = SYSV_SB(sb); 305 struct inode *root_inode; 306 char *found = flavour_names[sbi->s_type]; 307 u_char n_bits = size+8; 308 int bsize = 1 << n_bits; 309 int bsize_4 = bsize >> 2; 310 311 sbi->s_firstinodezone = 2; 312 |
313 flavour_setup[sbi->s_type](sbi); | 313 flavour_setup[sbi->s_type](sbi, &sb->s_max_links); |
314 315 sbi->s_truncate = 1; 316 sbi->s_ndatazones = sbi->s_nzones - sbi->s_firstdatazone; 317 sbi->s_inodes_per_block = bsize >> 6; 318 sbi->s_inodes_per_block_1 = (bsize >> 6)-1; 319 sbi->s_inodes_per_block_bits = n_bits-6; 320 sbi->s_ind_per_block = bsize_4; 321 sbi->s_ind_per_block_2 = bsize_4*bsize_4; --- 269 unchanged lines hidden --- | 314 315 sbi->s_truncate = 1; 316 sbi->s_ndatazones = sbi->s_nzones - sbi->s_firstdatazone; 317 sbi->s_inodes_per_block = bsize >> 6; 318 sbi->s_inodes_per_block_1 = (bsize >> 6)-1; 319 sbi->s_inodes_per_block_bits = n_bits-6; 320 sbi->s_ind_per_block = bsize_4; 321 sbi->s_ind_per_block_2 = bsize_4*bsize_4; --- 269 unchanged lines hidden --- |