linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] CacheFiles: Handle ENOSPC on create/mkdir better
@ 2006-08-31 12:42 David Howells
  2006-08-31 12:47 ` David Howells
  0 siblings, 1 reply; 2+ messages in thread
From: David Howells @ 2006-08-31 12:42 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel


Handle ENOSPC on create/mkdir calls to the backing filesystem better.  Rather
than returning it to FS-Cache or FS-Cache returning it to the netfs, it is
converted into ENOBUFS.

This can be reproduced by setting up a very small cache, for example with:

	dd if=/dev/zero of=/root/fakedisc bs=10240 count=1024
	mke2fs -j /root/fakedisc 
	tune2fs -o user_xattr /root/fakedisc 
	mount -o loop /root/fakedisc /var/fscache/
	cachefilesd

And then running a "find" over a few thousand NFS files on an NFS share that's
mounted with "-o fsc".  This will eventually run the cache out of free inodes,
and ENOSPC will be returned by Ext3, yielding a lot of these messages in the
kernel log:

	FS-Cache: error from cache: -28

David
---

 fs/cachefiles/cf-namei.c |    7 ++++++-
 fs/fscache/cookie.c      |    5 ++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/fs/cachefiles/cf-namei.c b/fs/cachefiles/cf-namei.c
index 20db88a..202b89b 100644
--- a/fs/cachefiles/cf-namei.c
+++ b/fs/cachefiles/cf-namei.c
@@ -501,11 +501,13 @@ lookup_again:
 	return 0;
 
 create_error:
+	_debug("create error %d", ret);
 	if (ret == -EIO)
 		cachefiles_io_error(cache, "create/mkdir failed");
 	goto error;
 
 check_error:
+	_debug("check error %d", ret);
 	write_lock(&cache->active_lock);
 	rb_erase(&object->active_node, &cache->active_nodes);
 	write_unlock(&cache->active_lock);
@@ -538,7 +540,10 @@ error_out:
 	current->fsuid = fsuid;
 	current->fsgid = fsgid;
 
-	_leave(" = ret");
+	if (ret == -ENOSPC)
+		ret = -ENOBUFS;
+
+	_leave(" = error %d", -ret);
 	return ret;
 }
 
diff --git a/fs/fscache/cookie.c b/fs/fscache/cookie.c
index 9a6ac8b..8528eb7 100644
--- a/fs/fscache/cookie.c
+++ b/fs/fscache/cookie.c
@@ -750,7 +750,10 @@ no_cache:
 	ret = -ENOMEDIUM;
 	goto error_cleanup;
 error:
-	printk(KERN_ERR "FS-Cache: error from cache: %d\n", ret);
+	if (ret != -ENOBUFS) {
+		printk(KERN_ERR "FS-Cache: error from cache: %d\n", ret);
+		ret = -ENOBUFS;
+	}
 error_cleanup:
 	if (cookie) {
 		up_write(&cookie->sem);

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] CacheFiles: Handle ENOSPC on create/mkdir better
  2006-08-31 12:42 [PATCH] CacheFiles: Handle ENOSPC on create/mkdir better David Howells
@ 2006-08-31 12:47 ` David Howells
  0 siblings, 0 replies; 2+ messages in thread
From: David Howells @ 2006-08-31 12:47 UTC (permalink / raw)
  To: David Howells; +Cc: akpm, linux-kernel

David Howells <dhowells@redhat.com> wrote:

> Handle ENOSPC on create/mkdir calls to the backing filesystem better.  Rather
> than returning it to FS-Cache or FS-Cache returning it to the netfs, it is
> converted into ENOBUFS.

Signed-Off-By: David Howells <dhowells@redhat.com>

of course.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2006-08-31 12:47 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-08-31 12:42 [PATCH] CacheFiles: Handle ENOSPC on create/mkdir better David Howells
2006-08-31 12:47 ` David Howells

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).