Skip to contentSkip to conversation

FUSE: nfsd with direct_io fix

PATCH New Miklos Szeredi 1 participant 1 message Apr 24, 2005 FUSE filesystem core

lore
Share & tools
lore

Miklos Szeredi

author maintainer
#0 lore raw

PATCH 1/1 FUSE: nfsd with direct_io fix

This patch fixes an Oops which happens when a filesystem mounted with the "direct_io" mount option is exported through NFS. The problem is that nfsd passes a kernel buffer with the "set_fs(KERNEL_DS)" method to read and write, but get_user_pages() won't work on such a buffer. The current fix is "don't do that then". Long term solution will be to implement nfs serving in userspace. Bug spotted by David Shaw.

fs/fuse/file.c +4 -0
diff -rup linux-2.6.12-rc2-mm3/fs/fuse/file.c linux-fuse/fs/fuse/file.c
@@ -409,6 +409,10 @@ static int fuse_get_user_pages(struct fu
 	unsigned offset = user_addr & ~PAGE_MASK;
 	int npages;
 
+	/* This doesn't work with nfsd */
+	if (!current->mm)
+		return -EPERM;
+
 	nbytes = min(nbytes, (unsigned) FUSE_MAX_PAGES_PER_REQ << PAGE_SHIFT);
 	npages = (nbytes + offset + PAGE_SIZE - 1) >> PAGE_SHIFT;
 	npages = min(npages, FUSE_MAX_PAGES_PER_REQ);