|
|
1.1 ! root 1: diff -u -r -N linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/emd.c linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/emd.c ! 2: --- linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/emd.c Sun Jan 4 15:01:56 1998 ! 3: +++ linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/emd.c Sun Jan 4 15:15:23 1998 ! 4: @@ -34,6 +34,7 @@ ! 5: int ret; ! 6: int old_fs = get_fs(); ! 7: set_fs (KERNEL_DS); ! 8: + MSDOS_I(inode)->i_binary=2; ! 9: ret = fat_file_read(inode,filp,buf,count); ! 10: set_fs (old_fs); ! 11: return ret; ! 12: @@ -50,6 +51,7 @@ ! 13: int ret; ! 14: int old_fs = get_fs(); ! 15: set_fs (KERNEL_DS); ! 16: + MSDOS_I(inode)->i_binary=2; ! 17: ret = fat_file_write(inode,filp,buf,count); ! 18: set_fs (old_fs); ! 19: return ret; ! 20: diff -u -r -N linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/file.c linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/file.c ! 21: --- linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/file.c Sun Jan 4 15:01:56 1998 ! 22: +++ linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/file.c Sun Jan 4 15:18:16 1998 ! 23: @@ -131,3 +131,38 @@ ! 24: NULL, /* smap */ ! 25: }; ! 26: ! 27: +/* For other with larger and unaligned file system with readpage */ ! 28: +struct file_operations uvfat_file_operations_readpage = { ! 29: + NULL, /* lseek - default */ ! 30: + UVFAT_file_read, /* read */ ! 31: + UVFAT_file_write, /* write */ ! 32: + NULL, /* readdir - bad */ ! 33: + NULL, /* select - default */ ! 34: + NULL, /* ioctl - default */ ! 35: + generic_file_mmap, /* mmap */ ! 36: + NULL, /* no special open is needed */ ! 37: + NULL, /* release */ ! 38: + file_fsync /* fsync */ ! 39: +}; ! 40: + ! 41: +struct inode_operations uvfat_file_inode_operations_readpage = { ! 42: + &uvfat_file_operations_readpage, /* default file operations */ ! 43: + NULL, /* create */ ! 44: + NULL, /* lookup */ ! 45: + NULL, /* link */ ! 46: + NULL, /* unlink */ ! 47: + NULL, /* symlink */ ! 48: + NULL, /* mkdir */ ! 49: + NULL, /* rmdir */ ! 50: + NULL, /* mknod */ ! 51: + NULL, /* rename */ ! 52: + NULL, /* readlink */ ! 53: + NULL, /* follow_link */ ! 54: + fat_readpage, /* readpage */ ! 55: + NULL, /* writepage */ ! 56: + NULL, /* bmap */ ! 57: + UVFAT_truncate,/* truncate */ ! 58: + NULL, /* permission */ ! 59: + NULL, /* smap */ ! 60: +}; ! 61: + ! 62: diff -u -r -N linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/inode.c linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/inode.c ! 63: --- linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/inode.c Sun Jan 4 15:01:56 1998 ! 64: +++ linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/inode.c Sun Jan 4 15:22:33 1998 ! 65: @@ -165,11 +165,20 @@ ! 66: if (!uvfat_isinit(inode)){ ! 67: inode->u.uvfat_i.i_emd_dir = 0; ! 68: if (S_ISREG(inode->i_mode)){ ! 69: + if (MSDOS_SB(inode->i_sb)->cvf_format){ ! 70: + if (MSDOS_SB(inode->i_sb)->cvf_format->flags ! 71: + &CVF_USE_READPAGE){ ! 72: + inode->i_op = &uvfat_file_inode_operations_readpage; ! 73: + }else{ ! 74: + inode->i_op = &uvfat_file_inode_operations_no_bmap; ! 75: + } ! 76: + }else{ ! 77: if (inode->i_op->bmap != NULL){ ! 78: inode->i_op = &uvfat_file_inode_operations; ! 79: }else{ ! 80: inode->i_op = &uvfat_file_inode_operations_no_bmap; ! 81: } ! 82: + } ! 83: }else if (S_ISDIR(inode->i_mode)){ ! 84: if (dir != NULL){ ! 85: uvfat_setup_dir_inode(inode); ! 86: diff -u -r -N linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/ioctl.c linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/ioctl.c ! 87: --- linux-2.0.33-cyrix-patched-uvfat/fs/uvfat/ioctl.c Sun Jan 4 15:01:56 1998 ! 88: +++ linux-2.0.33-cyrix-patched-uvfat-test/fs/uvfat/ioctl.c Sun Jan 4 15:24:41 1998 ! 89: @@ -62,6 +62,21 @@ ! 90: { ! 91: int ret = -EPERM; ! 92: int err; ! 93: + ! 94: + /* forward non-uvfat ioctls - this hopefully doesn't cause conflicts */ ! 95: + if(cmd!=UVFAT_GETVERSION ! 96: + &&cmd!=UVFAT_READDIR_DOS ! 97: + &&cmd!=UVFAT_READDIR_EMD ! 98: + &&cmd!=UVFAT_INIT_EMD ! 99: + &&cmd!=UVFAT_CREAT_EMD ! 100: + &&cmd!=UVFAT_RENAME_DOS ! 101: + &&cmd!=UVFAT_UNLINK_EMD ! 102: + &&cmd!=UVFAT_UNLINK_DOS ! 103: + &&cmd!=UVFAT_RMDIR_DOS ! 104: + &&cmd!=UVFAT_STAT_DOS ! 105: + &&cmd!=UVFAT_DOS_SETUP) ! 106: + return fat_dir_ioctl(dir,filp,cmd,data); ! 107: + ! 108: /* #Specification: ioctl / acces ! 109: Only root (effective id) is allowed to do IOCTL on directory ! 110: in UVFAT. EPERM is returned for other user.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.