diff options
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/nfs4proc.c | 5 | ||||
-rw-r--r-- | fs/nfs/nfs4state.c | 9 |
2 files changed, 1 insertions, 13 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index 25bab6032dfe..611052bacaff 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -820,12 +820,10 @@ static void nfs4_free_closedata(struct nfs4_closedata *calldata) | |||
820 | { | 820 | { |
821 | struct nfs4_state *state = calldata->state; | 821 | struct nfs4_state *state = calldata->state; |
822 | struct nfs4_state_owner *sp = state->owner; | 822 | struct nfs4_state_owner *sp = state->owner; |
823 | struct nfs_server *server = NFS_SERVER(calldata->inode); | ||
824 | 823 | ||
825 | nfs4_put_open_state(calldata->state); | 824 | nfs4_put_open_state(calldata->state); |
826 | nfs_free_seqid(calldata->arg.seqid); | 825 | nfs_free_seqid(calldata->arg.seqid); |
827 | nfs4_put_state_owner(sp); | 826 | nfs4_put_state_owner(sp); |
828 | up_read(&server->nfs4_state->cl_sem); | ||
829 | kfree(calldata); | 827 | kfree(calldata); |
830 | } | 828 | } |
831 | 829 | ||
@@ -2758,7 +2756,6 @@ static int _nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock | |||
2758 | { | 2756 | { |
2759 | struct inode *inode = state->inode; | 2757 | struct inode *inode = state->inode; |
2760 | struct nfs_server *server = NFS_SERVER(inode); | 2758 | struct nfs_server *server = NFS_SERVER(inode); |
2761 | struct nfs4_client *clp = server->nfs4_state; | ||
2762 | struct nfs_lockargs arg = { | 2759 | struct nfs_lockargs arg = { |
2763 | .fh = NFS_FH(inode), | 2760 | .fh = NFS_FH(inode), |
2764 | .type = nfs4_lck_type(cmd, request), | 2761 | .type = nfs4_lck_type(cmd, request), |
@@ -2778,7 +2775,6 @@ static int _nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock | |||
2778 | struct nfs_locku_opargs luargs; | 2775 | struct nfs_locku_opargs luargs; |
2779 | int status; | 2776 | int status; |
2780 | 2777 | ||
2781 | down_read(&clp->cl_sem); | ||
2782 | status = nfs4_set_lock_state(state, request); | 2778 | status = nfs4_set_lock_state(state, request); |
2783 | if (status != 0) | 2779 | if (status != 0) |
2784 | goto out; | 2780 | goto out; |
@@ -2802,7 +2798,6 @@ static int _nfs4_proc_unlck(struct nfs4_state *state, int cmd, struct file_lock | |||
2802 | out: | 2798 | out: |
2803 | if (status == 0) | 2799 | if (status == 0) |
2804 | do_vfs_lock(request->fl_file, request); | 2800 | do_vfs_lock(request->fl_file, request); |
2805 | up_read(&clp->cl_sem); | ||
2806 | return status; | 2801 | return status; |
2807 | } | 2802 | } |
2808 | 2803 | ||
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 86c08c165ce7..bb3574361958 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -481,17 +481,15 @@ void nfs4_put_open_state(struct nfs4_state *state) | |||
481 | } | 481 | } |
482 | 482 | ||
483 | /* | 483 | /* |
484 | * Beware! Caller must be holding no references to clp->cl_sem! | 484 | * Close the current file. |
485 | */ | 485 | */ |
486 | void nfs4_close_state(struct nfs4_state *state, mode_t mode) | 486 | void nfs4_close_state(struct nfs4_state *state, mode_t mode) |
487 | { | 487 | { |
488 | struct inode *inode = state->inode; | 488 | struct inode *inode = state->inode; |
489 | struct nfs4_state_owner *owner = state->owner; | 489 | struct nfs4_state_owner *owner = state->owner; |
490 | struct nfs4_client *clp = owner->so_client; | ||
491 | int newstate; | 490 | int newstate; |
492 | 491 | ||
493 | atomic_inc(&owner->so_count); | 492 | atomic_inc(&owner->so_count); |
494 | down_read(&clp->cl_sem); | ||
495 | /* Protect against nfs4_find_state() */ | 493 | /* Protect against nfs4_find_state() */ |
496 | spin_lock(&inode->i_lock); | 494 | spin_lock(&inode->i_lock); |
497 | if (mode & FMODE_READ) | 495 | if (mode & FMODE_READ) |
@@ -523,7 +521,6 @@ void nfs4_close_state(struct nfs4_state *state, mode_t mode) | |||
523 | out: | 521 | out: |
524 | nfs4_put_open_state(state); | 522 | nfs4_put_open_state(state); |
525 | nfs4_put_state_owner(owner); | 523 | nfs4_put_state_owner(owner); |
526 | up_read(&clp->cl_sem); | ||
527 | } | 524 | } |
528 | 525 | ||
529 | /* | 526 | /* |
@@ -704,8 +701,6 @@ void nfs_free_seqid(struct nfs_seqid *seqid) | |||
704 | } | 701 | } |
705 | 702 | ||
706 | /* | 703 | /* |
707 | * Called with clp->cl_sem held. | ||
708 | * | ||
709 | * Increment the seqid if the OPEN/OPEN_DOWNGRADE/CLOSE succeeded, or | 704 | * Increment the seqid if the OPEN/OPEN_DOWNGRADE/CLOSE succeeded, or |
710 | * failed with a seqid incrementing error - | 705 | * failed with a seqid incrementing error - |
711 | * see comments nfs_fs.h:seqid_mutating_error() | 706 | * see comments nfs_fs.h:seqid_mutating_error() |
@@ -743,8 +738,6 @@ void nfs_increment_open_seqid(int status, struct nfs_seqid *seqid) | |||
743 | } | 738 | } |
744 | 739 | ||
745 | /* | 740 | /* |
746 | * Called with clp->cl_sem held. | ||
747 | * | ||
748 | * Increment the seqid if the LOCK/LOCKU succeeded, or | 741 | * Increment the seqid if the LOCK/LOCKU succeeded, or |
749 | * failed with a seqid incrementing error - | 742 | * failed with a seqid incrementing error - |
750 | * see comments nfs_fs.h:seqid_mutating_error() | 743 | * see comments nfs_fs.h:seqid_mutating_error() |