lkml.org 
[lkml]   [2003]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Large-FAT32-Filesystem Bug
    On Fri Dec 05, 2003 at 10:52:31AM +0100, Torsten Scheck wrote:
    > Dear friends:
    >
    > I already sent a message to the VFAT maintainer, but I decided
    > to additionally bother this list with a warning. This way some
    > readers might avoid data loss.
    >
    >
    > I found a critical FAT32 bug when I tried to store data onto an
    > internal IDE 160 GB and onto an external USB2/FW-250 GB hard
    > disk.

    Does this help?

    -Erik

    --
    Erik B. Andersen http://codepoet-consulting.com/
    --This message was written using 73% post-consumer electrons--


    diff -urN linux-2.4.21.rc4/fs/fat/dir.c linux-2.4.20/fs/fat/dir.c
    --- linux-2.4.21.rc4/fs/fat/dir.c 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/fs/fat/dir.c 2003-05-24 01:25:01.000000000 -0600
    @@ -198,8 +198,8 @@
    int uni_xlate = MSDOS_SB(sb)->options.unicode_xlate;
    int utf8 = MSDOS_SB(sb)->options.utf8;
    unsigned short opt_shortname = MSDOS_SB(sb)->options.shortname;
    - int ino, chl, i, j, last_u, res = 0;
    - loff_t cpos = 0;
    + int chl, i, j, last_u, res = 0;
    + loff_t ino, cpos = 0;

    while(1) {
    if (fat_get_entry(inode,&cpos,&bh,&de,&ino) == -1)
    @@ -362,14 +362,14 @@
    unsigned char long_slots;
    wchar_t *unicode = NULL;
    char c, work[8], bufname[56], *ptname = bufname;
    - unsigned long lpos, dummy, *furrfu = &lpos;
    + loff_t lpos, dummy, *furrfu = &lpos;
    int uni_xlate = MSDOS_SB(sb)->options.unicode_xlate;
    int isvfat = MSDOS_SB(sb)->options.isvfat;
    int utf8 = MSDOS_SB(sb)->options.utf8;
    int nocase = MSDOS_SB(sb)->options.nocase;
    unsigned short opt_shortname = MSDOS_SB(sb)->options.shortname;
    - int ino, inum, chi, chl, i, i2, j, last, last_u, dotoffset = 0;
    - loff_t cpos;
    + int chi, chl, i, i2, j, last, last_u, dotoffset = 0;
    + loff_t ino, inum, cpos;

    cpos = filp->f_pos;
    /* Fake . and .. for the root directory. */
    @@ -693,7 +693,8 @@
    loff_t pos;
    struct buffer_head *bh;
    struct msdos_dir_entry *de;
    - int ino,result = 0;
    + int result = 0;
    + loff_t ino;

    pos = 0;
    bh = NULL;
    @@ -717,7 +718,7 @@
    /* This assumes that size of cluster is above the 32*slots */

    int fat_add_entries(struct inode *dir,int slots, struct buffer_head **bh,
    - struct msdos_dir_entry **de, int *ino)
    + struct msdos_dir_entry **de, loff_t *ino)
    {
    struct super_block *sb = dir->i_sb;
    loff_t offset, curr;
    diff -urN linux-2.4.21.rc4/fs/fat/inode.c linux-2.4.20/fs/fat/inode.c
    --- linux-2.4.21.rc4/fs/fat/inode.c 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/fs/fat/inode.c 2003-05-24 02:29:05.000000000 -0600
    @@ -83,14 +83,14 @@
    }
    }

    -static inline unsigned long fat_hash(struct super_block *sb, int i_pos)
    +static inline unsigned long fat_hash(struct super_block *sb, loff_t i_pos)
    {
    - unsigned long tmp = (unsigned long)i_pos | (unsigned long) sb;
    + loff_t tmp = (loff_t)i_pos | (unsigned long) sb;
    tmp = tmp + (tmp >> FAT_HASH_BITS) + (tmp >> FAT_HASH_BITS * 2);
    return tmp & FAT_HASH_MASK;
    }

    -void fat_attach(struct inode *inode, int i_pos)
    +void fat_attach(struct inode *inode, loff_t i_pos)
    {
    spin_lock(&fat_inode_lock);
    MSDOS_I(inode)->i_location = i_pos;
    @@ -108,7 +108,7 @@
    spin_unlock(&fat_inode_lock);
    }

    -struct inode *fat_iget(struct super_block *sb, int i_pos)
    +struct inode *fat_iget(struct super_block *sb, loff_t i_pos)
    {
    struct list_head *p = fat_inode_hashtable + fat_hash(sb, i_pos);
    struct list_head *walk;
    @@ -133,7 +133,7 @@
    static void fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de);

    struct inode *fat_build_inode(struct super_block *sb,
    - struct msdos_dir_entry *de, int ino, int *res)
    + struct msdos_dir_entry *de, loff_t ino, int *res)
    {
    struct inode *inode;
    *res = 0;
    @@ -552,8 +552,8 @@
    struct fat_boot_sector *b;
    struct msdos_sb_info *sbi = MSDOS_SB(sb);
    char *p;
    - int logical_sector_size, hard_blksize, fat_clusters = 0;
    - unsigned int total_sectors, rootdir_sectors;
    + long logical_sector_size, hard_blksize, fat_clusters = 0;
    + long total_sectors, rootdir_sectors;
    int fat32, debug, error, fat, cp;
    struct fat_mount_options opts;
    char buf[50];
    @@ -613,7 +613,7 @@
    CF_LE_W(get_unaligned((unsigned short *) &b->sector_size));
    if (!logical_sector_size
    || (logical_sector_size & (logical_sector_size - 1))) {
    - printk("FAT: bogus logical sector size %d\n",
    + printk("FAT: bogus logical sector size %ld\n",
    logical_sector_size);
    brelse(bh);
    goto out_invalid;
    @@ -629,7 +629,7 @@

    if (logical_sector_size < hard_blksize) {
    printk("FAT: logical sector size too small for device"
    - " (logical sector size = %d)\n", logical_sector_size);
    + " (logical sector size = %ld)\n", logical_sector_size);
    brelse(bh);
    goto out_invalid;
    }
    @@ -739,14 +739,14 @@
    opts.conversion,opts.fs_uid,opts.fs_gid,opts.fs_umask,
    MSDOS_CAN_BMAP(sbi) ? ",bmap" : "");
    printk("[me=0x%x,cs=%d,#f=%d,fs=%d,fl=%ld,ds=%ld,de=%d,data=%ld,"
    - "se=%u,ts=%u,ls=%d,rc=%ld,fc=%u]\n",
    + "se=%u,ts=%u,ls=%ld,rc=%ld,fc=%u]\n",
    b->media, sbi->cluster_size, sbi->fats,
    sbi->fat_start, sbi->fat_length, sbi->dir_start,
    sbi->dir_entries, sbi->data_start,
    CF_LE_W(get_unaligned((unsigned short *)&b->sectors)),
    CF_LE_L(b->total_sect), logical_sector_size,
    sbi->root_cluster, sbi->free_clusters);
    - printk ("hard sector size = %d\n", hard_blksize);
    + printk ("hard sector size = %ld\n", hard_blksize);
    }
    if (i < 0)
    if (sbi->clusters + 2 > fat_clusters)
    @@ -971,7 +971,7 @@
    struct super_block *sb = inode->i_sb;
    struct buffer_head *bh;
    struct msdos_dir_entry *raw_entry;
    - unsigned int i_pos;
    + loff_t i_pos;

    retry:
    i_pos = MSDOS_I(inode)->i_location;
    @@ -980,7 +980,7 @@
    }
    lock_kernel();
    if (!(bh = fat_bread(sb, i_pos >> MSDOS_SB(sb)->dir_per_block_bits))) {
    - printk("dev = %s, ino = %d\n", kdevname(inode->i_dev), i_pos);
    + printk("dev = %s, ino = %lld\n", kdevname(inode->i_dev), (unsigned long long)i_pos);
    fat_fs_panic(sb, "msdos_write_inode: unable to read i-node block");
    unlock_kernel();
    return;
    diff -urN linux-2.4.21.rc4/fs/fat/misc.c linux-2.4.20/fs/fat/misc.c
    --- linux-2.4.21.rc4/fs/fat/misc.c 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/fs/fat/misc.c 2003-05-24 02:25:19.000000000 -0600
    @@ -316,11 +316,11 @@
    */

    int fat__get_entry(struct inode *dir, loff_t *pos,struct buffer_head **bh,
    - struct msdos_dir_entry **de, int *ino)
    + struct msdos_dir_entry **de, loff_t *ino)
    {
    struct super_block *sb = dir->i_sb;
    struct msdos_sb_info *sbi = MSDOS_SB(sb);
    - int sector, offset;
    + long long sector, offset;

    while (1) {
    offset = *pos;
    @@ -336,7 +336,7 @@
    return -1; /* beyond EOF */
    *pos += sizeof(struct msdos_dir_entry);
    if (!(*bh = fat_bread(sb, sector))) {
    - printk("Directory sread (sector 0x%x) failed\n",sector);
    + printk("Directory sread (sector 0x%llx) failed\n",sector);
    continue;
    }
    PRINTK (("get_entry apres sread\n"));
    @@ -400,8 +400,8 @@
    (*number)++; \
    }

    -static int raw_scan_sector(struct super_block *sb,int sector,const char *name,
    - int *number,int *ino,struct buffer_head **res_bh,
    +static int raw_scan_sector(struct super_block *sb,long long sector,
    + const char *name, int *number,loff_t *ino,struct buffer_head **res_bh,
    struct msdos_dir_entry **res_de)
    {
    struct buffer_head *bh;
    @@ -448,7 +448,7 @@
    * requested entry is found or the end of the directory is reached.
    */

    -static int raw_scan_root(struct super_block *sb,const char *name,int *number,int *ino,
    +static int raw_scan_root(struct super_block *sb,const char *name,int *number,loff_t *ino,
    struct buffer_head **res_bh,struct msdos_dir_entry **res_de)
    {
    int count,cluster;
    @@ -470,7 +470,7 @@
    */

    static int raw_scan_nonroot(struct super_block *sb,int start,const char *name,
    - int *number,int *ino,struct buffer_head **res_bh,struct msdos_dir_entry
    + int *number,loff_t *ino,struct buffer_head **res_bh,struct msdos_dir_entry
    **res_de)
    {
    int count,cluster;
    @@ -506,7 +506,7 @@
    */

    static int raw_scan(struct super_block *sb, int start, const char *name,
    - int *number, int *ino, struct buffer_head **res_bh,
    + int *number, loff_t *ino, struct buffer_head **res_bh,
    struct msdos_dir_entry **res_de)
    {
    if (start)
    @@ -543,7 +543,7 @@
    */

    int fat_scan(struct inode *dir,const char *name,struct buffer_head **res_bh,
    - struct msdos_dir_entry **res_de,int *ino)
    + struct msdos_dir_entry **res_de,loff_t *ino)
    {
    int res;

    diff -urN linux-2.4.21.rc4/fs/msdos/namei.c linux-2.4.20/fs/msdos/namei.c
    --- linux-2.4.21.rc4/fs/msdos/namei.c 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/fs/msdos/namei.c 2003-05-24 01:25:01.000000000 -0600
    @@ -128,7 +128,7 @@

    /***** Locates a directory entry. Uses unformatted name. */
    static int msdos_find(struct inode *dir,const char *name,int len,
    - struct buffer_head **bh,struct msdos_dir_entry **de,int *ino)
    + struct buffer_head **bh,struct msdos_dir_entry **de,loff_t *ino)
    {
    int res;
    char dotsOK;
    @@ -214,7 +214,8 @@
    struct inode *inode = NULL;
    struct msdos_dir_entry *de;
    struct buffer_head *bh = NULL;
    - int ino,res;
    + int res;
    + loff_t ino;

    PRINTK (("msdos_lookup\n"));

    @@ -243,7 +244,7 @@
    static int msdos_add_entry(struct inode *dir, const char *name,
    struct buffer_head **bh,
    struct msdos_dir_entry **de,
    - int *ino,
    + loff_t *ino,
    int is_dir, int is_hid)
    {
    struct super_block *sb = dir->i_sb;
    @@ -279,7 +280,8 @@
    struct buffer_head *bh;
    struct msdos_dir_entry *de;
    struct inode *inode;
    - int ino,res,is_hid;
    + int res,is_hid;
    + loff_t ino;
    char msdos_name[MSDOS_NAME];

    res = msdos_format_name(dentry->d_name.name,dentry->d_name.len,
    @@ -311,7 +313,8 @@
    {
    struct super_block *sb = dir->i_sb;
    struct inode *inode = dentry->d_inode;
    - int res,ino;
    + int res;
    + loff_t ino;
    struct buffer_head *bh;
    struct msdos_dir_entry *de;

    @@ -352,7 +355,7 @@
    struct inode *inode;
    int res,is_hid;
    char msdos_name[MSDOS_NAME];
    - int ino;
    + loff_t ino;

    res = msdos_format_name(dentry->d_name.name,dentry->d_name.len,
    msdos_name, &MSDOS_SB(sb)->options);
    @@ -412,7 +415,8 @@
    {
    struct super_block *sb = dir->i_sb;
    struct inode *inode = dentry->d_inode;
    - int res,ino;
    + int res;
    + loff_t ino;
    struct buffer_head *bh;
    struct msdos_dir_entry *de;

    @@ -439,13 +443,13 @@
    struct dentry *old_dentry,
    struct inode *new_dir,char *new_name, struct dentry *new_dentry,
    struct buffer_head *old_bh,
    - struct msdos_dir_entry *old_de, int old_ino, int is_hid)
    + struct msdos_dir_entry *old_de, loff_t old_ino, int is_hid)
    {
    struct super_block *sb = old_dir->i_sb;
    struct buffer_head *new_bh=NULL,*dotdot_bh=NULL;
    struct msdos_dir_entry *new_de,*dotdot_de;
    struct inode *old_inode,*new_inode;
    - int new_ino,dotdot_ino;
    + loff_t new_ino,dotdot_ino;
    int error;
    int is_dir;

    @@ -542,7 +546,8 @@
    struct super_block *sb = old_dir->i_sb;
    struct buffer_head *old_bh;
    struct msdos_dir_entry *old_de;
    - int old_ino, error;
    + int error;
    + loff_t old_ino;
    int is_hid,old_hid; /* if new file and old file are hidden */
    char old_msdos_name[MSDOS_NAME], new_msdos_name[MSDOS_NAME];

    @@ -565,7 +570,7 @@

    error = do_msdos_rename(old_dir, old_msdos_name, old_dentry,
    new_dir, new_msdos_name, new_dentry,
    - old_bh, old_de, (ino_t)old_ino, is_hid);
    + old_bh, old_de, old_ino, is_hid);
    fat_brelse(sb, old_bh);

    rename_done:
    diff -urN linux-2.4.21.rc4/fs/vfat/namei.c linux-2.4.20/fs/vfat/namei.c
    --- linux-2.4.21.rc4/fs/vfat/namei.c 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/fs/vfat/namei.c 2003-05-24 01:25:01.000000000 -0600
    @@ -408,7 +408,8 @@
    {
    struct msdos_dir_entry *de;
    struct buffer_head *bh = NULL;
    - int ino,res;
    + int res;
    + loff_t ino;

    res=fat_scan(dir,name,&bh,&de,&ino);
    fat_brelse(dir->i_sb, bh);
    @@ -891,7 +892,7 @@
    int res, len;
    struct msdos_dir_entry *dummy_de;
    struct buffer_head *dummy_bh;
    - int dummy_ino;
    + loff_t dummy_ino;
    loff_t dummy;

    dir_slots = (struct msdos_dir_slot *)
    @@ -1052,7 +1053,8 @@
    {
    struct super_block *sb = dir->i_sb;
    loff_t offset;
    - int i,ino;
    + int i;
    + loff_t ino;

    /* remove the shortname */
    dir->i_mtime = CURRENT_TIME;
    @@ -1170,7 +1172,7 @@
    struct super_block *sb = old_dir->i_sb;
    struct buffer_head *old_bh,*new_bh,*dotdot_bh;
    struct msdos_dir_entry *old_de,*new_de,*dotdot_de;
    - int dotdot_ino;
    + loff_t dotdot_ino;
    struct inode *old_inode, *new_inode;
    int res, is_dir;
    struct vfat_slot_info old_sinfo,sinfo;
    diff -urN linux-2.4.21.rc4/include/linux/msdos_fs.h linux-2.4.20/include/linux/msdos_fs.h
    --- linux-2.4.21.rc4/include/linux/msdos_fs.h 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/include/linux/msdos_fs.h 2003-05-24 01:25:01.000000000 -0600
    @@ -180,7 +180,7 @@
    int total_slots; /* total slots (long and short) */
    loff_t longname_offset; /* dir offset for longname start */
    loff_t shortname_offset; /* dir offset for shortname start */
    - int ino; /* ino for the file */
    + loff_t ino; /* ino for the file */
    };

    /* Determine whether this FS has kB-aligned data. */
    @@ -264,7 +264,7 @@
    unsigned int cmd, unsigned long arg);
    extern int fat_dir_empty(struct inode *dir);
    extern int fat_add_entries(struct inode *dir, int slots, struct buffer_head **bh,
    - struct msdos_dir_entry **de, int *ino);
    + struct msdos_dir_entry **de, loff_t *ino);
    extern int fat_new_dir(struct inode *dir, struct inode *parent, int is_vfat);

    /* fat/file.c */
    @@ -280,11 +280,11 @@

    /* fat/inode.c */
    extern void fat_hash_init(void);
    -extern void fat_attach(struct inode *inode, int i_pos);
    +extern void fat_attach(struct inode *inode, loff_t i_pos);
    extern void fat_detach(struct inode *inode);
    -extern struct inode *fat_iget(struct super_block *sb, int i_pos);
    +extern struct inode *fat_iget(struct super_block *sb, loff_t i_pos);
    extern struct inode *fat_build_inode(struct super_block *sb,
    - struct msdos_dir_entry *de, int ino, int *res);
    + struct msdos_dir_entry *de, loff_t ino, int *res);
    extern void fat_delete_inode(struct inode *inode);
    extern void fat_clear_inode(struct inode *inode);
    extern void fat_put_super(struct super_block *sb);
    @@ -307,10 +307,10 @@
    extern void fat_date_unix2dos(int unix_date, unsigned short *time,
    unsigned short *date);
    extern int fat__get_entry(struct inode *dir, loff_t *pos, struct buffer_head **bh,
    - struct msdos_dir_entry **de, int *ino);
    + struct msdos_dir_entry **de, loff_t *ino);
    static __inline__ int fat_get_entry(struct inode *dir, loff_t *pos,
    struct buffer_head **bh,
    - struct msdos_dir_entry **de, int *ino)
    + struct msdos_dir_entry **de, loff_t *ino)
    {
    /* Fast stuff first */
    if (*bh && *de &&
    @@ -325,7 +325,7 @@
    extern int fat_subdirs(struct inode *dir);
    extern int fat_scan(struct inode *dir, const char *name,
    struct buffer_head **res_bh,
    - struct msdos_dir_entry **res_de, int *ino);
    + struct msdos_dir_entry **res_de, loff_t *ino);

    /* msdos/namei.c - these are for Umsdos */
    extern void msdos_put_super(struct super_block *sb);
    diff -urN linux-2.4.21.rc4/include/linux/msdos_fs_i.h linux-2.4.20/include/linux/msdos_fs_i.h
    --- linux-2.4.21.rc4/include/linux/msdos_fs_i.h 2003-05-24 02:31:40.000000000 -0600
    +++ linux-2.4.20/include/linux/msdos_fs_i.h 2003-05-24 01:25:01.000000000 -0600
    @@ -11,7 +11,7 @@
    int i_logstart; /* logical first cluster */
    int i_attrs; /* unused attribute bits */
    int i_ctime_ms; /* unused change time in milliseconds */
    - int i_location; /* on-disk position of directory entry or 0 */
    + loff_t i_location; /* on-disk position of directory entry or 0 */
    struct inode *i_fat_inode; /* struct inode of this one */
    struct list_head i_fat_hash; /* hash by i_location */
    };
    --- orig/fs/buffer.c 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/fs/buffer.c 2003-11-19 12:16:51.000000000 -0700
    @@ -1903,7 +1903,7 @@
    * We may have to extend the file.
    */

    -int cont_prepare_write(struct page *page, unsigned offset, unsigned to, get_block_t *get_block, unsigned long *bytes)
    +int cont_prepare_write(struct page *page, unsigned offset, unsigned to, get_block_t *get_block, loff_t *bytes)
    {
    struct address_space *mapping = page->mapping;
    struct inode *inode = mapping->host;
    --- orig/fs/fat/file.c 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/fs/fat/file.c 2003-11-19 12:16:51.000000000 -0700
    @@ -62,7 +62,7 @@
    }
    if (!create)
    return 0;
    - if (iblock << sb->s_blocksize_bits != MSDOS_I(inode)->mmu_private) {
    + if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) {
    BUG();
    return -EIO;
    }
    --- orig/fs/fat/inode.c 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/fs/fat/inode.c 2003-11-19 12:16:51.000000000 -0700
    @@ -406,7 +406,7 @@
    }
    inode->i_blksize = 1 << sbi->cluster_bits;
    inode->i_blocks = ((inode->i_size + inode->i_blksize - 1)
    - & ~(inode->i_blksize - 1)) >> 9;
    + & ~((loff_t)inode->i_blksize - 1)) >> 9;
    MSDOS_I(inode)->i_logstart = 0;
    MSDOS_I(inode)->mmu_private = inode->i_size;

    @@ -647,6 +647,7 @@
    fat32 = 1;
    sbi->fat_length = CF_LE_L(b->fat32_length);
    sbi->root_cluster = CF_LE_L(b->root_cluster);
    + sb->s_maxbytes = 0xffffffff;

    sbi->fsinfo_sector = CF_LE_W(b->info_sector);
    /* MC - if info_sector is 0, don't multiply by 0 */
    @@ -955,7 +956,7 @@
    /* this is as close to the truth as we can get ... */
    inode->i_blksize = 1 << sbi->cluster_bits;
    inode->i_blocks = ((inode->i_size + inode->i_blksize - 1)
    - & ~(inode->i_blksize - 1)) >> 9;
    + & ~((loff_t)inode->i_blksize - 1)) >> 9;
    inode->i_mtime = inode->i_atime =
    date_dos2unix(CF_LE_W(de->time),CF_LE_W(de->date));
    inode->i_ctime =
    --- orig/include/linux/adfs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/include/linux/adfs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    @@ -11,7 +11,7 @@
    * adfs file system inode data in memory
    */
    struct adfs_inode_info {
    - unsigned long mmu_private;
    + loff_t mmu_private;
    unsigned long parent_id; /* object id of parent */
    __u32 loadaddr; /* RISC OS load address */
    __u32 execaddr; /* RISC OS exec address */
    --- orig/include/linux/affs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/include/linux/affs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    @@ -36,7 +36,7 @@
    struct affs_ext_key *i_ac; /* associative cache of extended blocks */
    u32 i_ext_last; /* last accessed extended block */
    struct buffer_head *i_ext_bh; /* bh of last extended block */
    - unsigned long mmu_private;
    + loff_t mmu_private;
    u32 i_protect; /* unused attribute bits */
    u32 i_lastalloc; /* last allocated block */
    int i_pa_cnt; /* number of preallocated blocks */
    --- orig/include/linux/fs.h 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/include/linux/fs.h 2003-11-19 12:16:51.000000000 -0700
    @@ -1466,7 +1466,7 @@
    extern int block_read_full_page(struct page*, get_block_t*);
    extern int block_prepare_write(struct page*, unsigned, unsigned, get_block_t*);
    extern int cont_prepare_write(struct page*, unsigned, unsigned, get_block_t*,
    - unsigned long *);
    + loff_t *);
    extern int generic_cont_expand(struct inode *inode, loff_t size) ;
    extern int block_commit_write(struct page *page, unsigned from, unsigned to);
    extern int block_sync_page(struct page *);
    --- orig/include/linux/hfs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/include/linux/hfs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    @@ -19,7 +19,7 @@
    struct hfs_inode_info {
    int magic; /* A magic number */

    - unsigned long mmu_private;
    + loff_t mmu_private;
    struct hfs_cat_entry *entry;

    /* For a regular or header file */
    --- orig/include/linux/hpfs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/include/linux/hpfs_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    @@ -2,7 +2,7 @@
    #define _HPFS_FS_I

    struct hpfs_inode_info {
    - unsigned long mmu_private;
    + loff_t mmu_private;
    ino_t i_parent_dir; /* (directories) gives fnode of parent dir */
    unsigned i_dno; /* (directories) root dnode */
    unsigned i_dpos; /* (directories) temp for readdir */
    --- orig/include/linux/msdos_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    +++ linux-2.4.22/include/linux/msdos_fs_i.h 2003-11-19 12:16:51.000000000 -0700
    @@ -6,7 +6,7 @@
    */

    struct msdos_inode_info {
    - unsigned long mmu_private;
    + loff_t mmu_private;
    int i_start; /* first cluster or 0 */
    int i_logstart; /* logical first cluster */
    int i_attrs; /* unused attribute bits */
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:59    [W:0.056 / U:0.340 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site