diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-03 09:10:19 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-03 09:10:19 -0700 |
commit | 790eac5640abf7a57fa3a644386df330e18c11b0 (patch) | |
tree | 08de20bde44f59e51b91ff473a71047c2957e8c9 /drivers/char | |
parent | 0b0585c3e192967cb2ef0ac0816eb8a8c8d99840 (diff) | |
parent | 48bde8d3620f5f3c6ae9ff599eb404055ae51664 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull second set of VFS changes from Al Viro:
"Assorted f_pos race fixes, making do_splice_direct() safe to call with
i_mutex on parent, O_TMPFILE support, Jeff's locks.c series,
->d_hash/->d_compare calling conventions changes from Linus, misc
stuff all over the place."
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (63 commits)
Document ->tmpfile()
ext4: ->tmpfile() support
vfs: export lseek_execute() to modules
lseek_execute() doesn't need an inode passed to it
block_dev: switch to fixed_size_llseek()
cpqphp_sysfs: switch to fixed_size_llseek()
tile-srom: switch to fixed_size_llseek()
proc_powerpc: switch to fixed_size_llseek()
ubi/cdev: switch to fixed_size_llseek()
pci/proc: switch to fixed_size_llseek()
isapnp: switch to fixed_size_llseek()
lpfc: switch to fixed_size_llseek()
locks: give the blocked_hash its own spinlock
locks: add a new "lm_owner_key" lock operation
locks: turn the blocked_list into a hashtable
locks: convert fl_link to a hlist_node
locks: avoid taking global lock if possible when waking up blocked waiters
locks: protect most of the file_lock handling with i_lock
locks: encapsulate the fl_link list handling
locks: make "added" in __posix_lock_file a bool
...
Diffstat (limited to 'drivers/char')
-rw-r--r-- | drivers/char/ps3flash.c | 28 | ||||
-rw-r--r-- | drivers/char/tile-srom.c | 28 |
2 files changed, 5 insertions, 51 deletions
diff --git a/drivers/char/ps3flash.c b/drivers/char/ps3flash.c index 8cafa9ccd43..0b311fa277e 100644 --- a/drivers/char/ps3flash.c +++ b/drivers/char/ps3flash.c @@ -98,32 +98,8 @@ static int ps3flash_fetch(struct ps3_storage_device *dev, u64 start_sector) static loff_t ps3flash_llseek(struct file *file, loff_t offset, int origin) { struct ps3_storage_device *dev = ps3flash_dev; - loff_t res; - - mutex_lock(&file->f_mapping->host->i_mutex); - switch (origin) { - case 0: - break; - case 1: - offset += file->f_pos; - break; - case 2: - offset += dev->regions[dev->region_idx].size*dev->blk_size; - break; - default: - offset = -1; - } - if (offset < 0) { - res = -EINVAL; - goto out; - } - - file->f_pos = offset; - res = file->f_pos; - -out: - mutex_unlock(&file->f_mapping->host->i_mutex); - return res; + return generic_file_llseek_size(file, offset, origin, MAX_LFS_FILESIZE, + dev->regions[dev->region_idx].size*dev->blk_size); } static ssize_t ps3flash_read(char __user *userbuf, void *kernelbuf, diff --git a/drivers/char/tile-srom.c b/drivers/char/tile-srom.c index 2e2036e940f..7faeb1cde97 100644 --- a/drivers/char/tile-srom.c +++ b/drivers/char/tile-srom.c @@ -273,32 +273,10 @@ static ssize_t srom_write(struct file *filp, const char __user *buf, } /* Provide our own implementation so we can use srom->total_size. */ -loff_t srom_llseek(struct file *filp, loff_t offset, int origin) +loff_t srom_llseek(struct file *file, loff_t offset, int origin) { - struct srom_dev *srom = filp->private_data; - - if (mutex_lock_interruptible(&srom->lock)) - return -ERESTARTSYS; - - switch (origin) { - case SEEK_END: - offset += srom->total_size; - break; - case SEEK_CUR: - offset += filp->f_pos; - break; - } - - if (offset < 0 || offset > srom->total_size) { - offset = -EINVAL; - } else { - filp->f_pos = offset; - filp->f_version = 0; - } - - mutex_unlock(&srom->lock); - - return offset; + struct srom_dev *srom = file->private_data; + return fixed_size_llseek(file, offset, origin, srom->total_size); } static ssize_t total_show(struct device *dev, |