diff options
Diffstat (limited to 'fs/isofs')
-rw-r--r-- | fs/isofs/compress.c | 21 | ||||
-rw-r--r-- | fs/isofs/dir.c | 13 | ||||
-rw-r--r-- | fs/isofs/export.c | 6 | ||||
-rw-r--r-- | fs/isofs/inode.c | 19 | ||||
-rw-r--r-- | fs/isofs/isofs.h | 190 | ||||
-rw-r--r-- | fs/isofs/joliet.c | 6 | ||||
-rw-r--r-- | fs/isofs/namei.c | 13 | ||||
-rw-r--r-- | fs/isofs/rock.c | 8 | ||||
-rw-r--r-- | fs/isofs/util.c | 5 |
9 files changed, 203 insertions, 78 deletions
diff --git a/fs/isofs/compress.c b/fs/isofs/compress.c index fb42c3f3bf0d..34a44e451689 100644 --- a/fs/isofs/compress.c +++ b/fs/isofs/compress.c | |||
@@ -18,29 +18,12 @@ | |||
18 | 18 | ||
19 | #include <linux/config.h> | 19 | #include <linux/config.h> |
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | |||
22 | #include <linux/stat.h> | ||
23 | #include <linux/time.h> | ||
24 | #include <linux/iso_fs.h> | ||
25 | #include <linux/kernel.h> | ||
26 | #include <linux/major.h> | ||
27 | #include <linux/mm.h> | ||
28 | #include <linux/string.h> | ||
29 | #include <linux/slab.h> | ||
30 | #include <linux/errno.h> | ||
31 | #include <linux/init.h> | 21 | #include <linux/init.h> |
32 | #include <linux/nls.h> | 22 | |
33 | #include <linux/ctype.h> | ||
34 | #include <linux/smp_lock.h> | ||
35 | #include <linux/blkdev.h> | ||
36 | #include <linux/vmalloc.h> | 23 | #include <linux/vmalloc.h> |
37 | #include <linux/zlib.h> | 24 | #include <linux/zlib.h> |
38 | #include <linux/buffer_head.h> | ||
39 | |||
40 | #include <asm/system.h> | ||
41 | #include <asm/uaccess.h> | ||
42 | #include <asm/semaphore.h> | ||
43 | 25 | ||
26 | #include "isofs.h" | ||
44 | #include "zisofs.h" | 27 | #include "zisofs.h" |
45 | 28 | ||
46 | /* This should probably be global. */ | 29 | /* This should probably be global. */ |
diff --git a/fs/isofs/dir.c b/fs/isofs/dir.c index 14d86de6637d..6030956b894b 100644 --- a/fs/isofs/dir.c +++ b/fs/isofs/dir.c | |||
@@ -10,20 +10,9 @@ | |||
10 | * | 10 | * |
11 | * isofs directory handling functions | 11 | * isofs directory handling functions |
12 | */ | 12 | */ |
13 | #include <linux/errno.h> | ||
14 | #include <linux/fs.h> | ||
15 | #include <linux/iso_fs.h> | ||
16 | #include <linux/kernel.h> | ||
17 | #include <linux/stat.h> | ||
18 | #include <linux/string.h> | ||
19 | #include <linux/mm.h> | ||
20 | #include <linux/slab.h> | ||
21 | #include <linux/time.h> | ||
22 | #include <linux/config.h> | 13 | #include <linux/config.h> |
23 | #include <linux/smp_lock.h> | 14 | #include <linux/smp_lock.h> |
24 | #include <linux/buffer_head.h> | 15 | #include "isofs.h" |
25 | |||
26 | #include <asm/uaccess.h> | ||
27 | 16 | ||
28 | static int isofs_readdir(struct file *, void *, filldir_t); | 17 | static int isofs_readdir(struct file *, void *, filldir_t); |
29 | 18 | ||
diff --git a/fs/isofs/export.c b/fs/isofs/export.c index e4252c960871..4af856a7fda7 100644 --- a/fs/isofs/export.c +++ b/fs/isofs/export.c | |||
@@ -13,11 +13,7 @@ | |||
13 | * fs/exportfs/expfs.c. | 13 | * fs/exportfs/expfs.c. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/buffer_head.h> | 16 | #include "isofs.h" |
17 | #include <linux/errno.h> | ||
18 | #include <linux/fs.h> | ||
19 | #include <linux/iso_fs.h> | ||
20 | #include <linux/kernel.h> | ||
21 | 17 | ||
22 | static struct dentry * | 18 | static struct dentry * |
23 | isofs_export_iget(struct super_block *sb, | 19 | isofs_export_iget(struct super_block *sb, |
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index b9256e65e144..abd7b12eeca7 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c | |||
@@ -12,29 +12,18 @@ | |||
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/config.h> | 14 | #include <linux/config.h> |
15 | #include <linux/init.h> | ||
15 | #include <linux/module.h> | 16 | #include <linux/module.h> |
16 | 17 | ||
17 | #include <linux/stat.h> | ||
18 | #include <linux/time.h> | ||
19 | #include <linux/iso_fs.h> | ||
20 | #include <linux/kernel.h> | ||
21 | #include <linux/major.h> | ||
22 | #include <linux/mm.h> | ||
23 | #include <linux/string.h> | ||
24 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
25 | #include <linux/errno.h> | ||
26 | #include <linux/cdrom.h> | ||
27 | #include <linux/init.h> | ||
28 | #include <linux/nls.h> | 19 | #include <linux/nls.h> |
29 | #include <linux/ctype.h> | 20 | #include <linux/ctype.h> |
30 | #include <linux/smp_lock.h> | 21 | #include <linux/smp_lock.h> |
31 | #include <linux/blkdev.h> | 22 | #include <linux/statfs.h> |
32 | #include <linux/buffer_head.h> | 23 | #include <linux/cdrom.h> |
33 | #include <linux/vfs.h> | ||
34 | #include <linux/parser.h> | 24 | #include <linux/parser.h> |
35 | #include <asm/system.h> | ||
36 | #include <asm/uaccess.h> | ||
37 | 25 | ||
26 | #include "isofs.h" | ||
38 | #include "zisofs.h" | 27 | #include "zisofs.h" |
39 | 28 | ||
40 | #define BEQUIET | 29 | #define BEQUIET |
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h new file mode 100644 index 000000000000..9ce7b51fb614 --- /dev/null +++ b/fs/isofs/isofs.h | |||
@@ -0,0 +1,190 @@ | |||
1 | #include <linux/fs.h> | ||
2 | #include <linux/buffer_head.h> | ||
3 | #include <linux/iso_fs.h> | ||
4 | #include <asm/unaligned.h> | ||
5 | |||
6 | enum isofs_file_format { | ||
7 | isofs_file_normal = 0, | ||
8 | isofs_file_sparse = 1, | ||
9 | isofs_file_compressed = 2, | ||
10 | }; | ||
11 | |||
12 | /* | ||
13 | * iso fs inode data in memory | ||
14 | */ | ||
15 | struct iso_inode_info { | ||
16 | unsigned long i_iget5_block; | ||
17 | unsigned long i_iget5_offset; | ||
18 | unsigned int i_first_extent; | ||
19 | unsigned char i_file_format; | ||
20 | unsigned char i_format_parm[3]; | ||
21 | unsigned long i_next_section_block; | ||
22 | unsigned long i_next_section_offset; | ||
23 | off_t i_section_size; | ||
24 | struct inode vfs_inode; | ||
25 | }; | ||
26 | |||
27 | /* | ||
28 | * iso9660 super-block data in memory | ||
29 | */ | ||
30 | struct isofs_sb_info { | ||
31 | unsigned long s_ninodes; | ||
32 | unsigned long s_nzones; | ||
33 | unsigned long s_firstdatazone; | ||
34 | unsigned long s_log_zone_size; | ||
35 | unsigned long s_max_size; | ||
36 | |||
37 | unsigned char s_high_sierra; /* A simple flag */ | ||
38 | unsigned char s_mapping; | ||
39 | int s_rock_offset; /* offset of SUSP fields within SU area */ | ||
40 | unsigned char s_rock; | ||
41 | unsigned char s_joliet_level; | ||
42 | unsigned char s_utf8; | ||
43 | unsigned char s_cruft; /* Broken disks with high | ||
44 | byte of length containing | ||
45 | junk */ | ||
46 | unsigned char s_unhide; | ||
47 | unsigned char s_nosuid; | ||
48 | unsigned char s_nodev; | ||
49 | unsigned char s_nocompress; | ||
50 | |||
51 | mode_t s_mode; | ||
52 | gid_t s_gid; | ||
53 | uid_t s_uid; | ||
54 | struct nls_table *s_nls_iocharset; /* Native language support table */ | ||
55 | }; | ||
56 | |||
57 | static inline struct isofs_sb_info *ISOFS_SB(struct super_block *sb) | ||
58 | { | ||
59 | return sb->s_fs_info; | ||
60 | } | ||
61 | |||
62 | static inline struct iso_inode_info *ISOFS_I(struct inode *inode) | ||
63 | { | ||
64 | return container_of(inode, struct iso_inode_info, vfs_inode); | ||
65 | } | ||
66 | |||
67 | static inline int isonum_711(char *p) | ||
68 | { | ||
69 | return *(u8 *)p; | ||
70 | } | ||
71 | static inline int isonum_712(char *p) | ||
72 | { | ||
73 | return *(s8 *)p; | ||
74 | } | ||
75 | static inline unsigned int isonum_721(char *p) | ||
76 | { | ||
77 | return le16_to_cpu(get_unaligned((__le16 *)p)); | ||
78 | } | ||
79 | static inline unsigned int isonum_722(char *p) | ||
80 | { | ||
81 | return be16_to_cpu(get_unaligned((__le16 *)p)); | ||
82 | } | ||
83 | static inline unsigned int isonum_723(char *p) | ||
84 | { | ||
85 | /* Ignore bigendian datum due to broken mastering programs */ | ||
86 | return le16_to_cpu(get_unaligned((__le16 *)p)); | ||
87 | } | ||
88 | static inline unsigned int isonum_731(char *p) | ||
89 | { | ||
90 | return le32_to_cpu(get_unaligned((__le32 *)p)); | ||
91 | } | ||
92 | static inline unsigned int isonum_732(char *p) | ||
93 | { | ||
94 | return be32_to_cpu(get_unaligned((__le32 *)p)); | ||
95 | } | ||
96 | static inline unsigned int isonum_733(char *p) | ||
97 | { | ||
98 | /* Ignore bigendian datum due to broken mastering programs */ | ||
99 | return le32_to_cpu(get_unaligned((__le32 *)p)); | ||
100 | } | ||
101 | extern int iso_date(char *, int); | ||
102 | |||
103 | struct inode; /* To make gcc happy */ | ||
104 | |||
105 | extern int parse_rock_ridge_inode(struct iso_directory_record *, struct inode *); | ||
106 | extern int get_rock_ridge_filename(struct iso_directory_record *, char *, struct inode *); | ||
107 | extern int isofs_name_translate(struct iso_directory_record *, char *, struct inode *); | ||
108 | |||
109 | int get_joliet_filename(struct iso_directory_record *, unsigned char *, struct inode *); | ||
110 | int get_acorn_filename(struct iso_directory_record *, char *, struct inode *); | ||
111 | |||
112 | extern struct dentry *isofs_lookup(struct inode *, struct dentry *, struct nameidata *); | ||
113 | extern struct buffer_head *isofs_bread(struct inode *, sector_t); | ||
114 | extern int isofs_get_blocks(struct inode *, sector_t, struct buffer_head **, unsigned long); | ||
115 | |||
116 | extern struct inode *isofs_iget(struct super_block *sb, | ||
117 | unsigned long block, | ||
118 | unsigned long offset); | ||
119 | |||
120 | /* Because the inode number is no longer relevant to finding the | ||
121 | * underlying meta-data for an inode, we are free to choose a more | ||
122 | * convenient 32-bit number as the inode number. The inode numbering | ||
123 | * scheme was recommended by Sergey Vlasov and Eric Lammerts. */ | ||
124 | static inline unsigned long isofs_get_ino(unsigned long block, | ||
125 | unsigned long offset, | ||
126 | unsigned long bufbits) | ||
127 | { | ||
128 | return (block << (bufbits - 5)) | (offset >> 5); | ||
129 | } | ||
130 | |||
131 | /* Every directory can have many redundant directory entries scattered | ||
132 | * throughout the directory tree. First there is the directory entry | ||
133 | * with the name of the directory stored in the parent directory. | ||
134 | * Then, there is the "." directory entry stored in the directory | ||
135 | * itself. Finally, there are possibly many ".." directory entries | ||
136 | * stored in all the subdirectories. | ||
137 | * | ||
138 | * In order for the NFS get_parent() method to work and for the | ||
139 | * general consistency of the dcache, we need to make sure the | ||
140 | * "i_iget5_block" and "i_iget5_offset" all point to exactly one of | ||
141 | * the many redundant entries for each directory. We normalize the | ||
142 | * block and offset by always making them point to the "." directory. | ||
143 | * | ||
144 | * Notice that we do not use the entry for the directory with the name | ||
145 | * that is located in the parent directory. Even though choosing this | ||
146 | * first directory is more natural, it is much easier to find the "." | ||
147 | * entry in the NFS get_parent() method because it is implicitly | ||
148 | * encoded in the "extent + ext_attr_length" fields of _all_ the | ||
149 | * redundant entries for the directory. Thus, it can always be | ||
150 | * reached regardless of which directory entry you have in hand. | ||
151 | * | ||
152 | * This works because the "." entry is simply the first directory | ||
153 | * record when you start reading the file that holds all the directory | ||
154 | * records, and this file starts at "extent + ext_attr_length" blocks. | ||
155 | * Because the "." entry is always the first entry listed in the | ||
156 | * directories file, the normalized "offset" value is always 0. | ||
157 | * | ||
158 | * You should pass the directory entry in "de". On return, "block" | ||
159 | * and "offset" will hold normalized values. Only directories are | ||
160 | * affected making it safe to call even for non-directory file | ||
161 | * types. */ | ||
162 | static inline void | ||
163 | isofs_normalize_block_and_offset(struct iso_directory_record* de, | ||
164 | unsigned long *block, | ||
165 | unsigned long *offset) | ||
166 | { | ||
167 | /* Only directories are normalized. */ | ||
168 | if (de->flags[0] & 2) { | ||
169 | *offset = 0; | ||
170 | *block = (unsigned long)isonum_733(de->extent) | ||
171 | + (unsigned long)isonum_711(de->ext_attr_length); | ||
172 | } | ||
173 | } | ||
174 | |||
175 | extern struct inode_operations isofs_dir_inode_operations; | ||
176 | extern struct file_operations isofs_dir_operations; | ||
177 | extern struct address_space_operations isofs_symlink_aops; | ||
178 | extern struct export_operations isofs_export_ops; | ||
179 | |||
180 | /* The following macros are used to check for memory leaks. */ | ||
181 | #ifdef LEAK_CHECK | ||
182 | #define free_s leak_check_free_s | ||
183 | #define malloc leak_check_malloc | ||
184 | #define sb_bread leak_check_bread | ||
185 | #define brelse leak_check_brelse | ||
186 | extern void * leak_check_malloc(unsigned int size); | ||
187 | extern void leak_check_free_s(void * obj, int size); | ||
188 | extern struct buffer_head * leak_check_bread(struct super_block *sb, int block); | ||
189 | extern void leak_check_brelse(struct buffer_head * bh); | ||
190 | #endif /* LEAK_CHECK */ | ||
diff --git a/fs/isofs/joliet.c b/fs/isofs/joliet.c index 86c50e22fc87..2931de7f1a6a 100644 --- a/fs/isofs/joliet.c +++ b/fs/isofs/joliet.c | |||
@@ -6,11 +6,9 @@ | |||
6 | * Joliet: Microsoft's Unicode extensions to iso9660 | 6 | * Joliet: Microsoft's Unicode extensions to iso9660 |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/string.h> | 9 | #include <linux/types.h> |
10 | #include <linux/nls.h> | 10 | #include <linux/nls.h> |
11 | #include <linux/mm.h> | 11 | #include "isofs.h" |
12 | #include <linux/iso_fs.h> | ||
13 | #include <asm/unaligned.h> | ||
14 | 12 | ||
15 | /* | 13 | /* |
16 | * Convert Unicode 16 to UTF8 or ASCII. | 14 | * Convert Unicode 16 to UTF8 or ASCII. |
diff --git a/fs/isofs/namei.c b/fs/isofs/namei.c index 9569fc44102d..690edf37173c 100644 --- a/fs/isofs/namei.c +++ b/fs/isofs/namei.c | |||
@@ -6,20 +6,9 @@ | |||
6 | * (C) 1991 Linus Torvalds - minix filesystem | 6 | * (C) 1991 Linus Torvalds - minix filesystem |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/time.h> | ||
10 | #include <linux/iso_fs.h> | ||
11 | #include <linux/kernel.h> | ||
12 | #include <linux/string.h> | ||
13 | #include <linux/stat.h> | ||
14 | #include <linux/fcntl.h> | ||
15 | #include <linux/mm.h> | ||
16 | #include <linux/errno.h> | ||
17 | #include <linux/config.h> /* Joliet? */ | 9 | #include <linux/config.h> /* Joliet? */ |
18 | #include <linux/smp_lock.h> | 10 | #include <linux/smp_lock.h> |
19 | #include <linux/buffer_head.h> | 11 | #include "isofs.h" |
20 | #include <linux/dcache.h> | ||
21 | |||
22 | #include <asm/uaccess.h> | ||
23 | 12 | ||
24 | /* | 13 | /* |
25 | * ok, we cannot use strncmp, as the name is not in our data space. | 14 | * ok, we cannot use strncmp, as the name is not in our data space. |
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index 8bdd3e409543..089e79c65585 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c | |||
@@ -6,17 +6,11 @@ | |||
6 | * Rock Ridge Extensions to iso9660 | 6 | * Rock Ridge Extensions to iso9660 |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/stat.h> | ||
10 | #include <linux/time.h> | ||
11 | #include <linux/iso_fs.h> | ||
12 | #include <linux/string.h> | ||
13 | #include <linux/mm.h> | ||
14 | #include <linux/slab.h> | 9 | #include <linux/slab.h> |
15 | #include <linux/pagemap.h> | 10 | #include <linux/pagemap.h> |
16 | #include <linux/smp_lock.h> | 11 | #include <linux/smp_lock.h> |
17 | #include <linux/buffer_head.h> | ||
18 | #include <asm/page.h> | ||
19 | 12 | ||
13 | #include "isofs.h" | ||
20 | #include "rock.h" | 14 | #include "rock.h" |
21 | 15 | ||
22 | /* These functions are designed to read the system areas of a directory record | 16 | /* These functions are designed to read the system areas of a directory record |
diff --git a/fs/isofs/util.c b/fs/isofs/util.c index 3f6d9c1ac95a..01e1ee7a998b 100644 --- a/fs/isofs/util.c +++ b/fs/isofs/util.c | |||
@@ -2,9 +2,7 @@ | |||
2 | * linux/fs/isofs/util.c | 2 | * linux/fs/isofs/util.c |
3 | */ | 3 | */ |
4 | 4 | ||
5 | #include <linux/time.h> | 5 | #include "isofs.h" |
6 | #include <linux/fs.h> | ||
7 | #include <linux/iso_fs.h> | ||
8 | 6 | ||
9 | /* | 7 | /* |
10 | * We have to convert from a MM/DD/YY format to the Unix ctime format. | 8 | * We have to convert from a MM/DD/YY format to the Unix ctime format. |
@@ -80,4 +78,3 @@ int iso_date(char * p, int flag) | |||
80 | } | 78 | } |
81 | return crtime; | 79 | return crtime; |
82 | } | 80 | } |
83 | |||