VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
b4d0d230ccfb5 (Thomas Gleixner  2019-05-20 19:08:01 +0200  1) // SPDX-License-Identifier: GPL-2.0-or-later
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  2) /* FS-Cache netfs (client) registration
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  3)  *
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  4)  * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved.
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  5)  * Written by David Howells (dhowells@redhat.com)
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  6)  */
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  7) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  8) #define FSCACHE_DEBUG_LEVEL COOKIE
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100  9) #include <linux/module.h>
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 10) #include <linux/slab.h>
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 11) #include "internal.h"
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 12) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 13) /*
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 14)  * register a network filesystem for caching
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 15)  */
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 16) int __fscache_register_netfs(struct fscache_netfs *netfs)
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 17) {
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 18) 	struct fscache_cookie *candidate, *cookie;
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 19) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 20) 	_enter("{%s}", netfs->name);
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 21) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 22) 	/* allocate a cookie for the primary index */
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 23) 	candidate = fscache_alloc_cookie(&fscache_fsdef_index,
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 24) 					 &fscache_fsdef_netfs_def,
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 25) 					 netfs->name, strlen(netfs->name),
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 26) 					 &netfs->version, sizeof(netfs->version),
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 27) 					 netfs, 0);
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 28) 	if (!candidate) {
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 29) 		_leave(" = -ENOMEM");
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 30) 		return -ENOMEM;
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 31) 	}
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 32) 
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 33) 	candidate->flags = 1 << FSCACHE_COOKIE_ENABLED;
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 34) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 35) 	/* check the netfs type is not already present */
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 36) 	cookie = fscache_hash_cookie(candidate);
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 37) 	if (!cookie)
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 38) 		goto already_registered;
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 39) 	if (cookie != candidate) {
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 40) 		trace_fscache_cookie(candidate, fscache_cookie_discard, 1);
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 41) 		fscache_free_cookie(candidate);
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 42) 	}
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 43) 
a18feb55769b7 (David Howells    2018-04-04 13:41:27 +0100 44) 	fscache_cookie_get(cookie->parent, fscache_cookie_get_register_netfs);
b130ed5998e62 (Kinglong Mee     2015-11-04 15:20:24 +0000 45) 	atomic_inc(&cookie->parent->n_children);
86108c2e34a26 (Kinglong Mee     2015-11-04 15:20:15 +0000 46) 
b130ed5998e62 (Kinglong Mee     2015-11-04 15:20:24 +0000 47) 	netfs->primary_index = cookie;
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 48) 
36dfd116edd48 (Fabian Frederick 2014-06-04 16:05:38 -0700 49) 	pr_notice("Netfs '%s' registered for caching\n", netfs->name);
a18feb55769b7 (David Howells    2018-04-04 13:41:27 +0100 50) 	trace_fscache_netfs(netfs);
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 51) 	_leave(" = 0");
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 52) 	return 0;
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 53) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 54) already_registered:
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 55) 	fscache_cookie_put(candidate, fscache_cookie_put_dup_netfs);
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 56) 	_leave(" = -EEXIST");
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 57) 	return -EEXIST;
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 58) }
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 59) EXPORT_SYMBOL(__fscache_register_netfs);
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 60) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 61) /*
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 62)  * unregister a network filesystem from the cache
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 63)  * - all cookies must have been released first
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 64)  */
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 65) void __fscache_unregister_netfs(struct fscache_netfs *netfs)
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 66) {
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 67) 	_enter("{%s.%u}", netfs->name, netfs->version);
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 68) 
402cb8dda949d (David Howells    2018-04-04 13:41:28 +0100 69) 	fscache_relinquish_cookie(netfs->primary_index, NULL, false);
ec0328e46d6e5 (David Howells    2018-04-04 13:41:28 +0100 70) 	pr_notice("Netfs '%s' unregistered from caching\n", netfs->name);
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 71) 
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 72) 	_leave("");
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 73) }
726dd7ff10c21 (David Howells    2009-04-03 16:42:38 +0100 74) EXPORT_SYMBOL(__fscache_unregister_netfs);