2 * linux/fs/isofs/inode.c
4 * (C) 1991 Linus Torvalds - minix filesystem
5 * 1992, 1993, 1994 Eric Youngdale Modified for ISO 9660 filesystem.
6 * 1994 Eberhard Moenkeberg - 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
14 #include <linux/init.h>
15 #include <linux/module.h>
17 #include <linux/slab.h>
18 #include <linux/nls.h>
19 #include <linux/ctype.h>
20 #include <linux/smp_lock.h>
21 #include <linux/statfs.h>
22 #include <linux/cdrom.h>
23 #include <linux/parser.h>
30 static int isofs_hashi(struct dentry *parent, struct qstr *qstr);
31 static int isofs_hash(struct dentry *parent, struct qstr *qstr);
32 static int isofs_dentry_cmpi(struct dentry *dentry, struct qstr *a, struct qstr *b);
33 static int isofs_dentry_cmp(struct dentry *dentry, struct qstr *a, struct qstr *b);
36 static int isofs_hashi_ms(struct dentry *parent, struct qstr *qstr);
37 static int isofs_hash_ms(struct dentry *parent, struct qstr *qstr);
38 static int isofs_dentry_cmpi_ms(struct dentry *dentry, struct qstr *a, struct qstr *b);
39 static int isofs_dentry_cmp_ms(struct dentry *dentry, struct qstr *a, struct qstr *b);
42 static void isofs_put_super(struct super_block *sb)
44 struct isofs_sb_info *sbi = ISOFS_SB(sb);
46 if (sbi->s_nls_iocharset) {
47 unload_nls(sbi->s_nls_iocharset);
48 sbi->s_nls_iocharset = NULL;
57 static void isofs_read_inode(struct inode *);
58 static int isofs_statfs (struct dentry *, struct kstatfs *);
60 static struct kmem_cache *isofs_inode_cachep;
62 static struct inode *isofs_alloc_inode(struct super_block *sb)
64 struct iso_inode_info *ei;
65 ei = kmem_cache_alloc(isofs_inode_cachep, GFP_KERNEL);
68 return &ei->vfs_inode;
71 static void isofs_destroy_inode(struct inode *inode)
73 kmem_cache_free(isofs_inode_cachep, ISOFS_I(inode));
76 static void init_once(void *foo, struct kmem_cache * cachep, unsigned long flags)
78 struct iso_inode_info *ei = foo;
80 if (flags & SLAB_CTOR_CONSTRUCTOR)
81 inode_init_once(&ei->vfs_inode);
84 static int init_inodecache(void)
86 isofs_inode_cachep = kmem_cache_create("isofs_inode_cache",
87 sizeof(struct iso_inode_info),
88 0, (SLAB_RECLAIM_ACCOUNT|
91 if (isofs_inode_cachep == NULL)
96 static void destroy_inodecache(void)
98 kmem_cache_destroy(isofs_inode_cachep);
101 static int isofs_remount(struct super_block *sb, int *flags, char *data)
103 /* we probably want a lot more here */
108 static const struct super_operations isofs_sops = {
109 .alloc_inode = isofs_alloc_inode,
110 .destroy_inode = isofs_destroy_inode,
111 .read_inode = isofs_read_inode,
112 .put_super = isofs_put_super,
113 .statfs = isofs_statfs,
114 .remount_fs = isofs_remount,
118 static struct dentry_operations isofs_dentry_ops[] = {
120 .d_hash = isofs_hash,
121 .d_compare = isofs_dentry_cmp,
124 .d_hash = isofs_hashi,
125 .d_compare = isofs_dentry_cmpi,
129 .d_hash = isofs_hash_ms,
130 .d_compare = isofs_dentry_cmp_ms,
133 .d_hash = isofs_hashi_ms,
134 .d_compare = isofs_dentry_cmpi_ms,
139 struct iso9660_options{
148 unsigned int blocksize;
160 * Compute the hash for the isofs name corresponding to the dentry.
163 isofs_hash_common(struct dentry *dentry, struct qstr *qstr, int ms)
171 while (len && name[len-1] == '.')
175 qstr->hash = full_name_hash(name, len);
181 * Compute the hash for the isofs name corresponding to the dentry.
184 isofs_hashi_common(struct dentry *dentry, struct qstr *qstr, int ms)
194 while (len && name[len-1] == '.')
198 hash = init_name_hash();
200 c = tolower(*name++);
201 hash = partial_name_hash(tolower(c), hash);
203 qstr->hash = end_name_hash(hash);
209 * Case insensitive compare of two isofs names.
211 static int isofs_dentry_cmpi_common(struct dentry *dentry, struct qstr *a,
212 struct qstr *b, int ms)
216 /* A filename cannot end in '.' or we treat it like it has none */
220 while (alen && a->name[alen-1] == '.')
222 while (blen && b->name[blen-1] == '.')
226 if (strnicmp(a->name, b->name, alen) == 0)
233 * Case sensitive compare of two isofs names.
235 static int isofs_dentry_cmp_common(struct dentry *dentry, struct qstr *a,
236 struct qstr *b, int ms)
240 /* A filename cannot end in '.' or we treat it like it has none */
244 while (alen && a->name[alen-1] == '.')
246 while (blen && b->name[blen-1] == '.')
250 if (strncmp(a->name, b->name, alen) == 0)
257 isofs_hash(struct dentry *dentry, struct qstr *qstr)
259 return isofs_hash_common(dentry, qstr, 0);
263 isofs_hashi(struct dentry *dentry, struct qstr *qstr)
265 return isofs_hashi_common(dentry, qstr, 0);
269 isofs_dentry_cmp(struct dentry *dentry,struct qstr *a,struct qstr *b)
271 return isofs_dentry_cmp_common(dentry, a, b, 0);
275 isofs_dentry_cmpi(struct dentry *dentry,struct qstr *a,struct qstr *b)
277 return isofs_dentry_cmpi_common(dentry, a, b, 0);
282 isofs_hash_ms(struct dentry *dentry, struct qstr *qstr)
284 return isofs_hash_common(dentry, qstr, 1);
288 isofs_hashi_ms(struct dentry *dentry, struct qstr *qstr)
290 return isofs_hashi_common(dentry, qstr, 1);
294 isofs_dentry_cmp_ms(struct dentry *dentry,struct qstr *a,struct qstr *b)
296 return isofs_dentry_cmp_common(dentry, a, b, 1);
300 isofs_dentry_cmpi_ms(struct dentry *dentry,struct qstr *a,struct qstr *b)
302 return isofs_dentry_cmpi_common(dentry, a, b, 1);
307 Opt_block, Opt_check_r, Opt_check_s, Opt_cruft, Opt_gid, Opt_ignore,
308 Opt_iocharset, Opt_map_a, Opt_map_n, Opt_map_o, Opt_mode, Opt_nojoliet,
309 Opt_norock, Opt_sb, Opt_session, Opt_uid, Opt_unhide, Opt_utf8, Opt_err,
310 Opt_nocompress, Opt_hide, Opt_showassoc,
313 static match_table_t tokens = {
314 {Opt_norock, "norock"},
315 {Opt_nojoliet, "nojoliet"},
316 {Opt_unhide, "unhide"},
318 {Opt_showassoc, "showassoc"},
319 {Opt_cruft, "cruft"},
321 {Opt_iocharset, "iocharset=%s"},
322 {Opt_map_a, "map=acorn"},
323 {Opt_map_a, "map=a"},
324 {Opt_map_n, "map=normal"},
325 {Opt_map_n, "map=n"},
326 {Opt_map_o, "map=off"},
327 {Opt_map_o, "map=o"},
328 {Opt_session, "session=%u"},
329 {Opt_sb, "sbsector=%u"},
330 {Opt_check_r, "check=relaxed"},
331 {Opt_check_r, "check=r"},
332 {Opt_check_s, "check=strict"},
333 {Opt_check_s, "check=s"},
336 {Opt_mode, "mode=%u"},
337 {Opt_block, "block=%u"},
338 {Opt_ignore, "conv=binary"},
339 {Opt_ignore, "conv=b"},
340 {Opt_ignore, "conv=text"},
341 {Opt_ignore, "conv=t"},
342 {Opt_ignore, "conv=mtext"},
343 {Opt_ignore, "conv=m"},
344 {Opt_ignore, "conv=auto"},
345 {Opt_ignore, "conv=a"},
346 {Opt_nocompress, "nocompress"},
350 static int parse_options(char *options, struct iso9660_options *popt)
360 popt->showassoc = 'n';
361 popt->check = 'u'; /* unset */
362 popt->nocompress = 0;
363 popt->blocksize = 1024;
364 popt->mode = S_IRUGO | S_IXUGO; /* r-x for all. The disc could
365 be shared with DOS machines so
366 virtually anything could be
367 a valid executable. */
370 popt->iocharset = NULL;
377 while ((p = strsep(&options, ",")) != NULL) {
379 substring_t args[MAX_OPT_ARGS];
385 token = match_token(p, tokens, args);
398 popt->showassoc = 'y';
408 popt->iocharset = match_strdup(&args[0]);
421 if (match_int(&args[0], &option))
426 popt->session = n + 1;
429 if (match_int(&args[0], &option))
431 popt->sbsector = option;
442 if (match_int(&args[0], &option))
447 if (match_int(&args[0], &option))
452 if (match_int(&args[0], &option))
457 if (match_int(&args[0], &option))
460 if (n != 512 && n != 1024 && n != 2048)
465 popt->nocompress = 1;
475 * look if the driver can tell the multi session redirection value
477 * don't change this if you don't know what you do, please!
478 * Multisession is legal only with XA disks.
479 * A non-XA disk with more than one volume descriptor may do it right, but
480 * usually is written in a nowhere standardized "multi-partition" manner.
481 * Multisession uses absolute addressing (solely the first frame of the whole
482 * track is #0), multi-partition uses relative addressing (each first frame of
483 * each track is #0), and a track is not a session.
485 * A broken CDwriter software or drive firmware does not set new standards,
486 * at least not if conflicting with the existing ones.
490 #define WE_OBEY_THE_WRITTEN_STANDARDS 1
492 static unsigned int isofs_get_last_session(struct super_block *sb, s32 session)
494 struct cdrom_multisession ms_info;
495 unsigned int vol_desc_start;
496 struct block_device *bdev = sb->s_bdev;
500 ms_info.addr_format=CDROM_LBA;
501 if(session >= 0 && session <= 99) {
502 struct cdrom_tocentry Te;
503 Te.cdte_track=session;
504 Te.cdte_format=CDROM_LBA;
505 i = ioctl_by_bdev(bdev, CDROMREADTOCENTRY, (unsigned long) &Te);
507 printk(KERN_DEBUG "Session %d start %d type %d\n",
508 session, Te.cdte_addr.lba,
509 Te.cdte_ctrl&CDROM_DATA_TRACK);
510 if ((Te.cdte_ctrl&CDROM_DATA_TRACK) == 4)
511 return Te.cdte_addr.lba;
514 printk(KERN_ERR "Invalid session number or type of track\n");
516 i = ioctl_by_bdev(bdev, CDROMMULTISESSION, (unsigned long) &ms_info);
518 printk(KERN_ERR "Invalid session number\n");
520 printk("isofs.inode: CDROMMULTISESSION: rc=%d\n",i);
522 printk("isofs.inode: XA disk: %s\n",ms_info.xa_flag?"yes":"no");
523 printk("isofs.inode: vol_desc_start = %d\n", ms_info.addr.lba);
527 #if WE_OBEY_THE_WRITTEN_STANDARDS
528 if (ms_info.xa_flag) /* necessary for a valid ms_info.addr */
530 vol_desc_start=ms_info.addr.lba;
531 return vol_desc_start;
535 * Initialize the superblock and read the root inode.
537 * Note: a check_disk_change() has been done immediately prior
538 * to this call, so we don't need to check again.
540 static int isofs_fill_super(struct super_block *s, void *data, int silent)
542 struct buffer_head * bh = NULL, *pri_bh = NULL;
543 struct hs_primary_descriptor * h_pri = NULL;
544 struct iso_primary_descriptor * pri = NULL;
545 struct iso_supplementary_descriptor *sec = NULL;
546 struct iso_directory_record * rootp;
547 int joliet_level = 0;
548 int iso_blknum, block;
551 unsigned int vol_desc_start;
552 unsigned long first_data_zone;
553 struct inode * inode;
554 struct iso9660_options opt;
555 struct isofs_sb_info * sbi;
557 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
562 if (!parse_options((char *)data, &opt))
566 * First of all, get the hardware blocksize for this device.
567 * If we don't know what it is, or the hardware blocksize is
568 * larger than the blocksize the user specified, then use
572 * What if bugger tells us to go beyond page size?
574 opt.blocksize = sb_min_blocksize(s, opt.blocksize);
576 sbi->s_high_sierra = 0; /* default is iso9660 */
578 vol_desc_start = (opt.sbsector != -1) ?
579 opt.sbsector : isofs_get_last_session(s,opt.session);
581 for (iso_blknum = vol_desc_start+16;
582 iso_blknum < vol_desc_start+100; iso_blknum++)
584 struct hs_volume_descriptor * hdp;
585 struct iso_volume_descriptor * vdp;
587 block = iso_blknum << (ISOFS_BLOCK_BITS - s->s_blocksize_bits);
588 if (!(bh = sb_bread(s, block)))
591 vdp = (struct iso_volume_descriptor *)bh->b_data;
592 hdp = (struct hs_volume_descriptor *)bh->b_data;
594 /* Due to the overlapping physical location of the descriptors,
595 * ISO CDs can match hdp->id==HS_STANDARD_ID as well. To ensure
596 * proper identification in this case, we first check for ISO.
598 if (strncmp (vdp->id, ISO_STANDARD_ID, sizeof vdp->id) == 0) {
599 if (isonum_711 (vdp->type) == ISO_VD_END)
601 if (isonum_711 (vdp->type) == ISO_VD_PRIMARY) {
603 pri = (struct iso_primary_descriptor *)vdp;
604 /* Save the buffer in case we need it ... */
610 else if (isonum_711 (vdp->type) == ISO_VD_SUPPLEMENTARY) {
611 sec = (struct iso_supplementary_descriptor *)vdp;
612 if (sec->escape[0] == 0x25 && sec->escape[1] == 0x2f) {
613 if (opt.joliet == 'y') {
614 if (sec->escape[2] == 0x40) {
616 } else if (sec->escape[2] == 0x43) {
618 } else if (sec->escape[2] == 0x45) {
621 printk(KERN_DEBUG"ISO 9660 Extensions: Microsoft Joliet Level %d\n",
626 /* Unknown supplementary volume descriptor */
632 if (strncmp (hdp->id, HS_STANDARD_ID, sizeof hdp->id) == 0) {
633 if (isonum_711 (hdp->type) != ISO_VD_PRIMARY)
636 sbi->s_high_sierra = 1;
638 h_pri = (struct hs_primary_descriptor *)vdp;
643 /* Just skip any volume descriptors we don't recognize */
649 * If we fall through, either no volume descriptor was found,
650 * or else we passed a primary descriptor looking for others.
653 goto out_unknown_format;
660 if (joliet_level && (pri == NULL || opt.rock == 'n')) {
661 /* This is the case of Joliet with the norock mount flag.
662 * A disc with both Joliet and Rock Ridge is handled later
664 pri = (struct iso_primary_descriptor *) sec;
667 if(sbi->s_high_sierra){
668 rootp = (struct iso_directory_record *) h_pri->root_directory_record;
669 sbi->s_nzones = isonum_733 (h_pri->volume_space_size);
670 sbi->s_log_zone_size = isonum_723 (h_pri->logical_block_size);
671 sbi->s_max_size = isonum_733(h_pri->volume_space_size);
675 rootp = (struct iso_directory_record *) pri->root_directory_record;
676 sbi->s_nzones = isonum_733 (pri->volume_space_size);
677 sbi->s_log_zone_size = isonum_723 (pri->logical_block_size);
678 sbi->s_max_size = isonum_733(pri->volume_space_size);
681 sbi->s_ninodes = 0; /* No way to figure this out easily */
683 orig_zonesize = sbi->s_log_zone_size;
685 * If the zone size is smaller than the hardware sector size,
686 * this is a fatal error. This would occur if the disc drive
687 * had sectors that were 2048 bytes, but the filesystem had
688 * blocks that were 512 bytes (which should only very rarely
691 if(orig_zonesize < opt.blocksize)
694 /* RDE: convert log zone size to bit shift */
695 switch (sbi->s_log_zone_size)
696 { case 512: sbi->s_log_zone_size = 9; break;
697 case 1024: sbi->s_log_zone_size = 10; break;
698 case 2048: sbi->s_log_zone_size = 11; break;
701 goto out_bad_zone_size;
704 s->s_magic = ISOFS_SUPER_MAGIC;
705 s->s_maxbytes = 0xffffffff; /* We can handle files up to 4 GB */
707 /* The CDROM is read-only, has no nodes (devices) on it, and since
708 all of the files appear to be owned by root, we really do not want
709 to allow suid. (suid or devices will not show up unless we have
710 Rock Ridge extensions) */
712 s->s_flags |= MS_RDONLY /* | MS_NODEV | MS_NOSUID */;
714 /* Set this for reference. Its not currently used except on write
715 which we don't have .. */
717 first_data_zone = isonum_733 (rootp->extent) +
718 isonum_711 (rootp->ext_attr_length);
719 sbi->s_firstdatazone = first_data_zone;
721 printk(KERN_DEBUG "Max size:%ld Log zone size:%ld\n",
723 1UL << sbi->s_log_zone_size);
724 printk(KERN_DEBUG "First datazone:%ld\n", sbi->s_firstdatazone);
725 if(sbi->s_high_sierra)
726 printk(KERN_DEBUG "Disc in High Sierra format.\n");
730 * If the Joliet level is set, we _may_ decide to use the
731 * secondary descriptor, but can't be sure until after we
732 * read the root inode. But before reading the root inode
733 * we may need to change the device blocksize, and would
734 * rather release the old buffer first. So, we cache the
735 * first_data_zone value from the secondary descriptor.
738 pri = (struct iso_primary_descriptor *) sec;
739 rootp = (struct iso_directory_record *)
740 pri->root_directory_record;
741 first_data_zone = isonum_733 (rootp->extent) +
742 isonum_711 (rootp->ext_attr_length);
746 * We're all done using the volume descriptor, and may need
747 * to change the device blocksize, so release the buffer now.
753 * Force the blocksize to 512 for 512 byte sectors. The file
754 * read primitives really get it wrong in a bad way if we don't
757 * Note - we should never be setting the blocksize to something
758 * less than the hardware sector size for the device. If we
759 * do, we would end up having to read larger buffers and split
760 * out portions to satisfy requests.
762 * Note2- the idea here is that we want to deal with the optimal
763 * zonesize in the filesystem. If we have it set to something less,
764 * then we have horrible problems with trying to piece together
765 * bits of adjacent blocks in order to properly read directory
766 * entries. By forcing the blocksize in this way, we ensure
767 * that we will never be required to do this.
769 sb_set_blocksize(s, orig_zonesize);
771 sbi->s_nls_iocharset = NULL;
774 if (joliet_level && opt.utf8 == 0) {
775 char * p = opt.iocharset ? opt.iocharset : CONFIG_NLS_DEFAULT;
776 sbi->s_nls_iocharset = load_nls(p);
777 if (! sbi->s_nls_iocharset) {
778 /* Fail only if explicit charset specified */
781 sbi->s_nls_iocharset = load_nls_default();
785 s->s_op = &isofs_sops;
786 s->s_export_op = &isofs_export_ops;
787 sbi->s_mapping = opt.map;
788 sbi->s_rock = (opt.rock == 'y' ? 2 : 0);
789 sbi->s_rock_offset = -1; /* initial offset, will guess until SP is found*/
790 sbi->s_cruft = opt.cruft;
791 sbi->s_hide = opt.hide;
792 sbi->s_showassoc = opt.showassoc;
793 sbi->s_uid = opt.uid;
794 sbi->s_gid = opt.gid;
795 sbi->s_utf8 = opt.utf8;
796 sbi->s_nocompress = opt.nocompress;
798 * It would be incredibly stupid to allow people to mark every file
799 * on the disk as suid, so we merely allow them to set the default
802 sbi->s_mode = opt.mode & 0777;
805 * Read the root inode, which _may_ result in changing
806 * the s_rock flag. Once we have the final s_rock value,
807 * we then decide whether to use the Joliet descriptor.
809 inode = isofs_iget(s, sbi->s_firstdatazone, 0);
812 * If this disk has both Rock Ridge and Joliet on it, then we
813 * want to use Rock Ridge by default. This can be overridden
814 * by using the norock mount option. There is still one other
815 * possibility that is not taken into account: a Rock Ridge
816 * CD with Unicode names. Until someone sees such a beast, it
817 * will not be supported.
819 if (sbi->s_rock == 1) {
821 } else if (joliet_level) {
823 if (sbi->s_firstdatazone != first_data_zone) {
824 sbi->s_firstdatazone = first_data_zone;
826 "ISOFS: changing to secondary root\n");
828 inode = isofs_iget(s, sbi->s_firstdatazone, 0);
832 if (opt.check == 'u') {
833 /* Only Joliet is case insensitive by default */
834 if (joliet_level) opt.check = 'r';
835 else opt.check = 's';
837 sbi->s_joliet_level = joliet_level;
839 /* check the root inode */
844 /* get the root dentry */
845 s->s_root = d_alloc_root(inode);
850 if (joliet_level) table += 2;
851 if (opt.check == 'r') table++;
852 s->s_root->d_op = &isofs_dentry_ops[table];
854 kfree(opt.iocharset);
859 * Display error messages and free resources.
862 printk(KERN_WARNING "isofs_fill_super: root inode not initialized\n");
865 printk(KERN_WARNING "isofs_fill_super: get root inode failed\n");
869 if (sbi->s_nls_iocharset)
870 unload_nls(sbi->s_nls_iocharset);
874 printk(KERN_WARNING "isofs_fill_super: "
875 "bread failed, dev=%s, iso_blknum=%d, block=%d\n",
876 s->s_id, iso_blknum, block);
879 printk(KERN_WARNING "Bad logical zone size %ld\n",
880 sbi->s_log_zone_size);
883 printk(KERN_WARNING "Logical zone size(%d) < hardware blocksize(%u)\n",
884 orig_zonesize, opt.blocksize);
888 printk(KERN_WARNING "Unable to identify CD-ROM format.\n");
893 kfree(opt.iocharset);
899 static int isofs_statfs (struct dentry *dentry, struct kstatfs *buf)
901 struct super_block *sb = dentry->d_sb;
903 buf->f_type = ISOFS_SUPER_MAGIC;
904 buf->f_bsize = sb->s_blocksize;
905 buf->f_blocks = (ISOFS_SB(sb)->s_nzones
906 << (ISOFS_SB(sb)->s_log_zone_size - sb->s_blocksize_bits));
909 buf->f_files = ISOFS_SB(sb)->s_ninodes;
911 buf->f_namelen = NAME_MAX;
916 * Get a set of blocks; filling in buffer_heads if already allocated
917 * or getblk() if they are not. Returns the number of blocks inserted
920 int isofs_get_blocks(struct inode *inode, sector_t iblock_s,
921 struct buffer_head **bh, unsigned long nblocks)
924 unsigned offset, sect_size;
925 unsigned int firstext;
926 unsigned long nextblk, nextoff;
927 long iblock = (long)iblock_s;
929 struct iso_inode_info *ei = ISOFS_I(inode);
934 if (iblock < 0 || iblock != iblock_s) {
935 printk("isofs_get_blocks: block number too large\n");
942 firstext = ei->i_first_extent;
943 sect_size = ei->i_section_size >> ISOFS_BUFFER_BITS(inode);
944 nextblk = ei->i_next_section_block;
945 nextoff = ei->i_next_section_offset;
949 /* If we are *way* beyond the end of the file, print a message.
950 * Access beyond the end of the file up to the next page boundary
951 * is normal, however because of the way the page cache works.
952 * In this case, we just return 0 so that we can properly fill
953 * the page with useless information without generating any
956 if (b_off > ((inode->i_size + PAGE_CACHE_SIZE - 1) >> ISOFS_BUFFER_BITS(inode))) {
957 printk("isofs_get_blocks: block >= EOF (%ld, %ld)\n",
958 iblock, (unsigned long) inode->i_size);
962 /* On the last section, nextblk == 0, section size is likely to
963 * exceed sect_size by a partial block, and access beyond the
964 * end of the file will reach beyond the section size, too.
966 while (nextblk && (b_off >= (offset + sect_size))) {
967 struct inode *ninode;
970 ninode = isofs_iget(inode->i_sb, nextblk, nextoff);
973 firstext = ISOFS_I(ninode)->i_first_extent;
974 sect_size = ISOFS_I(ninode)->i_section_size >> ISOFS_BUFFER_BITS(ninode);
975 nextblk = ISOFS_I(ninode)->i_next_section_block;
976 nextoff = ISOFS_I(ninode)->i_next_section_offset;
979 if (++section > 100) {
980 printk("isofs_get_blocks: More than 100 file sections ?!?, aborting...\n");
981 printk("isofs_get_blocks: block=%ld firstext=%u sect_size=%u "
982 "nextblk=%lu nextoff=%lu\n",
983 iblock, firstext, (unsigned) sect_size,
990 map_bh(*bh, inode->i_sb, firstext + b_off - offset);
992 *bh = sb_getblk(inode->i_sb, firstext+b_off-offset);
996 bh++; /* Next buffer head */
997 b_off++; /* Next buffer offset */
1008 * Used by the standard interfaces.
1010 static int isofs_get_block(struct inode *inode, sector_t iblock,
1011 struct buffer_head *bh_result, int create)
1014 printk("isofs_get_block: Kernel tries to allocate a block\n");
1018 return isofs_get_blocks(inode, iblock, &bh_result, 1) ? 0 : -EIO;
1021 static int isofs_bmap(struct inode *inode, sector_t block)
1023 struct buffer_head dummy;
1027 dummy.b_blocknr = -1000;
1028 error = isofs_get_block(inode, block, &dummy, 0);
1030 return dummy.b_blocknr;
1034 struct buffer_head *isofs_bread(struct inode *inode, sector_t block)
1036 sector_t blknr = isofs_bmap(inode, block);
1039 return sb_bread(inode->i_sb, blknr);
1042 static int isofs_readpage(struct file *file, struct page *page)
1044 return block_read_full_page(page,isofs_get_block);
1047 static sector_t _isofs_bmap(struct address_space *mapping, sector_t block)
1049 return generic_block_bmap(mapping,block,isofs_get_block);
1052 static const struct address_space_operations isofs_aops = {
1053 .readpage = isofs_readpage,
1054 .sync_page = block_sync_page,
1058 static inline void test_and_set_uid(uid_t *p, uid_t value)
1064 static inline void test_and_set_gid(gid_t *p, gid_t value)
1070 static int isofs_read_level3_size(struct inode *inode)
1072 unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
1073 int high_sierra = ISOFS_SB(inode->i_sb)->s_high_sierra;
1074 struct buffer_head * bh = NULL;
1075 unsigned long block, offset, block_saved, offset_saved;
1077 int more_entries = 0;
1078 struct iso_directory_record * tmpde = NULL;
1079 struct iso_inode_info *ei = ISOFS_I(inode);
1083 /* The first 16 blocks are reserved as the System Area. Thus,
1084 * no inodes can appear in block 0. We use this to flag that
1085 * this is the last section. */
1086 ei->i_next_section_block = 0;
1087 ei->i_next_section_offset = 0;
1089 block = ei->i_iget5_block;
1090 offset = ei->i_iget5_offset;
1093 struct iso_directory_record * de;
1094 unsigned int de_len;
1097 bh = sb_bread(inode->i_sb, block);
1101 de = (struct iso_directory_record *) (bh->b_data + offset);
1102 de_len = *(unsigned char *) de;
1112 block_saved = block;
1113 offset_saved = offset;
1116 /* Make sure we have a full directory entry */
1117 if (offset >= bufsize) {
1118 int slop = bufsize - offset + de_len;
1120 tmpde = kmalloc(256, GFP_KERNEL);
1124 memcpy(tmpde, de, slop);
1125 offset &= bufsize - 1;
1130 bh = sb_bread(inode->i_sb, block);
1133 memcpy((void *)tmpde+slop, bh->b_data, offset);
1138 inode->i_size += isonum_733(de->size);
1140 ei->i_next_section_block = block_saved;
1141 ei->i_next_section_offset = offset_saved;
1144 more_entries = de->flags[-high_sierra] & 0x80;
1149 } while (more_entries);
1162 printk(KERN_INFO "ISOFS: unable to read i-node block %lu\n", block);
1167 printk(KERN_INFO "isofs_read_level3_size: "
1168 "More than 100 file sections ?!?, aborting...\n"
1169 "isofs_read_level3_size: inode=%lu\n",
1174 static void isofs_read_inode(struct inode *inode)
1176 struct super_block *sb = inode->i_sb;
1177 struct isofs_sb_info *sbi = ISOFS_SB(sb);
1178 unsigned long bufsize = ISOFS_BUFFER_SIZE(inode);
1179 unsigned long block;
1180 int high_sierra = sbi->s_high_sierra;
1181 struct buffer_head * bh = NULL;
1182 struct iso_directory_record * de;
1183 struct iso_directory_record * tmpde = NULL;
1184 unsigned int de_len;
1185 unsigned long offset;
1186 struct iso_inode_info *ei = ISOFS_I(inode);
1188 block = ei->i_iget5_block;
1189 bh = sb_bread(inode->i_sb, block);
1193 offset = ei->i_iget5_offset;
1195 de = (struct iso_directory_record *) (bh->b_data + offset);
1196 de_len = *(unsigned char *) de;
1198 if (offset + de_len > bufsize) {
1199 int frag1 = bufsize - offset;
1201 tmpde = kmalloc(de_len, GFP_KERNEL);
1202 if (tmpde == NULL) {
1203 printk(KERN_INFO "isofs_read_inode: out of memory\n");
1206 memcpy(tmpde, bh->b_data + offset, frag1);
1208 bh = sb_bread(inode->i_sb, ++block);
1211 memcpy((char *)tmpde+frag1, bh->b_data, de_len - frag1);
1215 inode->i_ino = isofs_get_ino(ei->i_iget5_block,
1217 ISOFS_BUFFER_BITS(inode));
1219 /* Assume it is a normal-format file unless told otherwise */
1220 ei->i_file_format = isofs_file_normal;
1222 if (de->flags[-high_sierra] & 2) {
1223 inode->i_mode = S_IRUGO | S_IXUGO | S_IFDIR;
1224 inode->i_nlink = 1; /* Set to 1. We know there are 2, but
1225 the find utility tries to optimize
1226 if it is 2, and it screws up. It is
1227 easier to give 1 which tells find to
1228 do it the hard way. */
1230 /* Everybody gets to read the file. */
1231 inode->i_mode = sbi->s_mode;
1233 inode->i_mode |= S_IFREG;
1235 inode->i_uid = sbi->s_uid;
1236 inode->i_gid = sbi->s_gid;
1237 inode->i_blocks = 0;
1239 ei->i_format_parm[0] = 0;
1240 ei->i_format_parm[1] = 0;
1241 ei->i_format_parm[2] = 0;
1243 ei->i_section_size = isonum_733 (de->size);
1244 if (de->flags[-high_sierra] & 0x80) {
1245 if(isofs_read_level3_size(inode)) goto fail;
1247 ei->i_next_section_block = 0;
1248 ei->i_next_section_offset = 0;
1249 inode->i_size = isonum_733 (de->size);
1253 * Some dipshit decided to store some other bit of information
1254 * in the high byte of the file length. Truncate size in case
1255 * this CDROM was mounted with the cruft option.
1258 if (sbi->s_cruft == 'y')
1259 inode->i_size &= 0x00ffffff;
1261 if (de->interleave[0]) {
1262 printk("Interleaved files not (yet) supported.\n");
1266 /* I have no idea what file_unit_size is used for, so
1267 we will flag it for now */
1268 if (de->file_unit_size[0] != 0) {
1269 printk("File unit size != 0 for ISO file (%ld).\n",
1273 /* I have no idea what other flag bits are used for, so
1274 we will flag it for now */
1276 if((de->flags[-high_sierra] & ~2)!= 0){
1277 printk("Unusual flag settings for ISO file (%ld %x).\n",
1278 inode->i_ino, de->flags[-high_sierra]);
1282 inode->i_mtime.tv_sec =
1283 inode->i_atime.tv_sec =
1284 inode->i_ctime.tv_sec = iso_date(de->date, high_sierra);
1285 inode->i_mtime.tv_nsec =
1286 inode->i_atime.tv_nsec =
1287 inode->i_ctime.tv_nsec = 0;
1289 ei->i_first_extent = (isonum_733 (de->extent) +
1290 isonum_711 (de->ext_attr_length));
1292 /* Set the number of blocks for stat() - should be done before RR */
1293 inode->i_blocks = (inode->i_size + 511) >> 9;
1296 * Now test for possible Rock Ridge extensions which will override
1297 * some of these numbers in the inode structure.
1301 parse_rock_ridge_inode(de, inode);
1302 /* if we want uid/gid set, override the rock ridge setting */
1303 test_and_set_uid(&inode->i_uid, sbi->s_uid);
1304 test_and_set_gid(&inode->i_gid, sbi->s_gid);
1307 /* Install the inode operations vector */
1308 if (S_ISREG(inode->i_mode)) {
1309 inode->i_fop = &generic_ro_fops;
1310 switch ( ei->i_file_format ) {
1311 #ifdef CONFIG_ZISOFS
1312 case isofs_file_compressed:
1313 inode->i_data.a_ops = &zisofs_aops;
1317 inode->i_data.a_ops = &isofs_aops;
1320 } else if (S_ISDIR(inode->i_mode)) {
1321 inode->i_op = &isofs_dir_inode_operations;
1322 inode->i_fop = &isofs_dir_operations;
1323 } else if (S_ISLNK(inode->i_mode)) {
1324 inode->i_op = &page_symlink_inode_operations;
1325 inode->i_data.a_ops = &isofs_symlink_aops;
1327 /* XXX - parse_rock_ridge_inode() had already set i_rdev. */
1328 init_special_inode(inode, inode->i_mode, inode->i_rdev);
1337 printk(KERN_WARNING "ISOFS: unable to read i-node block\n");
1339 make_bad_inode(inode);
1343 struct isofs_iget5_callback_data {
1344 unsigned long block;
1345 unsigned long offset;
1348 static int isofs_iget5_test(struct inode *ino, void *data)
1350 struct iso_inode_info *i = ISOFS_I(ino);
1351 struct isofs_iget5_callback_data *d =
1352 (struct isofs_iget5_callback_data*)data;
1353 return (i->i_iget5_block == d->block)
1354 && (i->i_iget5_offset == d->offset);
1357 static int isofs_iget5_set(struct inode *ino, void *data)
1359 struct iso_inode_info *i = ISOFS_I(ino);
1360 struct isofs_iget5_callback_data *d =
1361 (struct isofs_iget5_callback_data*)data;
1362 i->i_iget5_block = d->block;
1363 i->i_iget5_offset = d->offset;
1367 /* Store, in the inode's containing structure, the block and block
1368 * offset that point to the underlying meta-data for the inode. The
1369 * code below is otherwise similar to the iget() code in
1370 * include/linux/fs.h */
1371 struct inode *isofs_iget(struct super_block *sb,
1372 unsigned long block,
1373 unsigned long offset)
1375 unsigned long hashval;
1376 struct inode *inode;
1377 struct isofs_iget5_callback_data data;
1379 if (offset >= 1ul << sb->s_blocksize_bits)
1383 data.offset = offset;
1385 hashval = (block << sb->s_blocksize_bits) | offset;
1387 inode = iget5_locked(sb, hashval, &isofs_iget5_test,
1388 &isofs_iget5_set, &data);
1390 if (inode && (inode->i_state & I_NEW)) {
1391 sb->s_op->read_inode(inode);
1392 unlock_new_inode(inode);
1398 static int isofs_get_sb(struct file_system_type *fs_type,
1399 int flags, const char *dev_name, void *data, struct vfsmount *mnt)
1401 return get_sb_bdev(fs_type, flags, dev_name, data, isofs_fill_super,
1405 static struct file_system_type iso9660_fs_type = {
1406 .owner = THIS_MODULE,
1408 .get_sb = isofs_get_sb,
1409 .kill_sb = kill_block_super,
1410 .fs_flags = FS_REQUIRES_DEV,
1413 static int __init init_iso9660_fs(void)
1415 int err = init_inodecache();
1418 #ifdef CONFIG_ZISOFS
1419 err = zisofs_init();
1423 err = register_filesystem(&iso9660_fs_type);
1428 #ifdef CONFIG_ZISOFS
1432 destroy_inodecache();
1437 static void __exit exit_iso9660_fs(void)
1439 unregister_filesystem(&iso9660_fs_type);
1440 #ifdef CONFIG_ZISOFS
1443 destroy_inodecache();
1446 module_init(init_iso9660_fs)
1447 module_exit(exit_iso9660_fs)
1448 MODULE_LICENSE("GPL");
1449 /* Actual filesystem name is iso9660, as requested in filesystems.c */
1450 MODULE_ALIAS("iso9660");