// For Example : using filp_open save a log file to linux file system(or vm file system)
/*
"O_APPEND" : auto add information to the file last pos.
"get_fs()" : Get the old file permissions of the system current.
"set_fs(get_ds())" : Set linux kernal mode permissions for file opration(read,write).
"set_fs(old_fs)" : To restore the old permissions.
*/
#include <linux/types.h>
#include <linux/fs.h>
static int mtd_flash_rom_log(const char *fn, size_t len, const u_char *buff)
{
struct file *fp;
mm_segment_t old_fs;
fp = filp_open(fn, O_CREAT | O_RDWR | O_APPEND, S_IRWXU);
if(IS_ERR(fp)) {
printk("Open %s file failed\n", fn);
return -1;
}
if((!fp->f_op) || (!fp->f_op->write))
{
printk("%s file is not valid\n", fn);
return -2;
} else {
old_fs = get_fs();
set_fs(get_ds());
fp->f_op->write(fp, buff, len, &fp->f_pos);
set_fs(old_fs);
}
filp_close(fp, NULL);
return 0;
}