错误:
2014-08-06 | Charles Mannin |
yaffs_flush_file的定义:
source file :yaffs_guts.c
int yaffs_flush_file(struct yaffs_obj *in, int update_time, int data_sync, int discard_cache) { if (!in->dirty) return YAFFS_OK; yaffs_flush_file_cache(in, discard_cache); if (data_sync) return YAFFS_OK; if (update_time) yaffs_load_current_time(in, 0, 0); return (yaffs_update_oh(in, NULL, 0, 0, 0, NULL) >= 0) ? YAFFS_OK : YAFFS_FAIL; }
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17)) static int yaffs_file_flush(struct file *file, fl_owner_t id) #else static int yaffs_file_flush(struct file *file) #endif { struct yaffs_obj *obj = yaffs_dentry_to_obj(file->f_dentry); struct yaffs_dev *dev = obj->my_dev; yaffs_trace(YAFFS_TRACE_OS, "yaffs_file_flush object %d (%s)", obj->obj_id, obj->dirty ? "dirty" : "clean"); yaffs_gross_lock(dev); yaffs_flush_file(obj, 1, 0); yaffs_gross_unlock(dev); return 0; }看过yaffs_flush_file的定义之后,发现这里应该输入四个参数,但是这里只有三个参数传入,编译器报错
同样的
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 39)) static int yaffs_sync_object(struct file *file, loff_t start, loff_t end, int datasync) #elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 34)) static int yaffs_sync_object(struct file *file, int datasync) #else static int yaffs_sync_object(struct file *file, struct dentry *dentry, int datasync) #endif { struct yaffs_obj *obj; struct yaffs_dev *dev; #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 34)) struct dentry *dentry = file->f_path.dentry; #endif obj = yaffs_dentry_to_obj(dentry); dev = obj->my_dev; yaffs_trace(YAFFS_TRACE_OS | YAFFS_TRACE_SYNC, "yaffs_sync_object"); yaffs_gross_lock(dev); yaffs_flush_file(obj, 1, datasync); yaffs_gross_unlock(dev); return 0; }
void yaffs_flush_whole_cache(struct yaffs_dev *dev, int discard) { struct yaffs_obj *obj; int n_caches = dev->param.n_caches; int i; /* Find a dirty object in the cache and flush it... * until there are no further dirty objects. */ do { obj = NULL; for (i = 0; i < n_caches && !obj; i++) { if (dev->cache[i].object && dev->cache[i].dirty) obj = dev->cache[i].object; } if (obj) yaffs_flush_file_cache(obj, discard); } while (obj); }