提交 82f3952c 编写于 作者: A Al Viro

fix handling of offsets in cris eeprom.c, get rid of fake on-stack files

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 4f0447b8
...@@ -437,10 +437,7 @@ static loff_t eeprom_lseek(struct file * file, loff_t offset, int orig) ...@@ -437,10 +437,7 @@ static loff_t eeprom_lseek(struct file * file, loff_t offset, int orig)
static int eeprom_read_buf(loff_t addr, char * buf, int count) static int eeprom_read_buf(loff_t addr, char * buf, int count)
{ {
struct file f; return eeprom_read(NULL, buf, count, &addr);
f.f_pos = addr;
return eeprom_read(&f, buf, count, &addr);
} }
...@@ -450,7 +447,7 @@ static int eeprom_read_buf(loff_t addr, char * buf, int count) ...@@ -450,7 +447,7 @@ static int eeprom_read_buf(loff_t addr, char * buf, int count)
static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t *off) static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t *off)
{ {
int read=0; int read=0;
unsigned long p = file->f_pos; unsigned long p = *off;
unsigned char page; unsigned char page;
...@@ -495,7 +492,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t ...@@ -495,7 +492,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t
if(read > 0) if(read > 0)
{ {
file->f_pos += read; *off += read;
} }
mutex_unlock(&eeprom.lock); mutex_unlock(&eeprom.lock);
...@@ -506,11 +503,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t ...@@ -506,11 +503,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t
static int eeprom_write_buf(loff_t addr, const char * buf, int count) static int eeprom_write_buf(loff_t addr, const char * buf, int count)
{ {
struct file f; return eeprom_write(NULL, buf, count, &addr);
f.f_pos = addr;
return eeprom_write(&f, buf, count, &addr);
} }
...@@ -534,7 +527,7 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count, ...@@ -534,7 +527,7 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count,
{ {
restart = 0; restart = 0;
written = 0; written = 0;
p = file->f_pos; p = *off;
while( (written < count) && (p < eeprom.size)) while( (written < count) && (p < eeprom.size))
...@@ -660,10 +653,10 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count, ...@@ -660,10 +653,10 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count,
} /* for */ } /* for */
mutex_unlock(&eeprom.lock); mutex_unlock(&eeprom.lock);
if (written == 0 && file->f_pos >= eeprom.size){ if (written == 0 && p >= eeprom.size){
return -ENOSPC; return -ENOSPC;
} }
file->f_pos += written; *off = p;
return written; return written;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册