首页 > 代码库 > yaffs2 源码错误 too few arguments to function 'yaffs_flush_file' 2014.10.11

yaffs2 源码错误 too few arguments to function 'yaffs_flush_file' 2014.10.11

来自:http://blog.csdn.net/cinmyheart/article/details/38747505

yaffs2 源码错误 

错误:



 

2014-08-06

Charles Mannin

版本的 yaffs 有误!


yaffs_flush_file的定义:

source file :yaffs_guts.c

 

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. int yaffs_flush_file(struct yaffs_obj *in,  
  2.              int update_time,  
  3.              int data_sync,  
  4.              int discard_cache)  
  5. {  
  6.     if (!in->dirty)  
  7.         return YAFFS_OK;  
  8.   
  9.     yaffs_flush_file_cache(in, discard_cache);  
  10.   
  11.     if (data_sync)  
  12.         return YAFFS_OK;  
  13.   
  14.     if (update_time)  
  15.         yaffs_load_current_time(in, 0, 0);  
  16.   
  17.     return (yaffs_update_oh(in, NULL, 0, 0, 0, NULL) >= 0) ?  
  18.                 YAFFS_OK : YAFFS_FAIL;  
  19. }  


yafss_vfs.c

 

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))  
  2. static int yaffs_file_flush(struct file *file, fl_owner_t id)  
  3. #else  
  4. static int yaffs_file_flush(struct file *file)  
  5. #endif  
  6. {  
  7.     struct yaffs_obj *obj = yaffs_dentry_to_obj(file->f_dentry);  
  8.   
  9.   
  10.     struct yaffs_dev *dev = obj->my_dev;  
  11.   
  12.   
  13.     yaffs_trace(YAFFS_TRACE_OS,  
  14.         "yaffs_file_flush object %d (%s)",  
  15.         obj->obj_id,  
  16.         obj->dirty ? "dirty" : "clean");  
  17.   
  18.   
  19.     yaffs_gross_lock(dev);  
  20.   
  21.   
  22.     yaffs_flush_file(obj, 1, 0);  
  23.   
  24.   
  25.     yaffs_gross_unlock(dev);  
  26.   
  27.   
  28.     return 0;  
  29. }  

看过yaffs_flush_file的定义之后,发现这里应该输入四个参数,但是这里只有三个参数传入,编译器报错

同样的

 

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39))  
  2. static int yaffs_sync_object(struct file *file, loff_t start, loff_t end, int datasync)  
  3. #elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 34))  
  4. static int yaffs_sync_object(struct file *file, int datasync)  
  5. #else  
  6. static int yaffs_sync_object(struct file *file, struct dentry *dentry,  
  7.                  int datasync)  
  8. #endif  
  9. {  
  10.     struct yaffs_obj *obj;  
  11.     struct yaffs_dev *dev;  
  12. #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 34))  
  13.     struct dentry *dentry = file->f_path.dentry;  
  14. #endif  
  15.   
  16.     obj = yaffs_dentry_to_obj(dentry);  
  17.   
  18.     dev = obj->my_dev;  
  19.   
  20.     yaffs_trace(YAFFS_TRACE_OS | YAFFS_TRACE_SYNC,  
  21.         "yaffs_sync_object");  
  22.     yaffs_gross_lock(dev);  
  23.     yaffs_flush_file(obj, 1, datasync);  
  24.     yaffs_gross_unlock(dev);  
  25.     return 0;  
  26. }  


yaffs_sync_object里面的yaffs_flush_file也只有三个参数传入和定义不符合





 

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    1. void yaffs_flush_whole_cache(struct yaffs_dev *dev, int discard)  
    2. {  
    3.     struct yaffs_obj *obj;  
    4.     int n_caches = dev->param.n_caches;  
    5.     int i;  
    6.   
    7.     /* Find a dirty object in the cache and flush it... 
    8.      * until there are no further dirty objects. 
    9.      */  
    10.     do {  
    11.         obj = NULL;  
    12.         for (i = 0; i < n_caches && !obj; i++) {  
    13.             if (dev->cache[i].object && dev->cache[i].dirty)  
    14.                 obj = dev->cache[i].object;  
    15.         }  
    16.         if (obj)  
    17.             yaffs_flush_file_cache(obj, discard);  
    18.     } while (obj);  
    19.   

yaffs2 源码错误 too few arguments to function 'yaffs_flush_file' 2014.10.11