fs: change d_compare for rcu-walk
[firefly-linux-kernel-4.4.55.git] / fs / isofs / inode.c
1 /*
2  *  linux/fs/isofs/inode.c
3  *
4  *  (C) 1991  Linus Torvalds - minix filesystem
5  *      1992, 1993, 1994  Eric Youngdale Modified for ISO 9660 filesystem.
6  *      1994  Eberhard Mönkeberg - multi session handling.
7  *      1995  Mark Dobie - allow mounting of some weird VideoCDs and PhotoCDs.
8  *      1997  Gordon Chaffee - Joliet CDs
9  *      1998  Eric Lammerts - ISO 9660 Level 3
10  *      2004  Paul Serice - Inode Support pushed out from 4GB to 128GB
11  *      2004  Paul Serice - NFS Export Operations
12  */
13
14 #include <linux/init.h>
15 #include <linux/module.h>
16
17 #include <linux/slab.h>
18 #include <linux/nls.h>
19 #include <linux/ctype.h>
20 #include <linux/statfs.h>
21 #include <linux/cdrom.h>
22 #include <linux/parser.h>
23
24 #include "isofs.h"
25 #include "zisofs.h"
26
27 #define BEQUIET
28
29 static int isofs_hashi(struct dentry *parent, struct qstr *qstr);
30 static int isofs_hash(struct dentry *parent, struct qstr *qstr);
31 static int isofs_dentry_cmpi(const struct dentry *parent,
32                 const struct inode *pinode,
33                 const struct dentry *dentry, const struct inode *inode,
34                 unsigned int len, const char *str, const struct qstr *name);
35 static int isofs_dentry_cmp(const struct dentry *parent,
36                 const struct inode *pinode,
37                 const struct dentry *dentry, const struct inode *inode,
38                 unsigned int len, const char *str, const struct qstr *name);
39
40 #ifdef CONFIG_JOLIET
41 static int isofs_hashi_ms(struct dentry *parent, struct qstr *qstr);
42 static int isofs_hash_ms(struct dentry *parent, struct qstr *qstr);
43 static int isofs_dentry_cmpi_ms(const struct dentry *parent,
44                 const struct inode *pinode,
45                 const struct dentry *dentry, const struct inode *inode,
46                 unsigned int len, const char *str, const struct qstr *name);
47 static int isofs_dentry_cmp_ms(const struct dentry *parent,
48                 const struct inode *pinode,
49                 const struct dentry *dentry, const struct inode *inode,
50                 unsigned int len, const char *str, const struct qstr *name);
51 #endif
52
53 static void isofs_put_super(struct super_block *sb)
54 {
55         struct isofs_sb_info *sbi = ISOFS_SB(sb);
56
57 #ifdef CONFIG_JOLIET
58         unload_nls(sbi->s_nls_iocharset);
59 #endif
60
61         kfree(sbi);
62         sb->s_fs_info = NULL;
63         return;
64 }
65
66 static int isofs_read_inode(struct inode *);
67 static int isofs_statfs (struct dentry *, struct kstatfs *);
68
69 static struct kmem_cache *isofs_inode_cachep;
70
71 static struct inode *isofs_alloc_inode(struct super_block *sb)
72 {
73         struct iso_inode_info *ei;
74         ei = kmem_cache_alloc(isofs_inode_cachep, GFP_KERNEL);
75         if (!ei)
76                 return NULL;
77         return &ei->vfs_inode;
78 }
79
80 static void isofs_destroy_inode(struct inode *inode)
81 {
82         kmem_cache_free(isofs_inode_cachep, ISOFS_I(inode));
83 }
84
85 static void init_once(void *foo)
86 {
87         struct iso_inode_info *ei = foo;
88
89         inode_init_once(&ei->vfs_inode);
90 }
91
92 static int init_inodecache(void)
93 {
94         isofs_inode_cachep = kmem_cache_create("isofs_inode_cache",
95                                         sizeof(struct iso_inode_info),
96                                         0, (SLAB_RECLAIM_ACCOUNT|
97                                         SLAB_MEM_SPREAD),
98                                         init_once);
99         if (isofs_inode_cachep == NULL)
100                 return -ENOMEM;
101         return 0;
102 }
103
104 static void destroy_inodecache(void)
105 {
106         kmem_cache_destroy(isofs_inode_cachep);
107 }
108
109 static int isofs_remount(struct super_block *sb, int *flags, char *data)
110 {
111         /* we probably want a lot more here */
112         *flags |= MS_RDONLY;
113         return 0;
114 }
115
116 static const struct super_operations isofs_sops = {
117         .alloc_inode    = isofs_alloc_inode,
118         .destroy_inode  = isofs_destroy_inode,
119         .put_super      = isofs_put_super,
120         .statfs         = isofs_statfs,
121         .remount_fs     = isofs_remount,
122         .show_options   = generic_show_options,
123 };
124
125
126 static const struct dentry_operations isofs_dentry_ops[] = {
127         {
128                 .d_hash         = isofs_hash,
129                 .d_compare      = isofs_dentry_cmp,
130         },
131         {
132                 .d_hash         = isofs_hashi,
133                 .d_compare      = isofs_dentry_cmpi,
134         },
135 #ifdef CONFIG_JOLIET
136         {
137                 .d_hash         = isofs_hash_ms,
138                 .d_compare      = isofs_dentry_cmp_ms,
139         },
140         {
141                 .d_hash         = isofs_hashi_ms,
142                 .d_compare      = isofs_dentry_cmpi_ms,
143         },
144 #endif
145 };
146
147 struct iso9660_options{
148         unsigned int rock:1;
149         unsigned int joliet:1;
150         unsigned int cruft:1;
151         unsigned int hide:1;
152         unsigned int showassoc:1;
153         unsigned int nocompress:1;
154         unsigned int overriderockperm:1;
155         unsigned int uid_set:1;
156         unsigned int gid_set:1;
157         unsigned int utf8:1;
158         unsigned char map;
159         unsigned char check;
160         unsigned int blocksize;
161         mode_t fmode;
162         mode_t dmode;
163         gid_t gid;
164         uid_t uid;
165         char *iocharset;
166         /* LVE */
167         s32 session;
168         s32 sbsector;
169 };
170
171 /*
172  * Compute the hash for the isofs name corresponding to the dentry.
173  */
174 static int
175 isofs_hash_common(struct dentry *dentry, struct qstr *qstr, int ms)
176 {
177         const char *name;
178         int len;
179
180         len = qstr->len;
181         name = qstr->name;
182         if (ms) {
183                 while (len && name[len-1] == '.')
184                         len--;
185         }
186
187         qstr->hash = full_name_hash(name, len);
188
189         return 0;
190 }
191
192 /*
193  * Compute the hash for the isofs name corresponding to the dentry.
194  */
195 static int
196 isofs_hashi_common(struct dentry *dentry, struct qstr *qstr, int ms)
197 {
198         const char *name;
199         int len;
200         char c;
201         unsigned long hash;
202
203         len = qstr->len;
204         name = qstr->name;
205         if (ms) {
206                 while (len && name[len-1] == '.')
207                         len--;
208         }
209
210         hash = init_name_hash();
211         while (len--) {
212                 c = tolower(*name++);
213                 hash = partial_name_hash(c, hash);
214         }
215         qstr->hash = end_name_hash(hash);
216
217         return 0;
218 }
219
220 /*
221  * Compare of two isofs names.
222  */
223 static int isofs_dentry_cmp_common(
224                 unsigned int len, const char *str,
225                 const struct qstr *name, int ms, int ci)
226 {
227         int alen, blen;
228
229         /* A filename cannot end in '.' or we treat it like it has none */
230         alen = name->len;
231         blen = len;
232         if (ms) {
233                 while (alen && name->name[alen-1] == '.')
234                         alen--;
235                 while (blen && str[blen-1] == '.')
236                         blen--;
237         }
238         if (alen == blen) {
239                 if (ci) {
240                         if (strnicmp(name->name, str, alen) == 0)
241                                 return 0;
242                 } else {
243                         if (strncmp(name->name, str, alen) == 0)
244                                 return 0;
245                 }
246         }
247         return 1;
248 }
249
250 static int
251 isofs_hash(struct dentry *dentry, struct qstr *qstr)
252 {
253         return isofs_hash_common(dentry, qstr, 0);
254 }
255
256 static int
257 isofs_hashi(struct dentry *dentry, struct qstr *qstr)
258 {
259         return isofs_hashi_common(dentry, qstr, 0);
260 }
261
262 static int
263 isofs_dentry_cmp(const struct dentry *parent, const struct inode *pinode,
264                 const struct dentry *dentry, const struct inode *inode,
265                 unsigned int len, const char *str, const struct qstr *name)
266 {
267         return isofs_dentry_cmp_common(len, str, name, 0, 0);
268 }
269
270 static int
271 isofs_dentry_cmpi(const struct dentry *parent, const struct inode *pinode,
272                 const struct dentry *dentry, const struct inode *inode,
273                 unsigned int len, const char *str, const struct qstr *name)
274 {
275         return isofs_dentry_cmp_common(len, str, name, 0, 1);
276 }
277
278 #ifdef CONFIG_JOLIET
279 static int
280 isofs_hash_ms(struct dentry *dentry, struct qstr *qstr)
281 {
282         return isofs_hash_common(dentry, qstr, 1);
283 }
284
285 static int
286 isofs_hashi_ms(struct dentry *dentry, struct qstr *qstr)
287 {
288         return isofs_hashi_common(dentry, qstr, 1);
289 }
290
291 static int
292 isofs_dentry_cmp_ms(const struct dentry *parent, const struct inode *pinode,
293                 const struct dentry *dentry, const struct inode *inode,
294                 unsigned int len, const char *str, const struct qstr *name)
295 {
296         return isofs_dentry_cmp_common(len, str, name, 1, 0);
297 }
298
299 static int
300 isofs_dentry_cmpi_ms(const struct dentry *parent, const struct inode *pinode,
301                 const struct dentry *dentry, const struct inode *inode,
302                 unsigned int len, const char *str, const struct qstr *name)
303 {
304         return isofs_dentry_cmp_common(len, str, name, 1, 1);
305 }
306 #endif
307
308 enum {
309         Opt_block, Opt_check_r, Opt_check_s, Opt_cruft, Opt_gid, Opt_ignore,
310         Opt_iocharset, Opt_map_a, Opt_map_n, Opt_map_o, Opt_mode, Opt_nojoliet,
311         Opt_norock, Opt_sb, Opt_session, Opt_uid, Opt_unhide, Opt_utf8, Opt_err,
312         Opt_nocompress, Opt_hide, Opt_showassoc, Opt_dmode, Opt_overriderockperm,
313 };
314
315 static const match_table_t tokens = {
316         {Opt_norock, "norock"},
317         {Opt_nojoliet, "nojoliet"},
318         {Opt_unhide, "unhide"},
319         {Opt_hide, "hide"},
320         {Opt_showassoc, "showassoc"},
321         {Opt_cruft, "cruft"},
322         {Opt_utf8, "utf8"},
323         {Opt_iocharset, "iocharset=%s"},
324         {Opt_map_a, "map=acorn"},
325         {Opt_map_a, "map=a"},
326         {Opt_map_n, "map=normal"},
327         {Opt_map_n, "map=n"},
328         {Opt_map_o, "map=off"},
329         {Opt_map_o, "map=o"},
330         {Opt_session, "session=%u"},
331         {Opt_sb, "sbsector=%u"},
332         {Opt_check_r, "check=relaxed"},
333         {Opt_check_r, "check=r"},
334         {Opt_check_s, "check=strict"},
335         {Opt_check_s, "check=s"},
336         {Opt_uid, "uid=%u"},
337         {Opt_gid, "gid=%u"},
338         {Opt_mode, "mode=%u"},
339         {Opt_dmode, "dmode=%u"},
340         {Opt_overriderockperm, "overriderockperm"},
341         {Opt_block, "block=%u"},
342         {Opt_ignore, "conv=binary"},
343         {Opt_ignore, "conv=b"},
344         {Opt_ignore, "conv=text"},
345         {Opt_ignore, "conv=t"},
346         {Opt_ignore, "conv=mtext"},
347         {Opt_ignore, "conv=m"},
348         {Opt_ignore, "conv=auto"},
349         {Opt_ignore, "conv=a"},
350         {Opt_nocompress, "nocompress"},
351         {Opt_err, NULL}
352 };
353
354 static int parse_options(char *options, struct iso9660_options *popt)
355 {
356         char *p;
357         int option;
358
359         popt->map = 'n';
360         popt->rock = 1;
361         popt->joliet = 1;
362         popt->cruft = 0;
363         popt->hide = 0;
364         popt->showassoc = 0;
365         popt->check = 'u';              /* unset */
366         popt->nocompress = 0;
367         popt->blocksize = 1024;
368         popt->fmode = popt->dmode = ISOFS_INVALID_MODE;
369         popt->uid_set = 0;
370         popt->gid_set = 0;
371         popt->gid = 0;
372         popt->uid = 0;
373         popt->iocharset = NULL;
374         popt->utf8 = 0;
375         popt->overriderockperm = 0;
376         popt->session=-1;
377         popt->sbsector=-1;
378         if (!options)
379                 return 1;
380
381         while ((p = strsep(&options, ",")) != NULL) {
382                 int token;
383                 substring_t args[MAX_OPT_ARGS];
384                 unsigned n;
385
386                 if (!*p)
387                         continue;
388
389                 token = match_token(p, tokens, args);
390                 switch (token) {
391                 case Opt_norock:
392                         popt->rock = 0;
393                         break;
394                 case Opt_nojoliet:
395                         popt->joliet = 0;
396                         break;
397                 case Opt_hide:
398                         popt->hide = 1;
399                         break;
400                 case Opt_unhide:
401                 case Opt_showassoc:
402                         popt->showassoc = 1;
403                         break;
404                 case Opt_cruft:
405                         popt->cruft = 1;
406                         break;
407                 case Opt_utf8:
408                         popt->utf8 = 1;
409                         break;
410 #ifdef CONFIG_JOLIET
411                 case Opt_iocharset:
412                         popt->iocharset = match_strdup(&args[0]);
413                         break;
414 #endif
415                 case Opt_map_a:
416                         popt->map = 'a';
417                         break;
418                 case Opt_map_o:
419                         popt->map = 'o';
420                         break;
421                 case Opt_map_n:
422                         popt->map = 'n';
423                         break;
424                 case Opt_session:
425                         if (match_int(&args[0], &option))
426                                 return 0;
427                         n = option;
428                         if (n > 99)
429                                 return 0;
430                         popt->session = n + 1;
431                         break;
432                 case Opt_sb:
433                         if (match_int(&args[0], &option))
434                                 return 0;
435                         popt->sbsector = option;
436                         break;
437                 case Opt_check_r:
438                         popt->check = 'r';
439                         break;
440                 case Opt_check_s:
441                         popt->check = 's';
442                         break;
443                 case Opt_ignore:
444                         break;
445                 case Opt_uid:
446                         if (match_int(&args[0], &option))
447                                 return 0;
448                         popt->uid = option;
449                         popt->uid_set = 1;
450                         break;
451                 case Opt_gid:
452                         if (match_int(&args[0], &option))
453                                 return 0;
454                         popt->gid = option;
455                         popt->gid_set = 1;
456                         break;
457                 case Opt_mode:
458                         if (match_int(&args[0], &option))
459                                 return 0;
460                         popt->fmode = option;
461                         break;
462                 case Opt_dmode:
463                         if (match_int(&args[0], &option))
464                                 return 0;
465                         popt->dmode = option;
466                         break;
467                 case Opt_overriderockperm:
468                         popt->overriderockperm = 1;
469                         break;
470                 case Opt_block:
471                         if (match_int(&args[0], &option))
472                                 return 0;
473                         n = option;
474                         if (n != 512 && n != 1024 && n != 2048)
475                                 return 0;
476                         popt->blocksize = n;
477                         break;
478                 case Opt_nocompress:
479                         popt->nocompress = 1;
480                         break;
481                 default:
482                         return 0;
483                 }
484         }
485         return 1;
486 }
487
488 /*
489  * look if the driver can tell the multi session redirection value
490  *
491  * don't change this if you don't know what you do, please!
492  * Multisession is legal only with XA disks.
493  * A non-XA disk with more than one volume descriptor may do it right, but
494  * usually is written in a nowhere standardized "multi-partition" manner.
495  * Multisession uses absolute addressing (solely the first frame of the whole
496  * track is #0), multi-partition uses relative addressing (each first frame of
497  * each track is #0), and a track is not a session.
498  *
499  * A broken CDwriter software or drive firmware does not set new standards,
500  * at least not if conflicting with the existing ones.
501  *
502  * emoenke@gwdg.de
503  */
504 #define WE_OBEY_THE_WRITTEN_STANDARDS 1
505
506 static unsigned int isofs_get_last_session(struct super_block *sb, s32 session)
507 {
508         struct cdrom_multisession ms_info;
509         unsigned int vol_desc_start;
510         struct block_device *bdev = sb->s_bdev;
511         int i;
512
513         vol_desc_start=0;
514         ms_info.addr_format=CDROM_LBA;
515         if(session >= 0 && session <= 99) {
516                 struct cdrom_tocentry Te;
517                 Te.cdte_track=session;
518                 Te.cdte_format=CDROM_LBA;
519                 i = ioctl_by_bdev(bdev, CDROMREADTOCENTRY, (unsigned long) &Te);
520                 if (!i) {
521                         printk(KERN_DEBUG "ISOFS: Session %d start %d type %d\n",
522                                 session, Te.cdte_addr.lba,
523                                 Te.cdte_ctrl&CDROM_DATA_TRACK);
524                         if ((Te.cdte_ctrl&CDROM_DATA_TRACK) == 4)
525                                 return Te.cdte_addr.lba;
526                 }
527
528                 printk(KERN_ERR "ISOFS: Invalid session number or type of track\n");
529         }
530         i = ioctl_by_bdev(bdev, CDROMMULTISESSION, (unsigned long) &ms_info);
531         if (session > 0)
532                 printk(KERN_ERR "ISOFS: Invalid session number\n");
533 #if 0
534         printk(KERN_DEBUG "isofs.inode: CDROMMULTISESSION: rc=%d\n",i);
535         if (i==0) {
536                 printk(KERN_DEBUG "isofs.inode: XA disk: %s\n",ms_info.xa_flag?"yes":"no");
537                 printk(KERN_DEBUG "isofs.inode: vol_desc_start = %d\n", ms_info.addr.lba);
538         }
539 #endif
540         if (i==0)
541 #if WE_OBEY_THE_WRITTEN_STANDARDS
542                 if (ms_info.xa_flag) /* necessary for a valid ms_info.addr */
543 #endif
544                         vol_desc_start=ms_info.addr.lba;
545         return vol_desc_start;
546 }
547
548 /*
549  * Check if root directory is empty (has less than 3 files).
550  *
551  * Used to detect broken CDs where ISO root directory is empty but Joliet root
552  * directory is OK. If such CD has Rock Ridge extensions, they will be disabled
553  * (and Joliet used instead) or else no files would be visible.
554  */
555 static bool rootdir_empty(struct super_block *sb, unsigned long block)
556 {
557         int offset = 0, files = 0, de_len;
558         struct iso_directory_record *de;
559         struct buffer_head *bh;
560
561         bh = sb_bread(sb, block);
562         if (!bh)
563                 return true;
564         while (files < 3) {
565                 de = (struct iso_directory_record *) (bh->b_data + offset);
566                 de_len = *(unsigned char *) de;
567                 if (de_len == 0)
568                         break;
569                 files++;
570                 offset += de_len;
571         }
572         brelse(bh);
573         return files < 3;
574 }
575
576 /*
577  * Initialize the superblock and read the root inode.
578  *
579  * Note: a check_disk_change() has been done immediately prior
580  * to this call, so we don't need to check again.
581  */
582 static int isofs_fill_super(struct super_block *s, void *data, int silent)
583 {
584         struct buffer_head *bh = NULL, *pri_bh = NULL;
585         struct hs_primary_descriptor *h_pri = NULL;
586         struct iso_primary_descriptor *pri = NULL;
587         struct iso_supplementary_descriptor *sec = NULL;
588         struct iso_directory_record *rootp;
589         struct inode *inode;
590         struct iso9660_options opt;
591         struct isofs_sb_info *sbi;
592         unsigned long first_data_zone;
593         int joliet_level = 0;
594         int iso_blknum, block;
595         int orig_zonesize;
596         int table, error = -EINVAL;
597         unsigned int vol_desc_start;
598
599         save_mount_options(s, data);
600
601         sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
602         if (!sbi)
603                 return -ENOMEM;
604         s->s_fs_info = sbi;
605
606         if (!parse_options((char *)data, &opt))
607                 goto out_freesbi;
608
609         /*
610          * First of all, get the hardware blocksize for this device.
611          * If we don't know what it is, or the hardware blocksize is
612          * larger than the blocksize the user specified, then use
613          * that value.
614          */
615         /*
616          * What if bugger tells us to go beyond page size?
617          */
618         opt.blocksize = sb_min_blocksize(s, opt.blocksize);
619
620         sbi->s_high_sierra = 0; /* default is iso9660 */
621
622         vol_desc_start = (opt.sbsector != -1) ?
623                 opt.sbsector : isofs_get_last_session(s,opt.session);
624
625         for (iso_blknum = vol_desc_start+16;
626                 iso_blknum < vol_desc_start+100; iso_blknum++) {
627                 struct hs_volume_descriptor *hdp;
628                 struct iso_volume_descriptor  *vdp;
629
630                 block = iso_blknum << (ISOFS_BLOCK_BITS - s->s_blocksize_bits);
631                 if (!(bh = sb_bread(s, block)))
632                         goto out_no_read;
633
634                 vdp = (struct iso_volume_descriptor *)bh->b_data;
635                 hdp = (struct hs_volume_descriptor *)bh->b_data;
636
637                 /*
638                  * Due to the overlapping physical location of the descriptors,
639                  * ISO CDs can match hdp->id==HS_STANDARD_ID as well. To ensure
640                  * proper identification in this case, we first check for ISO.
641                  */
642                 if (strncmp (vdp->id, ISO_STANDARD_ID, sizeof vdp->id) == 0) {
643                         if (isonum_711(vdp->type) == ISO_VD_END)
644                                 break;
645                         if (isonum_711(vdp->type) == ISO_VD_PRIMARY) {
646                                 if (pri == NULL) {
647                                         pri = (struct iso_primary_descriptor *)vdp;
648                                         /* Save the buffer in case we need it ... */
649                                         pri_bh = bh;
650                                         bh = NULL;
651                                 }
652                         }
653 #ifdef CONFIG_JOLIET
654                         else if (isonum_711(vdp->type) == ISO_VD_SUPPLEMENTARY) {
655                                 sec = (struct iso_supplementary_descriptor *)vdp;
656                                 if (sec->escape[0] == 0x25 && sec->escape[1] == 0x2f) {
657                                         if (opt.joliet) {
658                                                 if (sec->escape[2] == 0x40)
659                                                         joliet_level = 1;
660                                                 else if (sec->escape[2] == 0x43)
661                                                         joliet_level = 2;
662                                                 else if (sec->escape[2] == 0x45)
663                                                         joliet_level = 3;
664
665                                                 printk(KERN_DEBUG "ISO 9660 Extensions: "
666                                                         "Microsoft Joliet Level %d\n",
667                                                         joliet_level);
668                                         }
669                                         goto root_found;
670                                 } else {
671                                 /* Unknown supplementary volume descriptor */
672                                 sec = NULL;
673                                 }
674                         }
675 #endif
676                 } else {
677                         if (strncmp (hdp->id, HS_STANDARD_ID, sizeof hdp->id) == 0) {
678                                 if (isonum_711(hdp->type) != ISO_VD_PRIMARY)
679                                         goto out_freebh;
680
681                                 sbi->s_high_sierra = 1;
682                                 opt.rock = 0;
683                                 h_pri = (struct hs_primary_descriptor *)vdp;
684                                 goto root_found;
685                         }
686                 }
687
688                 /* Just skip any volume descriptors we don't recognize */
689
690                 brelse(bh);
691                 bh = NULL;
692         }
693         /*
694          * If we fall through, either no volume descriptor was found,
695          * or else we passed a primary descriptor looking for others.
696          */
697         if (!pri)
698                 goto out_unknown_format;
699         brelse(bh);
700         bh = pri_bh;
701         pri_bh = NULL;
702
703 root_found:
704
705         if (joliet_level && (pri == NULL || !opt.rock)) {
706                 /* This is the case of Joliet with the norock mount flag.
707                  * A disc with both Joliet and Rock Ridge is handled later
708                  */
709                 pri = (struct iso_primary_descriptor *) sec;
710         }
711
712         if(sbi->s_high_sierra){
713                 rootp = (struct iso_directory_record *) h_pri->root_directory_record;
714                 sbi->s_nzones = isonum_733(h_pri->volume_space_size);
715                 sbi->s_log_zone_size = isonum_723(h_pri->logical_block_size);
716                 sbi->s_max_size = isonum_733(h_pri->volume_space_size);
717         } else {
718                 if (!pri)
719                         goto out_freebh;
720                 rootp = (struct iso_directory_record *) pri->root_directory_record;
721                 sbi->s_nzones = isonum_733(pri->volume_space_size);
722                 sbi->s_log_zone_size = isonum_723(pri->logical_block_size);
723                 sbi->s_max_size = isonum_733(pri->volume_space_size);
724         }
725
726         sbi->s_ninodes = 0; /* No way to figure this out easily */
727
728         orig_zonesize = sbi->s_log_zone_size;
729         /*
730          * If the zone size is smaller than the hardware sector size,
731          * this is a fatal error.  This would occur if the disc drive
732          * had sectors that were 2048 bytes, but the filesystem had
733          * blocks that were 512 bytes (which should only very rarely
734          * happen.)
735          */
736         if (orig_zonesize < opt.blocksize)
737                 goto out_bad_size;
738
739         /* RDE: convert log zone size to bit shift */
740         switch (sbi->s_log_zone_size) {
741         case  512: sbi->s_log_zone_size =  9; break;
742         case 1024: sbi->s_log_zone_size = 10; break;
743         case 2048: sbi->s_log_zone_size = 11; break;
744
745         default:
746                 goto out_bad_zone_size;
747         }
748
749         s->s_magic = ISOFS_SUPER_MAGIC;
750
751         /*
752          * With multi-extent files, file size is only limited by the maximum
753          * size of a file system, which is 8 TB.
754          */
755         s->s_maxbytes = 0x80000000000LL;
756
757         /*
758          * The CDROM is read-only, has no nodes (devices) on it, and since
759          * all of the files appear to be owned by root, we really do not want
760          * to allow suid.  (suid or devices will not show up unless we have
761          * Rock Ridge extensions)
762          */
763
764         s->s_flags |= MS_RDONLY /* | MS_NODEV | MS_NOSUID */;
765
766         /* Set this for reference. Its not currently used except on write
767            which we don't have .. */
768
769         first_data_zone = isonum_733(rootp->extent) +
770                           isonum_711(rootp->ext_attr_length);
771         sbi->s_firstdatazone = first_data_zone;
772 #ifndef BEQUIET
773         printk(KERN_DEBUG "ISOFS: Max size:%ld   Log zone size:%ld\n",
774                 sbi->s_max_size, 1UL << sbi->s_log_zone_size);
775         printk(KERN_DEBUG "ISOFS: First datazone:%ld\n", sbi->s_firstdatazone);
776         if(sbi->s_high_sierra)
777                 printk(KERN_DEBUG "ISOFS: Disc in High Sierra format.\n");
778 #endif
779
780         /*
781          * If the Joliet level is set, we _may_ decide to use the
782          * secondary descriptor, but can't be sure until after we
783          * read the root inode. But before reading the root inode
784          * we may need to change the device blocksize, and would
785          * rather release the old buffer first. So, we cache the
786          * first_data_zone value from the secondary descriptor.
787          */
788         if (joliet_level) {
789                 pri = (struct iso_primary_descriptor *) sec;
790                 rootp = (struct iso_directory_record *)
791                         pri->root_directory_record;
792                 first_data_zone = isonum_733(rootp->extent) +
793                                 isonum_711(rootp->ext_attr_length);
794         }
795
796         /*
797          * We're all done using the volume descriptor, and may need
798          * to change the device blocksize, so release the buffer now.
799          */
800         brelse(pri_bh);
801         brelse(bh);
802
803         /*
804          * Force the blocksize to 512 for 512 byte sectors.  The file
805          * read primitives really get it wrong in a bad way if we don't
806          * do this.
807          *
808          * Note - we should never be setting the blocksize to something
809          * less than the hardware sector size for the device.  If we
810          * do, we would end up having to read larger buffers and split
811          * out portions to satisfy requests.
812          *
813          * Note2- the idea here is that we want to deal with the optimal
814          * zonesize in the filesystem.  If we have it set to something less,
815          * then we have horrible problems with trying to piece together
816          * bits of adjacent blocks in order to properly read directory
817          * entries.  By forcing the blocksize in this way, we ensure
818          * that we will never be required to do this.
819          */
820         sb_set_blocksize(s, orig_zonesize);
821
822         sbi->s_nls_iocharset = NULL;
823
824 #ifdef CONFIG_JOLIET
825         if (joliet_level && opt.utf8 == 0) {
826                 char *p = opt.iocharset ? opt.iocharset : CONFIG_NLS_DEFAULT;
827                 sbi->s_nls_iocharset = load_nls(p);
828                 if (! sbi->s_nls_iocharset) {
829                         /* Fail only if explicit charset specified */
830                         if (opt.iocharset)
831                                 goto out_freesbi;
832                         sbi->s_nls_iocharset = load_nls_default();
833                 }
834         }
835 #endif
836         s->s_op = &isofs_sops;
837         s->s_export_op = &isofs_export_ops;
838         sbi->s_mapping = opt.map;
839         sbi->s_rock = (opt.rock ? 2 : 0);
840         sbi->s_rock_offset = -1; /* initial offset, will guess until SP is found*/
841         sbi->s_cruft = opt.cruft;
842         sbi->s_hide = opt.hide;
843         sbi->s_showassoc = opt.showassoc;
844         sbi->s_uid = opt.uid;
845         sbi->s_gid = opt.gid;
846         sbi->s_uid_set = opt.uid_set;
847         sbi->s_gid_set = opt.gid_set;
848         sbi->s_utf8 = opt.utf8;
849         sbi->s_nocompress = opt.nocompress;
850         sbi->s_overriderockperm = opt.overriderockperm;
851         mutex_init(&sbi->s_mutex);
852         /*
853          * It would be incredibly stupid to allow people to mark every file
854          * on the disk as suid, so we merely allow them to set the default
855          * permissions.
856          */
857         if (opt.fmode != ISOFS_INVALID_MODE)
858                 sbi->s_fmode = opt.fmode & 0777;
859         else
860                 sbi->s_fmode = ISOFS_INVALID_MODE;
861         if (opt.dmode != ISOFS_INVALID_MODE)
862                 sbi->s_dmode = opt.dmode & 0777;
863         else
864                 sbi->s_dmode = ISOFS_INVALID_MODE;
865
866         /*
867          * Read the root inode, which _may_ result in changing
868          * the s_rock flag. Once we have the final s_rock value,
869          * we then decide whether to use the Joliet descriptor.
870          */
871         inode = isofs_iget(s, sbi->s_firstdatazone, 0);
872         if (IS_ERR(inode))
873                 goto out_no_root;
874
875         /*
876          * Fix for broken CDs with Rock Ridge and empty ISO root directory but
877          * correct Joliet root directory.
878          */
879         if (sbi->s_rock == 1 && joliet_level &&
880                                 rootdir_empty(s, sbi->s_firstdatazone)) {
881                 printk(KERN_NOTICE
882                         "ISOFS: primary root directory is empty. "
883                         "Disabling Rock Ridge and switching to Joliet.");
884                 sbi->s_rock = 0;
885         }
886
887         /*
888          * If this disk has both Rock Ridge and Joliet on it, then we
889          * want to use Rock Ridge by default.  This can be overridden
890          * by using the norock mount option.  There is still one other
891          * possibility that is not taken into account: a Rock Ridge
892          * CD with Unicode names.  Until someone sees such a beast, it
893          * will not be supported.
894          */
895         if (sbi->s_rock == 1) {
896                 joliet_level = 0;
897         } else if (joliet_level) {
898                 sbi->s_rock = 0;
899                 if (sbi->s_firstdatazone != first_data_zone) {
900                         sbi->s_firstdatazone = first_data_zone;
901                         printk(KERN_DEBUG
902                                 "ISOFS: changing to secondary root\n");
903                         iput(inode);
904                         inode = isofs_iget(s, sbi->s_firstdatazone, 0);
905                         if (IS_ERR(inode))
906                                 goto out_no_root;
907                 }
908         }
909
910         if (opt.check == 'u') {
911                 /* Only Joliet is case insensitive by default */
912                 if (joliet_level)
913                         opt.check = 'r';
914                 else
915                         opt.check = 's';
916         }
917         sbi->s_joliet_level = joliet_level;
918
919         /* Make sure the root inode is a directory */
920         if (!S_ISDIR(inode->i_mode)) {
921                 printk(KERN_WARNING
922                         "isofs_fill_super: root inode is not a directory. "
923                         "Corrupted media?\n");
924                 goto out_iput;
925         }
926
927         /* get the root dentry */
928         s->s_root = d_alloc_root(inode);
929         if (!(s->s_root))
930                 goto out_no_root;
931
932         table = 0;
933         if (joliet_level)
934                 table += 2;
935         if (opt.check == 'r')
936                 table++;
937         s->s_root->d_op = &isofs_dentry_ops[table];
938
939         kfree(opt.iocharset);
940
941         return 0;
942
943         /*
944          * Display error messages and free resources.
945          */
946 out_iput:
947         iput(inode);
948         goto out_no_inode;
949 out_no_root:
950         error = PTR_ERR(inode);
951         if (error != -ENOMEM)
952                 printk(KERN_WARNING "%s: get root inode failed\n", __func__);
953 out_no_inode:
954 #ifdef CONFIG_JOLIET
955         unload_nls(sbi->s_nls_iocharset);
956 #endif
957         goto out_freesbi;
958 out_no_read:
959         printk(KERN_WARNING "%s: bread failed, dev=%s, iso_blknum=%d, block=%d\n",
960                 __func__, s->s_id, iso_blknum, block);
961         goto out_freesbi;
962 out_bad_zone_size:
963         printk(KERN_WARNING "ISOFS: Bad logical zone size %ld\n",
964                 sbi->s_log_zone_size);
965         goto out_freebh;
966 out_bad_size:
967         printk(KERN_WARNING "ISOFS: Logical zone size(%d) < hardware blocksize(%u)\n",
968                 orig_zonesize, opt.blocksize);
969         goto out_freebh;
970 out_unknown_format:
971         if (!silent)
972                 printk(KERN_WARNING "ISOFS: Unable to identify CD-ROM format.\n");
973
974 out_freebh:
975         brelse(bh);
976 out_freesbi:
977         kfree(opt.iocharset);
978         kfree(sbi);
979         s->s_fs_info = NULL;
980         return error;
981 }
982
983 static int isofs_statfs (struct dentry *dentry, struct kstatfs *buf)
984 {
985         struct super_block *sb = dentry->d_sb;
986         u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
987
988         buf->f_type = ISOFS_SUPER_MAGIC;
989         buf->f_bsize = sb->s_blocksize;
990         buf->f_blocks = (ISOFS_SB(sb)->s_nzones
991                 << (ISOFS_SB(sb)->s_log_zone_size - sb->s_blocksize_bits));
992         buf->f_bfree = 0;
993         buf->f_bavail = 0;
994         buf->f_files = ISOFS_SB(sb)->s_ninodes;
995         buf->f_ffree = 0;
996         buf->f_fsid.val[0] = (u32)id;
997         buf->f_fsid.val[1] = (u32)(id >> 32);
998         buf->f_namelen = NAME_MAX;
999         return 0;
1000 }
1001
1002 /*
1003  * Get a set of blocks; filling in buffer_heads if already allocated
1004  * or getblk() if they are not.  Returns the number of blocks inserted
1005  * (-ve == error.)
1006  */
1007 int isofs_get_blocks(struct inode *inode, sector_t iblock,
1008                      struct buffer_head **bh, unsigned long nblocks)
1009 {
1010         unsigned long b_off = iblock;
1011         unsigned offset, sect_size;
1012         unsigned int firstext;
1013         unsigned long nextblk, nextoff;
1014         int section, rv, error;
1015         struct iso_inode_info *ei = ISOFS_I(inode);
1016
1017         error = -EIO;
1018         rv = 0;
1019         if (iblock != b_off) {
1020                 printk(KERN_DEBUG "%s: block number too large\n", __func__);
1021                 goto abort;
1022         }
1023
1024
1025         offset = 0;
1026         firstext = ei->i_first_extent;
1027         sect_size = ei->i_section_size >> ISOFS_BUFFER_BITS(inode);
1028         nextblk = ei->i_next_section_block;
1029         nextoff = ei->i_next_section_offset;
1030         section = 0;
1031
1032         while (nblocks) {
1033                 /* If we are *way* beyond the end of the file, print a message.
1034                  * Access beyond the end of the file up to the next page boundary
1035                  * is normal, however because of the way the page cache works.
1036                  * In this case, we just return 0 so that we can properly fill
1037                  * the page with useless information without generating any
1038                  * I/O errors.
1039                  */
1040                 if (b_off > ((inode->i_size + PAGE_CACHE_SIZE - 1) >> ISOFS_BUFFER_BITS(inode))) {
1041                         printk(KERN_DEBUG "%s: block >= EOF (%lu, %llu)\n",
1042                                 __func__, b_off,
1043                                 (unsigned long long)inode->i_size);
1044                         goto abort;
1045                 }
1046
1047                 /* On the last section, nextblk == 0, section size is likely to
1048                  * exceed sect_size by a partial block, and access beyond the
1049                  * end of the file will reach beyond the section size, too.
1050                  */
1051                 while (nextblk && (b_off >= (offset + sect_size))) {
1052                         struct inode *ninode;
1053
1054                         offset += sect_size;
1055                         ninode = isofs_iget(inode->i_sb, nextblk, nextoff);
1056                         if (IS_ERR(ninode)) {
1057                                 error = PTR_ERR(ninode);
1058                                 goto abort;
1059                         }
1060                         firstext  = ISOFS_I(ninode)->i_first_extent;
1061                         sect_size = ISOFS_I(ninode)->i_section_size >> ISOFS_BUFFER_BITS(ninode);
1062                         nextblk   = ISOFS_I(ninode)->i_next_section_block;
1063                         nextoff   = ISOFS_I(ninode)->i_next_section_offset;
1064                         iput(ninode);
1065
1066                         if (++section > 100) {
1067                                 printk(KERN_DEBUG "%s: More than 100 file sections ?!?"
1068                                         " aborting...\n", __func__);
1069                                 printk(KERN_DEBUG "%s: block=%lu firstext=%u sect_size=%u "
1070                                         "nextblk=%lu nextoff=%lu\n", __func__,
1071                                         b_off, firstext, (unsigned) sect_size,
1072                                         nextblk, nextoff);
1073                                 goto abort;
1074                         }
1075                 }
1076
1077                 if (*bh) {
1078                         map_bh(*bh, inode->i_sb, firstext + b_off - offset);
1079                 } else {
1080                         *bh = sb_getblk(inode->i_sb, firstext+b_off-offset);
1081                         if (!*bh)
1082                                 goto abort;
1083                 }
1084                 bh++;   /* Next buffer head */
1085                 b_off++;        /* Next buffer offset */
1086                 nblocks--;
1087                 rv++;
1088         }
1089
1090         error = 0;
1091 abort:
1092         return rv != 0 ? rv : error;
1093 }
1094
1095 /*
1096  * Used by the standard interfaces.
1097  */
1098 static int isofs_get_block(struct inode *inode, sector_t iblock,
1099                     struct buffer_head *bh_result, int create)
1100 {
1101         int ret;
1102
1103         if (create) {
1104                 printk(KERN_DEBUG "%s: Kernel tries to allocate a block\n", __func__);
1105                 return -EROFS;
1106         }
1107
1108         ret = isofs_get_blocks(inode, iblock, &bh_result, 1);
1109         return ret < 0 ? ret : 0;
1110 }
1111
1112 static int isofs_bmap(struct inode *inode, sector_t block)
1113 {
1114         struct buffer_head dummy;
1115         int error;
1116
1117         dummy.b_state = 0;
1118         dummy.b_blocknr = -1000;
1119         error = isofs_get_block(inode, block, &dummy, 0);
1120         if (!error)
1121                 return dummy.b_blocknr;
1122         return 0;
1123 }
1124
1125 struct buffer_head *isofs_bread(struct inode *inode, sector_t block)
1126 {
1127         sector_t blknr = isofs_bmap(inode, block);
1128         if (!blknr)
1129                 return NULL;
1130         return sb_bread(inode->i_sb, blknr);
1131 }
1132
1133 static int isofs_readpage(struct file *file, struct page *page)
1134 {
1135         return block_read_full_page(page,isofs_get_block);
1136 }
1137
1138 static sector_t _isofs_bmap(struct address_space *mapping, sector_t block)
1139 {
1140         return generic_block_bmap(mapping,block,isofs_get_block);
1141 }
1142
1143 static const struct address_space_operations isofs_aops = {
1144         .readpage = isofs_readpage,
1145         .sync_page = block_sync_page,
1146         .bmap = _isofs_bmap
1147 };
1148
1149 static int isofs_read_level3_size(struct inode *inode)
1150 {
1151         unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
1152         int high_sierra = ISOFS_SB(inode->i_sb)->s_high_sierra;
1153         struct buffer_head *bh = NULL;
1154         unsigned long block, offset, block_saved, offset_saved;
1155         int i = 0;
1156         int more_entries = 0;
1157         struct iso_directory_record *tmpde = NULL;
1158         struct iso_inode_info *ei = ISOFS_I(inode);
1159
1160         inode->i_size = 0;
1161
1162         /* The first 16 blocks are reserved as the System Area.  Thus,
1163          * no inodes can appear in block 0.  We use this to flag that
1164          * this is the last section. */
1165         ei->i_next_section_block = 0;
1166         ei->i_next_section_offset = 0;
1167
1168         block = ei->i_iget5_block;
1169         offset = ei->i_iget5_offset;
1170
1171         do {
1172                 struct iso_directory_record *de;
1173                 unsigned int de_len;
1174
1175                 if (!bh) {
1176                         bh = sb_bread(inode->i_sb, block);
1177                         if (!bh)
1178                                 goto out_noread;
1179                 }
1180                 de = (struct iso_directory_record *) (bh->b_data + offset);
1181                 de_len = *(unsigned char *) de;
1182
1183                 if (de_len == 0) {
1184                         brelse(bh);
1185                         bh = NULL;
1186                         ++block;
1187                         offset = 0;
1188                         continue;
1189                 }
1190
1191                 block_saved = block;
1192                 offset_saved = offset;
1193                 offset += de_len;
1194
1195                 /* Make sure we have a full directory entry */
1196                 if (offset >= bufsize) {
1197                         int slop = bufsize - offset + de_len;
1198                         if (!tmpde) {
1199                                 tmpde = kmalloc(256, GFP_KERNEL);
1200                                 if (!tmpde)
1201                                         goto out_nomem;
1202                         }
1203                         memcpy(tmpde, de, slop);
1204                         offset &= bufsize - 1;
1205                         block++;
1206                         brelse(bh);
1207                         bh = NULL;
1208                         if (offset) {
1209                                 bh = sb_bread(inode->i_sb, block);
1210                                 if (!bh)
1211                                         goto out_noread;
1212                                 memcpy((void *)tmpde+slop, bh->b_data, offset);
1213                         }
1214                         de = tmpde;
1215                 }
1216
1217                 inode->i_size += isonum_733(de->size);
1218                 if (i == 1) {
1219                         ei->i_next_section_block = block_saved;
1220                         ei->i_next_section_offset = offset_saved;
1221                 }
1222
1223                 more_entries = de->flags[-high_sierra] & 0x80;
1224
1225                 i++;
1226                 if (i > 100)
1227                         goto out_toomany;
1228         } while (more_entries);
1229 out:
1230         kfree(tmpde);
1231         if (bh)
1232                 brelse(bh);
1233         return 0;
1234
1235 out_nomem:
1236         if (bh)
1237                 brelse(bh);
1238         return -ENOMEM;
1239
1240 out_noread:
1241         printk(KERN_INFO "ISOFS: unable to read i-node block %lu\n", block);
1242         kfree(tmpde);
1243         return -EIO;
1244
1245 out_toomany:
1246         printk(KERN_INFO "%s: More than 100 file sections ?!?, aborting...\n"
1247                 "isofs_read_level3_size: inode=%lu\n",
1248                 __func__, inode->i_ino);
1249         goto out;
1250 }
1251
1252 static int isofs_read_inode(struct inode *inode)
1253 {
1254         struct super_block *sb = inode->i_sb;
1255         struct isofs_sb_info *sbi = ISOFS_SB(sb);
1256         unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
1257         unsigned long block;
1258         int high_sierra = sbi->s_high_sierra;
1259         struct buffer_head *bh = NULL;
1260         struct iso_directory_record *de;
1261         struct iso_directory_record *tmpde = NULL;
1262         unsigned int de_len;
1263         unsigned long offset;
1264         struct iso_inode_info *ei = ISOFS_I(inode);
1265         int ret = -EIO;
1266
1267         block = ei->i_iget5_block;
1268         bh = sb_bread(inode->i_sb, block);
1269         if (!bh)
1270                 goto out_badread;
1271
1272         offset = ei->i_iget5_offset;
1273
1274         de = (struct iso_directory_record *) (bh->b_data + offset);
1275         de_len = *(unsigned char *) de;
1276
1277         if (offset + de_len > bufsize) {
1278                 int frag1 = bufsize - offset;
1279
1280                 tmpde = kmalloc(de_len, GFP_KERNEL);
1281                 if (tmpde == NULL) {
1282                         printk(KERN_INFO "%s: out of memory\n", __func__);
1283                         ret = -ENOMEM;
1284                         goto fail;
1285                 }
1286                 memcpy(tmpde, bh->b_data + offset, frag1);
1287                 brelse(bh);
1288                 bh = sb_bread(inode->i_sb, ++block);
1289                 if (!bh)
1290                         goto out_badread;
1291                 memcpy((char *)tmpde+frag1, bh->b_data, de_len - frag1);
1292                 de = tmpde;
1293         }
1294
1295         inode->i_ino = isofs_get_ino(ei->i_iget5_block,
1296                                         ei->i_iget5_offset,
1297                                         ISOFS_BUFFER_BITS(inode));
1298
1299         /* Assume it is a normal-format file unless told otherwise */
1300         ei->i_file_format = isofs_file_normal;
1301
1302         if (de->flags[-high_sierra] & 2) {
1303                 if (sbi->s_dmode != ISOFS_INVALID_MODE)
1304                         inode->i_mode = S_IFDIR | sbi->s_dmode;
1305                 else
1306                         inode->i_mode = S_IFDIR | S_IRUGO | S_IXUGO;
1307                 inode->i_nlink = 1;     /*
1308                                          * Set to 1.  We know there are 2, but
1309                                          * the find utility tries to optimize
1310                                          * if it is 2, and it screws up.  It is
1311                                          * easier to give 1 which tells find to
1312                                          * do it the hard way.
1313                                          */
1314         } else {
1315                 if (sbi->s_fmode != ISOFS_INVALID_MODE) {
1316                         inode->i_mode = S_IFREG | sbi->s_fmode;
1317                 } else {
1318                         /*
1319                          * Set default permissions: r-x for all.  The disc
1320                          * could be shared with DOS machines so virtually
1321                          * anything could be a valid executable.
1322                          */
1323                         inode->i_mode = S_IFREG | S_IRUGO | S_IXUGO;
1324                 }
1325                 inode->i_nlink = 1;
1326         }
1327         inode->i_uid = sbi->s_uid;
1328         inode->i_gid = sbi->s_gid;
1329         inode->i_blocks = 0;
1330
1331         ei->i_format_parm[0] = 0;
1332         ei->i_format_parm[1] = 0;
1333         ei->i_format_parm[2] = 0;
1334
1335         ei->i_section_size = isonum_733(de->size);
1336         if (de->flags[-high_sierra] & 0x80) {
1337                 ret = isofs_read_level3_size(inode);
1338                 if (ret < 0)
1339                         goto fail;
1340                 ret = -EIO;
1341         } else {
1342                 ei->i_next_section_block = 0;
1343                 ei->i_next_section_offset = 0;
1344                 inode->i_size = isonum_733(de->size);
1345         }
1346
1347         /*
1348          * Some dipshit decided to store some other bit of information
1349          * in the high byte of the file length.  Truncate size in case
1350          * this CDROM was mounted with the cruft option.
1351          */
1352
1353         if (sbi->s_cruft)
1354                 inode->i_size &= 0x00ffffff;
1355
1356         if (de->interleave[0]) {
1357                 printk(KERN_DEBUG "ISOFS: Interleaved files not (yet) supported.\n");
1358                 inode->i_size = 0;
1359         }
1360
1361         /* I have no idea what file_unit_size is used for, so
1362            we will flag it for now */
1363         if (de->file_unit_size[0] != 0) {
1364                 printk(KERN_DEBUG "ISOFS: File unit size != 0 for ISO file (%ld).\n",
1365                         inode->i_ino);
1366         }
1367
1368         /* I have no idea what other flag bits are used for, so
1369            we will flag it for now */
1370 #ifdef DEBUG
1371         if((de->flags[-high_sierra] & ~2)!= 0){
1372                 printk(KERN_DEBUG "ISOFS: Unusual flag settings for ISO file "
1373                                 "(%ld %x).\n",
1374                         inode->i_ino, de->flags[-high_sierra]);
1375         }
1376 #endif
1377
1378         inode->i_mtime.tv_sec =
1379         inode->i_atime.tv_sec =
1380         inode->i_ctime.tv_sec = iso_date(de->date, high_sierra);
1381         inode->i_mtime.tv_nsec =
1382         inode->i_atime.tv_nsec =
1383         inode->i_ctime.tv_nsec = 0;
1384
1385         ei->i_first_extent = (isonum_733(de->extent) +
1386                         isonum_711(de->ext_attr_length));
1387
1388         /* Set the number of blocks for stat() - should be done before RR */
1389         inode->i_blocks = (inode->i_size + 511) >> 9;
1390
1391         /*
1392          * Now test for possible Rock Ridge extensions which will override
1393          * some of these numbers in the inode structure.
1394          */
1395
1396         if (!high_sierra) {
1397                 parse_rock_ridge_inode(de, inode);
1398                 /* if we want uid/gid set, override the rock ridge setting */
1399                 if (sbi->s_uid_set)
1400                         inode->i_uid = sbi->s_uid;
1401                 if (sbi->s_gid_set)
1402                         inode->i_gid = sbi->s_gid;
1403         }
1404         /* Now set final access rights if overriding rock ridge setting */
1405         if (S_ISDIR(inode->i_mode) && sbi->s_overriderockperm &&
1406             sbi->s_dmode != ISOFS_INVALID_MODE)
1407                 inode->i_mode = S_IFDIR | sbi->s_dmode;
1408         if (S_ISREG(inode->i_mode) && sbi->s_overriderockperm &&
1409             sbi->s_fmode != ISOFS_INVALID_MODE)
1410                 inode->i_mode = S_IFREG | sbi->s_fmode;
1411
1412         /* Install the inode operations vector */
1413         if (S_ISREG(inode->i_mode)) {
1414                 inode->i_fop = &generic_ro_fops;
1415                 switch (ei->i_file_format) {
1416 #ifdef CONFIG_ZISOFS
1417                 case isofs_file_compressed:
1418                         inode->i_data.a_ops = &zisofs_aops;
1419                         break;
1420 #endif
1421                 default:
1422                         inode->i_data.a_ops = &isofs_aops;
1423                         break;
1424                 }
1425         } else if (S_ISDIR(inode->i_mode)) {
1426                 inode->i_op = &isofs_dir_inode_operations;
1427                 inode->i_fop = &isofs_dir_operations;
1428         } else if (S_ISLNK(inode->i_mode)) {
1429                 inode->i_op = &page_symlink_inode_operations;
1430                 inode->i_data.a_ops = &isofs_symlink_aops;
1431         } else
1432                 /* XXX - parse_rock_ridge_inode() had already set i_rdev. */
1433                 init_special_inode(inode, inode->i_mode, inode->i_rdev);
1434
1435         ret = 0;
1436 out:
1437         kfree(tmpde);
1438         if (bh)
1439                 brelse(bh);
1440         return ret;
1441
1442 out_badread:
1443         printk(KERN_WARNING "ISOFS: unable to read i-node block\n");
1444 fail:
1445         goto out;
1446 }
1447
1448 struct isofs_iget5_callback_data {
1449         unsigned long block;
1450         unsigned long offset;
1451 };
1452
1453 static int isofs_iget5_test(struct inode *ino, void *data)
1454 {
1455         struct iso_inode_info *i = ISOFS_I(ino);
1456         struct isofs_iget5_callback_data *d =
1457                 (struct isofs_iget5_callback_data*)data;
1458         return (i->i_iget5_block == d->block)
1459                 && (i->i_iget5_offset == d->offset);
1460 }
1461
1462 static int isofs_iget5_set(struct inode *ino, void *data)
1463 {
1464         struct iso_inode_info *i = ISOFS_I(ino);
1465         struct isofs_iget5_callback_data *d =
1466                 (struct isofs_iget5_callback_data*)data;
1467         i->i_iget5_block = d->block;
1468         i->i_iget5_offset = d->offset;
1469         return 0;
1470 }
1471
1472 /* Store, in the inode's containing structure, the block and block
1473  * offset that point to the underlying meta-data for the inode.  The
1474  * code below is otherwise similar to the iget() code in
1475  * include/linux/fs.h */
1476 struct inode *isofs_iget(struct super_block *sb,
1477                          unsigned long block,
1478                          unsigned long offset)
1479 {
1480         unsigned long hashval;
1481         struct inode *inode;
1482         struct isofs_iget5_callback_data data;
1483         long ret;
1484
1485         if (offset >= 1ul << sb->s_blocksize_bits)
1486                 return ERR_PTR(-EINVAL);
1487
1488         data.block = block;
1489         data.offset = offset;
1490
1491         hashval = (block << sb->s_blocksize_bits) | offset;
1492
1493         inode = iget5_locked(sb, hashval, &isofs_iget5_test,
1494                                 &isofs_iget5_set, &data);
1495
1496         if (!inode)
1497                 return ERR_PTR(-ENOMEM);
1498
1499         if (inode->i_state & I_NEW) {
1500                 ret = isofs_read_inode(inode);
1501                 if (ret < 0) {
1502                         iget_failed(inode);
1503                         inode = ERR_PTR(ret);
1504                 } else {
1505                         unlock_new_inode(inode);
1506                 }
1507         }
1508
1509         return inode;
1510 }
1511
1512 static struct dentry *isofs_mount(struct file_system_type *fs_type,
1513         int flags, const char *dev_name, void *data)
1514 {
1515         return mount_bdev(fs_type, flags, dev_name, data, isofs_fill_super);
1516 }
1517
1518 static struct file_system_type iso9660_fs_type = {
1519         .owner          = THIS_MODULE,
1520         .name           = "iso9660",
1521         .mount          = isofs_mount,
1522         .kill_sb        = kill_block_super,
1523         .fs_flags       = FS_REQUIRES_DEV,
1524 };
1525
1526 static int __init init_iso9660_fs(void)
1527 {
1528         int err = init_inodecache();
1529         if (err)
1530                 goto out;
1531 #ifdef CONFIG_ZISOFS
1532         err = zisofs_init();
1533         if (err)
1534                 goto out1;
1535 #endif
1536         err = register_filesystem(&iso9660_fs_type);
1537         if (err)
1538                 goto out2;
1539         return 0;
1540 out2:
1541 #ifdef CONFIG_ZISOFS
1542         zisofs_cleanup();
1543 out1:
1544 #endif
1545         destroy_inodecache();
1546 out:
1547         return err;
1548 }
1549
1550 static void __exit exit_iso9660_fs(void)
1551 {
1552         unregister_filesystem(&iso9660_fs_type);
1553 #ifdef CONFIG_ZISOFS
1554         zisofs_cleanup();
1555 #endif
1556         destroy_inodecache();
1557 }
1558
1559 module_init(init_iso9660_fs)
1560 module_exit(exit_iso9660_fs)
1561 MODULE_LICENSE("GPL");
1562 /* Actual filesystem name is iso9660, as requested in filesystems.c */
1563 MODULE_ALIAS("iso9660");