aboutsummaryrefslogtreecommitdiffstats
path: root/fs/coda/upcall.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/coda/upcall.c')
-rw-r--r--fs/coda/upcall.c34
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
807int coda_downcall(struct venus_comm *vcp, int opcode, union outputArgs *out) 807int 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;