Annotation of dmsdos/patches/cvf-fat-2.0.diff, revision 1.1

1.1     ! root        1: diff -u -r -N linux-2.3.99-pre3/fs/fat/cvf.c linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/cvf.c
        !             2: --- linux-2.3.99-pre3/fs/fat/cvf.c     Mon Aug  9 20:43:49 1999
        !             3: +++ linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/cvf.c Fri Apr 14 13:17:46 2000
        !             4: @@ -4,7 +4,7 @@
        !             5:   * written 1997,1998 by Frank Gockel <[email protected]>
        !             6:   *
        !             7:   * please do not remove the next line, dmsdos needs it for verifying patches
        !             8: - * CVF-FAT-VERSION-ID: 1.2.0
        !             9: + * CVF-FAT-VERSION-ID: 2.0.0
        !            10:   *
        !            11:   */
        !            12:   
        !            13: @@ -21,6 +21,7 @@
        !            14:  
        !            15:  #define MAX_CVF_FORMATS 3
        !            16:  
        !            17: +extern struct address_space_operations fat_aops;
        !            18:  struct buffer_head *default_fat_bread(struct super_block *,int);
        !            19:  struct buffer_head *default_fat_getblk(struct super_block *, int);
        !            20:  struct buffer_head *bigblock_fat_bread(struct super_block *, int);
        !            21: @@ -52,10 +53,10 @@
        !            22:        size_t count,
        !            23:        loff_t *ppos);
        !            24:  
        !            25: -struct cvf_format default_cvf = {
        !            26: +struct cvf_format default_transparent = {
        !            27:        0,      /* version - who cares? */      
        !            28: -      "plain",
        !            29: -      0,      /* flags - who cares? */
        !            30: +      "none-default",
        !            31: +      CVF_TRANSPARENT,        /* flags - who cares? */
        !            32:        NULL,
        !            33:        NULL,
        !            34:        NULL,
        !            35: @@ -70,15 +71,17 @@
        !            36:        NULL,
        !            37:        default_fat_bmap,
        !            38:        generic_file_read,
        !            39: -      default_fat_file_write,
        !            40: +      generic_file_write,
        !            41: +      generic_file_mmap,
        !            42: +      &fat_aops,
        !            43:        NULL,
        !            44:        NULL
        !            45:  };
        !            46:  
        !            47: -struct cvf_format bigblock_cvf = {
        !            48: +struct cvf_format bigblock_transparent = {
        !            49:        0,      /* version - who cares? */      
        !            50: -      "big_blocks",
        !            51: -      0,      /* flags - who cares? */
        !            52: +      "none-bigblocks",
        !            53: +      CVF_TRANSPARENT|CVF_BIGBLOCK,   /* flags - who cares? */
        !            54:        NULL,
        !            55:        NULL,
        !            56:        NULL,
        !            57: @@ -92,8 +95,10 @@
        !            58:        default_fat_access,
        !            59:        NULL,
        !            60:        default_fat_bmap,
        !            61: -      NULL,
        !            62: -      default_fat_file_write,
        !            63: +      generic_file_read, /* why not generic_file_read ?*/
        !            64: +      generic_file_write,
        !            65: +      generic_file_mmap,
        !            66: +      &fat_aops,
        !            67:        NULL,
        !            68:        NULL
        !            69:  };
        !            70: diff -u -r -N linux-2.3.99-pre3/fs/fat/fatfs_syms.c linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/fatfs_syms.c
        !            71: --- linux-2.3.99-pre3/fs/fat/fatfs_syms.c      Mon Mar 13 21:35:39 2000
        !            72: +++ linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/fatfs_syms.c  Fri Apr 14 13:17:46 2000
        !            73: @@ -52,6 +52,7 @@
        !            74:  EXPORT_SYMBOL(unlock_fat);
        !            75:  EXPORT_SYMBOL(fat_dir_ioctl);
        !            76:  EXPORT_SYMBOL(fat_add_entries);
        !            77: +EXPORT_SYMBOL(fat_add_cluster);
        !            78:  EXPORT_SYMBOL(fat_dir_empty);
        !            79:  EXPORT_SYMBOL(fat_truncate);
        !            80:  
        !            81: diff -u -r -N linux-2.3.99-pre3/fs/fat/file.c linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/file.c
        !            82: --- linux-2.3.99-pre3/fs/fat/file.c    Sun Feb 27 05:33:42 2000
        !            83: +++ linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/file.c        Fri Apr 14 13:17:46 2000
        !            84: @@ -33,7 +33,7 @@
        !            85:  struct file_operations fat_file_operations = {
        !            86:        read:           fat_file_read,
        !            87:        write:          fat_file_write,
        !            88: -      mmap:           generic_file_mmap,
        !            89: +      mmap:           fat_file_mmap,
        !            90:        fsync:          file_fsync,
        !            91:  };
        !            92:  
        !            93: @@ -90,22 +90,12 @@
        !            94:        size_t count,
        !            95:        loff_t *ppos)
        !            96:  {
        !            97: +      int retval;
        !            98:        struct inode *inode = filp->f_dentry->d_inode;
        !            99:        struct super_block *sb = inode->i_sb;
        !           100: -      return MSDOS_SB(sb)->cvf_format
        !           101: +      retval = MSDOS_SB(sb)->cvf_format
        !           102:                        ->cvf_file_write(filp,buf,count,ppos);
        !           103: -}
        !           104: -
        !           105: -ssize_t default_fat_file_write(
        !           106: -      struct file *filp,
        !           107: -      const char *buf,
        !           108: -      size_t count,
        !           109: -      loff_t *ppos)
        !           110: -{
        !           111: -      struct inode *inode = filp->f_dentry->d_inode;
        !           112: -      int retval;
        !           113: -
        !           114: -      retval = generic_file_write(filp, buf, count, ppos);
        !           115: +                      
        !           116:        if (retval > 0) {
        !           117:                inode->i_mtime = inode->i_ctime = CURRENT_TIME;
        !           118:                MSDOS_I(inode)->i_attrs |= ATTR_ARCH;
        !           119: @@ -131,3 +121,11 @@
        !           120:        inode->i_ctime = inode->i_mtime = CURRENT_TIME;
        !           121:        mark_inode_dirty(inode);
        !           122:  }
        !           123: +
        !           124: +int fat_file_mmap(struct file * filp, struct vm_area_struct * vma)
        !           125: +{       
        !           126: +      struct inode *inode = filp->f_dentry->d_inode;
        !           127: +      return MSDOS_SB(inode->i_sb)->cvf_format
        !           128: +                                ->cvf_mmap(filp,vma);
        !           129: +                                
        !           130: +}
        !           131: \ No newline at end of file
        !           132: diff -u -r -N linux-2.3.99-pre3/fs/fat/inode.c linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/inode.c
        !           133: --- linux-2.3.99-pre3/fs/fat/inode.c   Tue Mar 21 20:30:08 2000
        !           134: +++ linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/inode.c       Fri Apr 14 13:17:46 2000
        !           135: @@ -33,7 +33,7 @@
        !           136:  #include <asm/uaccess.h>
        !           137:  #include <asm/unaligned.h>
        !           138:  
        !           139: -extern struct cvf_format default_cvf, bigblock_cvf;
        !           140: +extern struct cvf_format default_transparent, bigblock_transparent;
        !           141:  
        !           142:  /* #define FAT_PARANOIA 1 */
        !           143:  #define DEBUG_LEVEL 0
        !           144: @@ -425,12 +425,15 @@
        !           145:        struct msdos_sb_info *sbi = MSDOS_SB(sb);
        !           146:        char *p;
        !           147:        int data_sectors,logical_sector_size,sector_mult,fat_clusters=0;
        !           148: -      int debug,error,fat,cp;
        !           149: +      int debug;
        !           150: +      int error = 0;
        !           151: +      int fat,cp;
        !           152:        int blksize = 512;
        !           153:        int fat32;
        !           154:        struct fat_mount_options opts;
        !           155:        char buf[50];
        !           156: -      int i;
        !           157: +      int cvf_index=-1;
        !           158: +      /* int i; */
        !           159:        char cvf_format[21];
        !           160:        char cvf_options[101];
        !           161:  
        !           162: @@ -501,14 +504,15 @@
        !           163:        sbi->cluster_size = b->cluster_size*sector_mult;
        !           164:        if (!sbi->cluster_size || (sbi->cluster_size & (sbi->cluster_size-1))) {
        !           165:                printk("fatfs: bogus cluster size\n");
        !           166: -              brelse(bh);
        !           167: -              goto out_invalid;
        !           168: +              error = 1;
        !           169: +              /* brelse(bh);goto out_invalid; */
        !           170: +      }else{
        !           171: +              for (sbi->cluster_bits=0;
        !           172: +                   1<<sbi->cluster_bits<sbi->cluster_size;
        !           173: +                   sbi->cluster_bits++)
        !           174: +                      ;
        !           175: +              sbi->cluster_bits += SECTOR_BITS;
        !           176:        }
        !           177: -      for (sbi->cluster_bits=0;
        !           178: -           1<<sbi->cluster_bits<sbi->cluster_size;
        !           179: -           sbi->cluster_bits++)
        !           180: -              ;
        !           181: -      sbi->cluster_bits += SECTOR_BITS;
        !           182:        sbi->fats = b->fats;
        !           183:        sbi->fat_start = CF_LE_W(b->reserved)*sector_mult;
        !           184:        if (!b->fat_length && b->fat32_length) {
        !           185: @@ -560,7 +564,7 @@
        !           186:                data_sectors = CF_LE_L(b->total_sect);
        !           187:        }
        !           188:        data_sectors = data_sectors * sector_mult - sbi->data_start;
        !           189: -      error = !b->cluster_size || !sector_mult;
        !           190: +      error |= !sector_mult;
        !           191:        if (!error) {
        !           192:                sbi->clusters = b->cluster_size ? data_sectors/
        !           193:                    b->cluster_size/sector_mult : 0;
        !           194: @@ -586,15 +590,18 @@
        !           195:                                /* on odd sectors. */
        !           196:        sb->s_blocksize_bits = blksize == 512 ? 9 : (blksize == 1024 ? 10 : 11);
        !           197:        if (!strcmp(cvf_format,"none"))
        !           198: -              i = -1;
        !           199: +              cvf_index = -1;
        !           200:        else
        !           201: -              i = detect_cvf(sb,cvf_format);
        !           202: -      if (i >= 0)
        !           203: -              error = cvf_formats[i]->mount_cvf(sb,cvf_options);
        !           204: +              cvf_index = detect_cvf(sb,cvf_format);
        !           205: +      if (cvf_index >= 0) {
        !           206: +              ++cvf_format_use_count[cvf_index];
        !           207: +              sbi->cvf_format = cvf_formats[cvf_index];
        !           208: +              error = cvf_formats[cvf_index]->mount_cvf(sb,cvf_options);
        !           209: +      }
        !           210:        else if (sb->s_blocksize == 512)
        !           211: -              sbi->cvf_format = &default_cvf;
        !           212: +              sbi->cvf_format = &default_transparent;
        !           213:        else
        !           214: -              sbi->cvf_format = &bigblock_cvf;
        !           215: +              sbi->cvf_format = &bigblock_transparent;
        !           216:        if (error || debug) {
        !           217:                /* The MSDOS_CAN_BMAP is obsolete, but left just to remember */
        !           218:                printk("[MS-DOS FS Rel. 12,FAT %d,check=%c,conv=%c,"
        !           219: @@ -614,7 +621,7 @@
        !           220:                       sbi->root_cluster,sbi->free_clusters);
        !           221:                printk ("Transaction block size = %d\n",blksize);
        !           222:        }
        !           223: -      if (i<0) if (sbi->clusters+2 > fat_clusters)
        !           224: +      if (cvf_index<0) if (sbi->clusters+2 > fat_clusters)
        !           225:                sbi->clusters = fat_clusters-2;
        !           226:        if (error)
        !           227:                goto out_invalid;
        !           228: @@ -631,7 +638,7 @@
        !           229:        if (! sbi->nls_disk) {
        !           230:                /* Fail only if explicit charset specified */
        !           231:                if (opts.codepage != 0)
        !           232: -                      goto out_fail;
        !           233: +                      goto out_free_cvf;
        !           234:                sbi->options.codepage = 0; /* already 0?? */
        !           235:                sbi->nls_disk = load_nls_default();
        !           236:        }
        !           237: @@ -659,10 +666,6 @@
        !           238:        sb->s_root = d_alloc_root(root_inode);
        !           239:        if (!sb->s_root)
        !           240:                goto out_no_root;
        !           241: -      if(i>=0) {
        !           242: -              sbi->cvf_format = cvf_formats[i];
        !           243: -              ++cvf_format_use_count[i];
        !           244: -      }
        !           245:        return sb;
        !           246:  
        !           247:  out_no_root:
        !           248: @@ -671,8 +674,15 @@
        !           249:        unload_nls(sbi->nls_io);
        !           250:  out_unload_nls:
        !           251:        unload_nls(sbi->nls_disk);
        !           252: +out_free_cvf: 
        !           253: +      if(cvf_index>=0) {
        !           254: +              cvf_formats[cvf_index]->unmount_cvf(sb);
        !           255: +              --cvf_format_use_count[cvf_index];
        !           256: +      }
        !           257:        goto out_fail;
        !           258:  out_invalid:
        !           259: +      if(cvf_index>=0)
        !           260: +              --cvf_format_use_count[cvf_index];
        !           261:        if (!silent)
        !           262:                printk("VFS: Can't find a valid MSDOS filesystem on dev %s.\n",
        !           263:                        kdevname(sb->s_dev));
        !           264: @@ -746,7 +756,7 @@
        !           265:  {
        !           266:        return generic_block_bmap(mapping,block,fat_get_block);
        !           267:  }
        !           268: -static struct address_space_operations fat_aops = {
        !           269: +struct address_space_operations fat_aops = {
        !           270:        readpage: fat_readpage,
        !           271:        writepage: fat_writepage,
        !           272:        prepare_write: fat_prepare_write,
        !           273: @@ -815,7 +825,8 @@
        !           274:                inode->i_size = CF_LE_L(de->size);
        !           275:                inode->i_op = &fat_file_inode_operations;
        !           276:                inode->i_fop = &fat_file_operations;
        !           277: -              inode->i_mapping->a_ops = &fat_aops;
        !           278: +              /*inode->i_mapping->a_ops = &fat_aops;*/
        !           279: +              inode->i_mapping->a_ops=MSDOS_SB(inode->i_sb)->cvf_format->cvf_aops;
        !           280:                MSDOS_I(inode)->mmu_private = inode->i_size;
        !           281:        }
        !           282:        if(de->attr & ATTR_SYS)
        !           283: diff -u -r -N linux-2.3.99-pre3/fs/fat/misc.c linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/misc.c
        !           284: --- linux-2.3.99-pre3/fs/fat/misc.c    Thu Feb 10 21:16:58 2000
        !           285: +++ linux-2.3.99-pre3-cvf-fat-2.0/fs/fat/misc.c        Fri Apr 14 13:17:34 2000
        !           286: @@ -279,9 +279,11 @@
        !           287:        sector = MSDOS_SB(sb)->data_start+(nr-2)*cluster_size;
        !           288:        last_sector = sector + cluster_size;
        !           289:        if (MSDOS_SB(sb)->cvf_format &&
        !           290: -          MSDOS_SB(sb)->cvf_format->zero_out_cluster)
        !           291: +          MSDOS_SB(sb)->cvf_format->zero_out_cluster) {
        !           292: +              /* CVF zeroes full cluster only */
        !           293:                MSDOS_SB(sb)->cvf_format->zero_out_cluster(inode,nr);
        !           294: -      else
        !           295: +              res=fat_bread(sb,fat_bmap(inode,inode->i_blocks));
        !           296: +      }else
        !           297:        for ( ; sector < last_sector; sector++) {
        !           298:                #ifdef DEBUG
        !           299:                        printk("zeroing sector %d\n",sector);
        !           300: diff -u -r -N linux-2.3.99-pre3/include/linux/fat_cvf.h linux-2.3.99-pre3-cvf-fat-2.0/include/linux/fat_cvf.h
        !           301: --- linux-2.3.99-pre3/include/linux/fat_cvf.h  Mon Aug  9 20:43:49 1999
        !           302: +++ linux-2.3.99-pre3-cvf-fat-2.0/include/linux/fat_cvf.h      Fri Apr 14 13:17:46 2000
        !           303: @@ -2,6 +2,8 @@
        !           304:  #define _FAT_CVF
        !           305:  
        !           306:  #define CVF_USE_READPAGE  0x0001
        !           307: +#define CVF_TRANSPARENT   0x8000
        !           308: +#define CVF_BIGBLOCK      0x4000
        !           309:  
        !           310:  struct cvf_format
        !           311:  { int cvf_version;
        !           312: @@ -30,8 +32,7 @@
        !           313:    ssize_t (*cvf_file_read) ( struct file *, char *, size_t, loff_t *);
        !           314:    ssize_t (*cvf_file_write) ( struct file *, const char *, size_t, loff_t *);
        !           315:    int (*cvf_mmap) (struct file *, struct vm_area_struct *);
        !           316: -  int (*cvf_readpage) (struct inode *, struct page *);
        !           317: -  int (*cvf_writepage) (struct inode *, struct page *);
        !           318: +  struct address_space_operations*cvf_aops;
        !           319:    int (*cvf_dir_ioctl) (struct inode * inode, struct file * filp,
        !           320:                          unsigned int cmd, unsigned long arg);
        !           321:    void (*zero_out_cluster) (struct inode*, int clusternr);
        !           322: diff -u -r -N linux-2.3.99-pre3/include/linux/msdos_fs.h linux-2.3.99-pre3-cvf-fat-2.0/include/linux/msdos_fs.h
        !           323: --- linux-2.3.99-pre3/include/linux/msdos_fs.h Mon Mar 13 21:35:39 2000
        !           324: +++ linux-2.3.99-pre3-cvf-fat-2.0/include/linux/msdos_fs.h     Fri Apr 14 13:17:46 2000
        !           325: @@ -271,6 +271,7 @@
        !           326:  extern ssize_t fat_file_read(struct file *, char *, size_t, loff_t *);
        !           327:  extern ssize_t fat_file_write(struct file *, const char *, size_t, loff_t *);
        !           328:  extern void fat_truncate(struct inode *inode);
        !           329: +extern int fat_file_mmap(struct file * filp, struct vm_area_struct * vma);
        !           330:  
        !           331:  /* msdos.c */
        !           332:  extern struct super_block *msdos_read_super(struct super_block *sb,void *data, int silent);
        !           333: diff -u -r -N linux-2.3.99-pre3/Documentation/filesystems/fat_cvf.txt linux-2.3.99-pre3-cvf-fat-2.0/Documentation/filesystems/fat_cvf.txt
        !           334: --- linux-2.3.99-pre3/Documentation/filesystems/fat_cvf.txt    Fri Nov 20 18:19:46 1998
        !           335: +++ linux-2.3.99-pre3-cvf-fat-2.0/Documentation/filesystems/fat_cvf.txt        Tue Apr 18 11:35:01 2000
        !           336: @@ -1,5 +1,5 @@
        !           337: -This is the main documentation for the CVF-FAT filesystem extension.  18Nov1998
        !           338: -
        !           339: +This is the main documentation for the CVF-FAT filesystem extension.  15Apr2000
        !           340: +CVF-FAT-VERSION-ID: 2.0.0
        !           341:  
        !           342:  Table of Contents:
        !           343:  
        !           344: @@ -32,14 +32,13 @@
        !           345:  2. Restrictions
        !           346:  ------------------------------------------------------------------------------
        !           347:  
        !           348: -- BMAP problems
        !           349: +- BMAP/MMAP problems
        !           350:  
        !           351:    CVF filesystems cannot do bmap. It's impossible in principle. Thus
        !           352:    all actions that require bmap do not work (swapping, writable mmapping).
        !           353: -  Read-only mmapping works because the FAT driver has a hack for this
        !           354: -  situation :) Well, writable mmapping should now work using the readpage
        !           355: -  interface function which has been hacked into the FAT driver just for 
        !           356: -  CVF-FAT :)
        !           357: +  Writable mmap could work through large address_operations hacks, but
        !           358: +  they have not yet been implemented in CVF-FAT for kernel 2.3.99. So
        !           359: +  mmap is read-only and you have to live with it for now :)
        !           360:    
        !           361:  - attention, DOSEmu users 
        !           362:  
        !           363: @@ -127,12 +126,15 @@
        !           364:        describing the CVF format the module implements. This text is used
        !           365:        for the cvf_format option. This name must also be unique.
        !           366:    - flags:
        !           367: -      Bit coded flags, currently only used for a readpage/mmap hack that 
        !           368: -      provides both mmap and readpage functionality. If CVF_USE_READPAGE
        !           369: -      is set, mmap is set to generic_file_mmap and readpage is caught
        !           370: -      and redirected to the cvf_readpage function. If it is not set,
        !           371: -      readpage is set to generic_readpage and mmap is caught and redirected
        !           372: -      to cvf_mmap. (If you want writable mmap use the readpage interface.)
        !           373: +      Currently without function. Only used for information purpose.
        !           374: +      CVF_TRANSPARENT: marks a cvf structure for transparent access (i.e.
        !           375: +                       plain FAT filesystem).
        !           376: +      CVF_BIGBLOCK:    indicates that the cvf module is capable of handling
        !           377: +                       block sizes larger than 512 bytes. *As the loop
        !           378: +                       driver can do blocksize conversion, a cvf module 
        !           379: +                       usually does not need to handle this.*
        !           380: +      CVF_USE_READPAGE: indicates that mmap uses the new readpage interface
        !           381: +                       and thus supports writable mmap.
        !           382:    - detect_cvf:
        !           383:        A function that is called to decide whether the filesystem is a CVF of
        !           384:        the type the module supports. The detect_cvf function must return 0
        !           385: @@ -158,23 +160,22 @@
        !           386:    - [...]:
        !           387:        All other interface functions are "caught" FAT driver functions, i.e.
        !           388:        are executed by the FAT driver *instead* of the original FAT driver
        !           389: -      functions. NULL means use the original FAT driver functions instead.
        !           390: +      functions. If you want to use the original FAT driver functions,
        !           391: +      hang then in here (please no longer use NULL for this purpose).
        !           392:        If you really want "no action", write a function that does nothing and 
        !           393: -      hang it in instead.
        !           394: +      hang it in instead. Consider the meaning of NULL undefined. 
        !           395:    - cvf_zero_cluster:
        !           396:        The cvf_zero_cluster function is called when the fat driver wants to
        !           397:        zero out a (new) cluster. This is important for directories (mkdir).
        !           398:        If it is NULL, the FAT driver defaults to overwriting the whole
        !           399:        cluster with zeros. Note that clusternr is absolute, not relative
        !           400: -      to the provided inode.
        !           401: +      to the provided inode. Note that since kernel 2.3.99, this function is
        !           402: +      only called when a *directory* cluster is handled.
        !           403:  
        !           404:  Notes:
        !           405: -  1. The cvf_bmap function should be ignored. It really should never
        !           406: +     The cvf_bmap function should be ignored. It really should never
        !           407:       get called from somewhere. I recommend redirecting it to a panic
        !           408:       or fatal error message so bugs show up immediately.
        !           409: -  2. The cvf_writepage function is ignored. This is because the fat
        !           410: -     driver doesn't support it. This might change in future. I recommend
        !           411: -     setting it to NULL (i.e use default).
        !           412:  
        !           413:  int register_cvf_format(struct cvf_format*cvf_format);
        !           414:    If you have just set up a variable containing the above structure,

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.