diff options
Diffstat (limited to 'fs/coda/upcall.c')
-rw-r--r-- | fs/coda/upcall.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/fs/coda/upcall.c b/fs/coda/upcall.c index 1175a1722411..cf1e662681a5 100644 --- a/fs/coda/upcall.c +++ b/fs/coda/upcall.c | |||
@@ -804,12 +804,44 @@ exit: | |||
804 | * | 804 | * |
805 | * CODA_REPLACE -- replace one CodaFid with another throughout the name cache */ | 805 | * CODA_REPLACE -- replace one CodaFid with another throughout the name cache */ |
806 | 806 | ||
807 | int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out) | 807 | int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out, |
808 | size_t nbytes) | ||
808 | { | 809 | { |
809 | struct inode *inode = NULL; | 810 | struct inode *inode = NULL; |
810 | struct CodaFid *fid = NULL, *newfid; | 811 | struct CodaFid *fid = NULL, *newfid; |
811 | struct super_block *sb; | 812 | struct super_block *sb; |
812 | 813 | ||
814 | /* | ||
815 | * Make sure we have received enough data from the cache | ||
816 | * manager to populate the necessary fields in the buffer | ||
817 | */ | ||
818 | switch (opcode) { | ||
819 | case CODA_PURGEUSER: | ||
820 | if (nbytes < sizeof(struct coda_purgeuser_out)) | ||
821 | return -EINVAL; | ||
822 | break; | ||
823 | |||
824 | case CODA_ZAPDIR: | ||
825 | if (nbytes < sizeof(struct coda_zapdir_out)) | ||
826 | return -EINVAL; | ||
827 | break; | ||
828 | |||
829 | case CODA_ZAPFILE: | ||
830 | if (nbytes < sizeof(struct coda_zapfile_out)) | ||
831 | return -EINVAL; | ||
832 | break; | ||
833 | |||
834 | case CODA_PURGEFID: | ||
835 | if (nbytes < sizeof(struct coda_purgefid_out)) | ||
836 | return -EINVAL; | ||
837 | break; | ||
838 | |||
839 | case CODA_REPLACE: | ||
840 | if (nbytes < sizeof(struct coda_replace_out)) | ||
841 | return -EINVAL; | ||
842 | break; | ||
843 | } | ||
844 | |||
813 | /* Handle invalidation requests. */ | 845 | /* Handle invalidation requests. */ |
814 | mutex_lock(&vcp->vc_mutex); | 846 | mutex_lock(&vcp->vc_mutex); |
815 | sb = vcp->vc_sb; | 847 | sb = vcp->vc_sb; |