📄 1011.udf.patch
字号:
- tmp = udf_tgetblk(dir->i_sb, block);- if (tmp && !buffer_uptodate(tmp) && !buffer_locked(tmp))- bha[num++] = tmp;- else- brelse(tmp);- }- if (num)- {- ll_rw_block(READA, num, bha);- for (i=0; i<num; i++)- brelse(bha[i]);- }- }- while ( nf_pos < size ) { filp->f_pos = nf_pos + 1;@@ -228,7 +237,9 @@ } else {- iblock = udf_get_lb_pblock(dir->i_sb, lelb_to_cpu(cfi.icb.extLocation), 0);+ lb_addr tloc = lelb_to_cpu(cfi.icb.extLocation);++ iblock = udf_get_lb_pblock(dir->i_sb, tloc, 0); flen = udf_get_filename(dir->i_sb, nameptr, fname, lfi); dt_type = DT_UNKNOWN; }diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linuxmips-2.4.30.ref/fs/udf/directory.c linuxmips-2.4.30/fs/udf/directory.c--- linuxmips-2.4.30.ref/fs/udf/directory.c 2002-06-26 15:36:22.000000000 -0700+++ linuxmips-2.4.30/fs/udf/directory.c 2007-05-10 10:49:29.000000000 -0700@@ -17,6 +17,7 @@ */ #include "udfdecl.h"+#include "udf_i.h" #include <linux/fs.h> #include <linux/string.h>@@ -84,6 +85,24 @@ fibh->soffset = fibh->eoffset; + if (UDF_I_ALLOCTYPE(dir) == ICBTAG_FLAG_AD_IN_ICB)+ {+ fi = udf_get_fileident(UDF_I_DATA(dir) -+ (UDF_I_EFE(dir) ?+ sizeof(struct extendedFileEntry) :+ sizeof(struct fileEntry)),+ dir->i_sb->s_blocksize, &(fibh->eoffset));++ if (!fi)+ return NULL;++ *nf_pos += ((fibh->eoffset - fibh->soffset) >> 2);++ memcpy((uint8_t *)cfi, (uint8_t *)fi, sizeof(struct fileIdentDesc));++ return fi;+ }+ if (fibh->eoffset == dir->i_sb->s_blocksize) { int lextoffset = *extoffset;@@ -275,53 +294,43 @@ } short_ad *-udf_get_fileshortad(void * buffer, int maxoffset, int *offset, int inc)+udf_get_fileshortad(uint8_t *ptr, int maxoffset, int *offset, int inc) {- short_ad * sa;- uint8_t * ptr;+ short_ad *sa; - if ( (!buffer) || (!offset) )+ if ( (!ptr) || (!offset) ) { printk(KERN_ERR "udf: udf_get_fileshortad() invalidparms\n"); return NULL; } - ptr = (uint8_t *)buffer;-- if ( (*offset > 0) && (*offset < maxoffset) )- ptr += *offset;- else+ if ( (*offset < 0) || ((*offset + sizeof(short_ad)) > maxoffset) ) return NULL;-- if ((sa = (short_ad *)ptr)->extLength == 0)+ else if ((sa = (short_ad *)ptr)->extLength == 0) return NULL;- else if (inc)- (*offset) += sizeof(short_ad);++ if (inc)+ *offset += sizeof(short_ad); return sa; } long_ad *-udf_get_filelongad(void * buffer, int maxoffset, int * offset, int inc)+udf_get_filelongad(uint8_t *ptr, int maxoffset, int * offset, int inc) {- long_ad * la;- uint8_t * ptr;+ long_ad *la; - if ( (!buffer) || !(offset) ) + if ( (!ptr) || (!offset) ) { printk(KERN_ERR "udf: udf_get_filelongad() invalidparms\n"); return NULL; } - ptr = (uint8_t *)buffer;-- if ( (*offset > 0) && (*offset < maxoffset) )- ptr += *offset;- else+ if ( (*offset < 0) || ((*offset + sizeof(long_ad)) > maxoffset) ) return NULL;-- if ((la = (long_ad *)ptr)->extLength == 0)+ else if ((la = (long_ad *)ptr)->extLength == 0) return NULL;- else if (inc)- (*offset) += sizeof(long_ad);++ if (inc)+ *offset += sizeof(long_ad); return la; }diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linuxmips-2.4.30.ref/fs/udf/ecma_167.h linuxmips-2.4.30/fs/udf/ecma_167.h--- linuxmips-2.4.30.ref/fs/udf/ecma_167.h 2002-06-26 15:36:22.000000000 -0700+++ linuxmips-2.4.30/fs/udf/ecma_167.h 2007-05-10 10:49:29.000000000 -0700@@ -4,7 +4,7 @@ * This file is based on ECMA-167 3rd edition (June 1997) * http://www.ecma.ch *- * Copyright (c) 2001-2002 Ben Fennema <bfennema@falcon.csc.calpoly.edu>+ * Copyright (c) 2001-2003 Ben Fennema <bfennema@falcon.csc.calpoly.edu> * All rights reserved. * * Redistribution and use in source and binary forms, with or without@@ -606,7 +606,7 @@ #define FE_RECORD_FMT_CRLF 0x0A #define FE_RECORD_FMT_LFCR 0x0B -#define Record Display Attributes (ECMA 167r3 4/14.9.8) */+/* Record Display Attributes (ECMA 167r3 4/14.9.8) */ #define FE_RECORD_DISPLAY_ATTR_UNDEF 0x00 #define FE_RECORD_DISPLAY_ATTR_1 0x01 #define FE_RECORD_DISPLAY_ATTR_2 0x02diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linuxmips-2.4.30.ref/fs/udf/file.c linuxmips-2.4.30/fs/udf/file.c--- linuxmips-2.4.30.ref/fs/udf/file.c 2004-08-14 11:39:02.000000000 -0700+++ linuxmips-2.4.30/fs/udf/file.c 2007-05-10 10:49:29.000000000 -0700@@ -39,6 +39,7 @@ #include <linux/errno.h> #include <linux/locks.h> #include <linux/smp_lock.h>+#include <linux/pagemap.h> #include "udf_i.h" #include "udf_sb.h"@@ -46,64 +47,36 @@ static int udf_adinicb_readpage(struct file *file, struct page * page) { struct inode *inode = page->mapping->host;-- struct buffer_head *bh;- int block; char *kaddr;- int err = 0; if (!PageLocked(page)) PAGE_BUG(page); kaddr = kmap(page); memset(kaddr, 0, PAGE_CACHE_SIZE);- block = udf_get_lb_pblock(inode->i_sb, UDF_I_LOCATION(inode), 0);- bh = sb_bread(inode->i_sb, block);- if (!bh)- {- SetPageError(page);- err = -EIO;- goto out;- }- memcpy(kaddr, bh->b_data + udf_ext0_offset(inode), inode->i_size);- brelse(bh);+ memcpy(kaddr, UDF_I_DATA(inode) + UDF_I_LENEATTR(inode), inode->i_size); flush_dcache_page(page); SetPageUptodate(page);-out: kunmap(page);- UnlockPage(page);- return err;+ unlock_page(page);+ return 0; } static int udf_adinicb_writepage(struct page *page) { struct inode *inode = page->mapping->host;-- struct buffer_head *bh;- int block; char *kaddr;- int err = 0; if (!PageLocked(page)) PAGE_BUG(page); kaddr = kmap(page);- block = udf_get_lb_pblock(inode->i_sb, UDF_I_LOCATION(inode), 0);- bh = sb_bread(inode->i_sb, block);- if (!bh)- {- SetPageError(page);- err = -EIO;- goto out;- }- memcpy(bh->b_data + udf_ext0_offset(inode), kaddr, inode->i_size);- mark_buffer_dirty(bh);- brelse(bh);+ memcpy(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode), kaddr, inode->i_size);+ mark_inode_dirty(inode); SetPageUptodate(page);-out: kunmap(page);- UnlockPage(page);- return err;+ unlock_page(page);+ return 0; } static int udf_adinicb_prepare_write(struct file *file, struct page *page, unsigned offset, unsigned to)@@ -115,39 +88,25 @@ static int udf_adinicb_commit_write(struct file *file, struct page *page, unsigned offset, unsigned to) { struct inode *inode = page->mapping->host;-- struct buffer_head *bh;- int block; char *kaddr = page_address(page);- int err = 0; - block = udf_get_lb_pblock(inode->i_sb, UDF_I_LOCATION(inode), 0);- bh = sb_bread(inode->i_sb, block);- if (!bh)- {- SetPageError(page);- err = -EIO;- goto out;- }- memcpy(bh->b_data + udf_file_entry_alloc_offset(inode) + offset,+ memcpy(UDF_I_DATA(inode) + UDF_I_LENEATTR(inode) + offset, kaddr + offset, to - offset);- mark_buffer_dirty(bh);- brelse(bh);+ mark_inode_dirty(inode); SetPageUptodate(page);-out: kunmap(page); /* only one page here */ if (to > inode->i_size) inode->i_size = to;- return err;+ return 0; } struct address_space_operations udf_adinicb_aops = {- readpage: udf_adinicb_readpage,- writepage: udf_adinicb_writepage,- sync_page: block_sync_page,- prepare_write: udf_adinicb_prepare_write,- commit_write: udf_adinicb_commit_write,+ .readpage = udf_adinicb_readpage,+ .writepage = udf_adinicb_writepage,+ .sync_page = block_sync_page,+ .prepare_write = udf_adinicb_prepare_write,+ .commit_write = udf_adinicb_commit_write, }; static ssize_t udf_file_write(struct file * file, const char * buf,@@ -155,8 +114,7 @@ { ssize_t retval; struct inode *inode = file->f_dentry->d_inode;- int err;- loff_t pos;+ int err, pos; if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB) {@@ -165,11 +123,8 @@ else pos = *ppos; - if (pos < 0 || pos + count < pos)- return 0;-- if (inode->i_sb->s_blocksize - udf_file_entry_alloc_offset(inode) <- pos + count)+ if (inode->i_sb->s_blocksize < (udf_file_entry_alloc_offset(inode) ++ pos + count)) { udf_expand_file_adinicb(inode, pos + count, &err); if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB)@@ -235,9 +190,6 @@ unsigned long arg) { int result = -EINVAL;- struct buffer_head *bh = NULL;- long_ad eaicb;- uint8_t *ea = NULL; if ( permission(inode, MAY_READ) != 0 ) {@@ -252,7 +204,6 @@ return -EINVAL; } - /* first, do ioctls that don't need to udf_read */ switch (cmd) { case UDF_GETVOLIDENT:@@ -270,50 +221,16 @@ return result; }- }-- /* ok, we need to read the inode */- bh = udf_tread(inode->i_sb,- udf_get_lb_pblock(inode->i_sb, UDF_I_LOCATION(inode), 0));-- if (!bh)- {- udf_debug("bread failed (inode=%ld)\n", inode->i_ino);- return -EIO;- }-- if (UDF_I_EXTENDED_FE(inode) == 0)- {- struct fileEntry *fe;-- fe = (struct fileEntry *)bh->b_data;- eaicb = lela_to_cpu(fe->extendedAttrICB);- if (UDF_I_LENEATTR(inode))- ea = fe->extendedAttr;- }- else- {- struct extendedFileEntry *efe;-- efe = (struct extendedFileEntry *)bh->b_data;- eaicb = lela_to_cpu(efe->extendedAttrICB);- if (UDF_I_LENEATTR(inode))- ea = efe->extendedAttr;- }-- switch (cmd) - { case UDF_GETEASIZE: result = put_user(UDF_I_LENEATTR(inode), (int *)arg); break; case UDF_GETEABLOCK:- result = copy_to_user((char *)arg, ea,+ result = copy_to_user((char *)arg, UDF_I_DATA(inode), UDF_I_LENEATTR(inode)) ? -EFAULT : 0; break; } - udf_release_data(bh); return result; } @@ -361,15 +278,15 @@ } struct file_operations udf_file_operations = {- read: generic_file_read,- ioctl: udf_ioctl,- open: udf_open_file,- mmap: generic_file_mmap,- write: udf_file_write,- release: udf_release_file,- fsync: udf_fsync_file,+ .read = generic_file_read,+ .ioctl = udf_ioctl,+ .open = udf_open_file,+ .mmap = generic_file_mmap,+ .write = udf_file_write,+ .release = udf_release_file,+ .fsync = udf_fsync_file, }; struct inode_operations udf_file_inode_operations = {- truncate: udf_truncate,+ .truncate = udf_truncate, };diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linuxmips-2.4.30.ref/fs/udf/fsync.c linuxmips-2.4.30/fs/udf/fsync.c--- linuxmips-2.4.30.ref/fs/udf/fsync.c 2002-06-26 15:36:22.000000000 -0700+++ linuxmips-2.4.30/fs/udf/fsync.c 2007-05-10 10:49:29.000000000 -0700@@ -45,7 +45,9 @@ int err; err = fsync_inode_buffers(inode);+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,15) err |= fsync_inode_data_buffers(inode);+#endif if (!(inode->i_state & I_DIRTY)) return err; if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))diff -Naur --exclude=CVS --exclude='*.o' --exclude='*.a' --exclude='*.so' --exclude='*.elf' --exclude=System.map --exclude=Makefile.d --exclude='*log' --exclude='*log2' --exclude='*~' --exclude='.*~' --exclude='.#*' --exclude='*.bak' --exclude='*.orig' --exclude='*.rej' --exclude='core.[0-9]*' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=.depend --exclude='.*.o.flags' --exclude='*.gz' --exclude=vmlinux --exclude=vmlinux.bin --exclude=yamon-02.06-SIGMADESIGNS-01_el.bin linuxmips-2.4.30.ref/fs/udf/ialloc.c linuxmips-2.4.30/fs/udf/ialloc.c--- linuxmips-2.4.30.ref/fs/udf/ialloc.c 2002-06-26 15:36:22.000000000 -0700+++ linuxmips-2.4.30/fs/udf/ialloc.c 2007-05-10 10:49:29.000000000 -0700@@ -28,6 +28,7 @@ #include <linux/locks.h> #include <linux/quotaops.h> #include <linux/udf_fs.h>+#include <linux/slab.h> #include "udf_i.h" #include "udf_sb.h"@@ -44,7 +45,12 @@ * Note: we must free any quota before locking the superblock, * as writing the quota to disk may need the lock as well. */+#ifndef OLD_QUOTA
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -