aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ceph')
-rw-r--r--fs/ceph/file.c11
-rw-r--r--fs/ceph/locks.c2
-rw-r--r--fs/ceph/mds_client.c8
3 files changed, 6 insertions, 15 deletions
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 656e16907430..16c989d3e23c 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -866,16 +866,7 @@ static loff_t ceph_llseek(struct file *file, loff_t offset, int whence)
866 break; 866 break;
867 } 867 }
868 868
869 if (offset < 0 || offset > inode->i_sb->s_maxbytes) { 869 offset = vfs_setpos(file, offset, inode->i_sb->s_maxbytes);
870 offset = -EINVAL;
871 goto out;
872 }
873
874 /* Special lock needed here? */
875 if (offset != file->f_pos) {
876 file->f_pos = offset;
877 file->f_version = 0;
878 }
879 870
880out: 871out:
881 mutex_unlock(&inode->i_mutex); 872 mutex_unlock(&inode->i_mutex);
diff --git a/fs/ceph/locks.c b/fs/ceph/locks.c
index ebbf680378e2..690f73f42425 100644
--- a/fs/ceph/locks.c
+++ b/fs/ceph/locks.c
@@ -192,7 +192,7 @@ void ceph_count_locks(struct inode *inode, int *fcntl_count, int *flock_count)
192 192
193/** 193/**
194 * Encode the flock and fcntl locks for the given inode into the ceph_filelock 194 * Encode the flock and fcntl locks for the given inode into the ceph_filelock
195 * array. Must be called with lock_flocks() already held. 195 * array. Must be called with inode->i_lock already held.
196 * If we encounter more of a specific lock type than expected, return -ENOSPC. 196 * If we encounter more of a specific lock type than expected, return -ENOSPC.
197 */ 197 */
198int ceph_encode_locks_to_buffer(struct inode *inode, 198int ceph_encode_locks_to_buffer(struct inode *inode,
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 4d2920304be8..74fd2898b2ab 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -2481,20 +2481,20 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap,
2481 struct ceph_filelock *flocks; 2481 struct ceph_filelock *flocks;
2482 2482
2483encode_again: 2483encode_again:
2484 lock_flocks(); 2484 spin_lock(&inode->i_lock);
2485 ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks); 2485 ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks);
2486 unlock_flocks(); 2486 spin_unlock(&inode->i_lock);
2487 flocks = kmalloc((num_fcntl_locks+num_flock_locks) * 2487 flocks = kmalloc((num_fcntl_locks+num_flock_locks) *
2488 sizeof(struct ceph_filelock), GFP_NOFS); 2488 sizeof(struct ceph_filelock), GFP_NOFS);
2489 if (!flocks) { 2489 if (!flocks) {
2490 err = -ENOMEM; 2490 err = -ENOMEM;
2491 goto out_free; 2491 goto out_free;
2492 } 2492 }
2493 lock_flocks(); 2493 spin_lock(&inode->i_lock);
2494 err = ceph_encode_locks_to_buffer(inode, flocks, 2494 err = ceph_encode_locks_to_buffer(inode, flocks,
2495 num_fcntl_locks, 2495 num_fcntl_locks,
2496 num_flock_locks); 2496 num_flock_locks);
2497 unlock_flocks(); 2497 spin_unlock(&inode->i_lock);
2498 if (err) { 2498 if (err) {
2499 kfree(flocks); 2499 kfree(flocks);
2500 if (err == -ENOSPC) 2500 if (err == -ENOSPC)