summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2010-05-21 17:26:35 +0200
committerAl Viro <viro@zeniv.linux.org.uk>2010-05-22 00:31:29 +0200
commit82f3952c02add60b15eea9151d4d99b6b82066c6 (patch)
tree31a30c82aaea4472df7f40d98619cb3ae8016816
parentget rid of home-grown mutex in cris eeprom.c (diff)
downloadlinux-82f3952c02add60b15eea9151d4d99b6b82066c6.tar.xz
linux-82f3952c02add60b15eea9151d4d99b6b82066c6.zip
fix handling of offsets in cris eeprom.c, get rid of fake on-stack files
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--arch/cris/arch-v10/drivers/eeprom.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/arch/cris/arch-v10/drivers/eeprom.c b/arch/cris/arch-v10/drivers/eeprom.c
index b04b22ba00d1..c3405507a3d1 100644
--- a/arch/cris/arch-v10/drivers/eeprom.c
+++ b/arch/cris/arch-v10/drivers/eeprom.c
@@ -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)
{
- struct file f;
-
- f.f_pos = addr;
- return eeprom_read(&f, buf, count, &addr);
+ return eeprom_read(NULL, buf, count, &addr);
}
@@ -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)
{
int read=0;
- unsigned long p = file->f_pos;
+ unsigned long p = *off;
unsigned char page;
@@ -495,7 +492,7 @@ static ssize_t eeprom_read(struct file * file, char * buf, size_t count, loff_t
if(read > 0)
{
- file->f_pos += read;
+ *off += read;
}
mutex_unlock(&eeprom.lock);
@@ -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)
{
- struct file f;
-
- f.f_pos = addr;
-
- return eeprom_write(&f, buf, count, &addr);
+ return eeprom_write(NULL, buf, count, &addr);
}
@@ -534,7 +527,7 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count,
{
restart = 0;
written = 0;
- p = file->f_pos;
+ p = *off;
while( (written < count) && (p < eeprom.size))
@@ -660,10 +653,10 @@ static ssize_t eeprom_write(struct file * file, const char * buf, size_t count,
} /* for */
mutex_unlock(&eeprom.lock);
- if (written == 0 && file->f_pos >= eeprom.size){
+ if (written == 0 && p >= eeprom.size){
return -ENOSPC;
}
- file->f_pos += written;
+ *off = p;
return written;
}