* [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE
@ 2021-01-11 5:37 Viresh Kumar
2021-01-11 19:28 ` Linus Torvalds
2021-01-14 12:58 ` kernel test robot
0 siblings, 2 replies; 5+ messages in thread
From: Viresh Kumar @ 2021-01-11 5:37 UTC (permalink / raw)
To: Alexander Viro
Cc: Viresh Kumar, Vincent Guittot, Linus Torvalds, Andrew Morton,
Arnd Bergmann, Christoph Hellwig, linux-fsdevel, linux-kernel
From: Arnd Bergmann <arnd@arndb.de>
The dcookies stuff is used only with OPROFILE and there is no need to
build it if CONFIG_OPROFILE isn't enabled. Build it depending on
CONFIG_OPROFILE instead of CONFIG_PROFILING.
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
[ Viresh: Update the name in #endif part ]
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
fs/Makefile | 2 +-
include/linux/dcookies.h | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/Makefile b/fs/Makefile
index 999d1a23f036..0e85d1ae20da 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -64,7 +64,7 @@ obj-$(CONFIG_SYSFS) += sysfs/
obj-$(CONFIG_CONFIGFS_FS) += configfs/
obj-y += devpts/
-obj-$(CONFIG_PROFILING) += dcookies.o
+obj-$(CONFIG_OPROFILE) += dcookies.o
obj-$(CONFIG_DLM) += dlm/
# Do not add any filesystems before this line
diff --git a/include/linux/dcookies.h b/include/linux/dcookies.h
index ddfdac20cad0..8617c1871398 100644
--- a/include/linux/dcookies.h
+++ b/include/linux/dcookies.h
@@ -11,7 +11,7 @@
#define DCOOKIES_H
-#ifdef CONFIG_PROFILING
+#ifdef CONFIG_OPROFILE
#include <linux/dcache.h>
#include <linux/types.h>
@@ -64,6 +64,6 @@ static inline int get_dcookie(const struct path *path, unsigned long *cookie)
return -ENOSYS;
}
-#endif /* CONFIG_PROFILING */
+#endif /* CONFIG_OPROFILE */
#endif /* DCOOKIES_H */
--
2.25.0.rc1.19.g042ed3e048af
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE
2021-01-11 5:37 [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE Viresh Kumar
@ 2021-01-11 19:28 ` Linus Torvalds
2021-01-12 4:37 ` Viresh Kumar
2021-01-14 12:58 ` kernel test robot
1 sibling, 1 reply; 5+ messages in thread
From: Linus Torvalds @ 2021-01-11 19:28 UTC (permalink / raw)
To: Viresh Kumar
Cc: Alexander Viro, Vincent Guittot, Andrew Morton, Arnd Bergmann,
Christoph Hellwig, linux-fsdevel, Linux Kernel Mailing List
On Sun, Jan 10, 2021 at 10:02 PM Viresh Kumar <viresh.kumar@linaro.org> wrote:
>
> From: Arnd Bergmann <arnd@arndb.de>
>
> The dcookies stuff is used only with OPROFILE and there is no need to
> build it if CONFIG_OPROFILE isn't enabled. Build it depending on
> CONFIG_OPROFILE instead of CONFIG_PROFILING.
Umm. I think we should remove CONFIG_OPROFILE entirely, and then
dcookies as part of it.
We discussed removing CONFIG_OPROFILE for 5.9 (I htink) already - the
oprofile user land tools don't use the kernel OPROFILE support any
more, and haven't in a long time. User land has been converted to the
perf interfaces.
Linus
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE
2021-01-11 19:28 ` Linus Torvalds
@ 2021-01-12 4:37 ` Viresh Kumar
0 siblings, 0 replies; 5+ messages in thread
From: Viresh Kumar @ 2021-01-12 4:37 UTC (permalink / raw)
To: Linus Torvalds
Cc: Alexander Viro, Vincent Guittot, Andrew Morton, Arnd Bergmann,
Christoph Hellwig, linux-fsdevel, Linux Kernel Mailing List
On 11-01-21, 11:28, Linus Torvalds wrote:
> On Sun, Jan 10, 2021 at 10:02 PM Viresh Kumar <viresh.kumar@linaro.org> wrote:
> >
> > From: Arnd Bergmann <arnd@arndb.de>
> >
> > The dcookies stuff is used only with OPROFILE and there is no need to
> > build it if CONFIG_OPROFILE isn't enabled. Build it depending on
> > CONFIG_OPROFILE instead of CONFIG_PROFILING.
>
> Umm. I think we should remove CONFIG_OPROFILE entirely, and then
> dcookies as part of it.
>
> We discussed removing CONFIG_OPROFILE for 5.9 (I htink) already - the
> oprofile user land tools don't use the kernel OPROFILE support any
> more, and haven't in a long time. User land has been converted to the
> perf interfaces.
Right, I followed that discussion but I wasn't sure if this patch will
go in first and then the later ones will follow. And since I couldn't
see a reply from Alexander for it, I thought it is best to resend it
to get merged first.
Okay, I will try to send some patches to get rid of OPROFILE and
dcookies now.
Thanks.
--
viresh
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE
2021-01-11 5:37 [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE Viresh Kumar
@ 2021-01-14 12:58 ` kernel test robot
2021-01-14 12:58 ` kernel test robot
1 sibling, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-01-14 12:58 UTC (permalink / raw)
To: Viresh Kumar, Alexander Viro
Cc: kbuild-all, Viresh Kumar, Vincent Guittot, Andrew Morton,
Linux Memory Management List, Arnd Bergmann, Christoph Hellwig,
linux-fsdevel, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 18801 bytes --]
Hi Viresh,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.11-rc3 next-20210114]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Viresh-Kumar/dcookies-Make-dcookies-depend-on-CONFIG_OPROFILE/20210111-140734
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7c53f6b671f4aba70ff15e1b05148b10d58c2837
config: x86_64-rhel (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/d48f031313d175610c430e9f04c3b6974e3fd3e2
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Viresh-Kumar/dcookies-Make-dcookies-depend-on-CONFIG_OPROFILE/20210111-140734
git checkout d48f031313d175610c430e9f04c3b6974e3fd3e2
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> fs/dcookies.c:117:5: error: redefinition of 'get_dcookie'
117 | int get_dcookie(const struct path *path, unsigned long *cookie)
| ^~~~~~~~~~~
In file included from fs/dcookies.c:26:
include/linux/dcookies.h:62:19: note: previous definition of 'get_dcookie' was here
62 | static inline int get_dcookie(const struct path *path, unsigned long *cookie)
| ^~~~~~~~~~~
>> fs/dcookies.c:316:23: error: redefinition of 'dcookie_register'
316 | struct dcookie_user * dcookie_register(void)
| ^~~~~~~~~~~~~~~~
In file included from fs/dcookies.c:26:
include/linux/dcookies.h:52:37: note: previous definition of 'dcookie_register' was here
52 | static inline struct dcookie_user * dcookie_register(void)
| ^~~~~~~~~~~~~~~~
>> fs/dcookies.c:341:6: error: redefinition of 'dcookie_unregister'
341 | void dcookie_unregister(struct dcookie_user * user)
| ^~~~~~~~~~~~~~~~~~
In file included from fs/dcookies.c:26:
include/linux/dcookies.h:57:20: note: previous definition of 'dcookie_unregister' was here
57 | static inline void dcookie_unregister(struct dcookie_user * user)
| ^~~~~~~~~~~~~~~~~~
vim +/get_dcookie +117 fs/dcookies.c
^1da177e4c3f4152 Linus Torvalds 2005-04-16 112
^1da177e4c3f4152 Linus Torvalds 2005-04-16 113
^1da177e4c3f4152 Linus Torvalds 2005-04-16 114 /* This is the main kernel-side routine that retrieves the cookie
^1da177e4c3f4152 Linus Torvalds 2005-04-16 115 * value for a dentry/vfsmnt pair.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 116 */
71215a75ceddf38b Al Viro 2016-11-20 @117 int get_dcookie(const struct path *path, unsigned long *cookie)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 118 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 119 int err = 0;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 120 struct dcookie_struct * dcs;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 121
353ab6e97b8f209d Ingo Molnar 2006-03-26 122 mutex_lock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 123
^1da177e4c3f4152 Linus Torvalds 2005-04-16 124 if (!is_live()) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 125 err = -EINVAL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 126 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 127 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 128
c2452f32786159ed Nick Piggin 2008-12-01 129 if (path->dentry->d_flags & DCACHE_COOKIE) {
c2452f32786159ed Nick Piggin 2008-12-01 130 dcs = find_dcookie((unsigned long)path->dentry);
c2452f32786159ed Nick Piggin 2008-12-01 131 } else {
448678a0f3cdd015 Jan Blunck 2008-02-14 132 dcs = alloc_dcookie(path);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 133 if (!dcs) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 134 err = -ENOMEM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 135 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 136 }
c2452f32786159ed Nick Piggin 2008-12-01 137 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 138
^1da177e4c3f4152 Linus Torvalds 2005-04-16 139 *cookie = dcookie_value(dcs);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 140
^1da177e4c3f4152 Linus Torvalds 2005-04-16 141 out:
353ab6e97b8f209d Ingo Molnar 2006-03-26 142 mutex_unlock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 143 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 144 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 145
^1da177e4c3f4152 Linus Torvalds 2005-04-16 146
^1da177e4c3f4152 Linus Torvalds 2005-04-16 147 /* And here is where the userspace process can look up the cookie value
^1da177e4c3f4152 Linus Torvalds 2005-04-16 148 * to retrieve the path.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 149 */
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 150 static int do_lookup_dcookie(u64 cookie64, char __user *buf, size_t len)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 151 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 152 unsigned long cookie = (unsigned long)cookie64;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 153 int err = -EINVAL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 154 char * kbuf;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 155 char * path;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 156 size_t pathlen;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 157 struct dcookie_struct * dcs;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 158
^1da177e4c3f4152 Linus Torvalds 2005-04-16 159 /* we could leak path information to users
^1da177e4c3f4152 Linus Torvalds 2005-04-16 160 * without dir read permission without this
^1da177e4c3f4152 Linus Torvalds 2005-04-16 161 */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 162 if (!capable(CAP_SYS_ADMIN))
^1da177e4c3f4152 Linus Torvalds 2005-04-16 163 return -EPERM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 164
353ab6e97b8f209d Ingo Molnar 2006-03-26 165 mutex_lock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 166
^1da177e4c3f4152 Linus Torvalds 2005-04-16 167 if (!is_live()) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 168 err = -EINVAL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 169 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 170 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 171
^1da177e4c3f4152 Linus Torvalds 2005-04-16 172 if (!(dcs = find_dcookie(cookie)))
^1da177e4c3f4152 Linus Torvalds 2005-04-16 173 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 174
^1da177e4c3f4152 Linus Torvalds 2005-04-16 175 err = -ENOMEM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 176 kbuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 177 if (!kbuf)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 178 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 179
^1da177e4c3f4152 Linus Torvalds 2005-04-16 180 /* FIXME: (deleted) ? */
cf28b4863f9ee8f1 Jan Blunck 2008-02-14 181 path = d_path(&dcs->path, kbuf, PAGE_SIZE);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 182
fe47ae7f53e179d2 Robert Richter 2011-05-31 183 mutex_unlock(&dcookie_mutex);
fe47ae7f53e179d2 Robert Richter 2011-05-31 184
^1da177e4c3f4152 Linus Torvalds 2005-04-16 185 if (IS_ERR(path)) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 186 err = PTR_ERR(path);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 187 goto out_free;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 188 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 189
^1da177e4c3f4152 Linus Torvalds 2005-04-16 190 err = -ERANGE;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 191
^1da177e4c3f4152 Linus Torvalds 2005-04-16 192 pathlen = kbuf + PAGE_SIZE - path;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 193 if (pathlen <= len) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 194 err = pathlen;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 195 if (copy_to_user(buf, path, pathlen))
^1da177e4c3f4152 Linus Torvalds 2005-04-16 196 err = -EFAULT;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 197 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 198
^1da177e4c3f4152 Linus Torvalds 2005-04-16 199 out_free:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 200 kfree(kbuf);
fe47ae7f53e179d2 Robert Richter 2011-05-31 201 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 202 out:
353ab6e97b8f209d Ingo Molnar 2006-03-26 203 mutex_unlock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 204 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 205 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 206
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 207 SYSCALL_DEFINE3(lookup_dcookie, u64, cookie64, char __user *, buf, size_t, len)
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 208 {
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 209 return do_lookup_dcookie(cookie64, buf, len);
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 210 }
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 211
d5dc77bfeeab0b03 Al Viro 2013-02-25 212 #ifdef CONFIG_COMPAT
d8d14bd09cddbaf0 Heiko Carstens 2014-01-29 213 COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, compat_size_t, len)
d5dc77bfeeab0b03 Al Viro 2013-02-25 214 {
d5dc77bfeeab0b03 Al Viro 2013-02-25 215 #ifdef __BIG_ENDIAN
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 216 return do_lookup_dcookie(((u64)w0 << 32) | w1, buf, len);
d5dc77bfeeab0b03 Al Viro 2013-02-25 217 #else
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 218 return do_lookup_dcookie(((u64)w1 << 32) | w0, buf, len);
d5dc77bfeeab0b03 Al Viro 2013-02-25 219 #endif
d5dc77bfeeab0b03 Al Viro 2013-02-25 220 }
d5dc77bfeeab0b03 Al Viro 2013-02-25 221 #endif
d5dc77bfeeab0b03 Al Viro 2013-02-25 222
^1da177e4c3f4152 Linus Torvalds 2005-04-16 223 static int dcookie_init(void)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 224 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 225 struct list_head * d;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 226 unsigned int i, hash_bits;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 227 int err = -ENOMEM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 228
^1da177e4c3f4152 Linus Torvalds 2005-04-16 229 dcookie_cache = kmem_cache_create("dcookie_cache",
^1da177e4c3f4152 Linus Torvalds 2005-04-16 230 sizeof(struct dcookie_struct),
20c2df83d25c6a95 Paul Mundt 2007-07-20 231 0, 0, NULL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 232
^1da177e4c3f4152 Linus Torvalds 2005-04-16 233 if (!dcookie_cache)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 234 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 235
^1da177e4c3f4152 Linus Torvalds 2005-04-16 236 dcookie_hashtable = kmalloc(PAGE_SIZE, GFP_KERNEL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 237 if (!dcookie_hashtable)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 238 goto out_kmem;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 239
^1da177e4c3f4152 Linus Torvalds 2005-04-16 240 err = 0;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 241
^1da177e4c3f4152 Linus Torvalds 2005-04-16 242 /*
^1da177e4c3f4152 Linus Torvalds 2005-04-16 243 * Find the power-of-two list-heads that can fit into the allocation..
^1da177e4c3f4152 Linus Torvalds 2005-04-16 244 * We don't guarantee that "sizeof(struct list_head)" is necessarily
^1da177e4c3f4152 Linus Torvalds 2005-04-16 245 * a power-of-two.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 246 */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 247 hash_size = PAGE_SIZE / sizeof(struct list_head);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 248 hash_bits = 0;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 249 do {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 250 hash_bits++;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 251 } while ((hash_size >> hash_bits) != 0);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 252 hash_bits--;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 253
^1da177e4c3f4152 Linus Torvalds 2005-04-16 254 /*
^1da177e4c3f4152 Linus Torvalds 2005-04-16 255 * Re-calculate the actual number of entries and the mask
^1da177e4c3f4152 Linus Torvalds 2005-04-16 256 * from the number of bits we can fit.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 257 */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 258 hash_size = 1UL << hash_bits;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 259
^1da177e4c3f4152 Linus Torvalds 2005-04-16 260 /* And initialize the newly allocated array */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 261 d = dcookie_hashtable;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 262 i = hash_size;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 263 do {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 264 INIT_LIST_HEAD(d);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 265 d++;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 266 i--;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 267 } while (i);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 268
^1da177e4c3f4152 Linus Torvalds 2005-04-16 269 out:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 270 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 271 out_kmem:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 272 kmem_cache_destroy(dcookie_cache);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 273 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 274 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 275
^1da177e4c3f4152 Linus Torvalds 2005-04-16 276
^1da177e4c3f4152 Linus Torvalds 2005-04-16 277 static void free_dcookie(struct dcookie_struct * dcs)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 278 {
c2452f32786159ed Nick Piggin 2008-12-01 279 struct dentry *d = dcs->path.dentry;
c2452f32786159ed Nick Piggin 2008-12-01 280
c2452f32786159ed Nick Piggin 2008-12-01 281 spin_lock(&d->d_lock);
c2452f32786159ed Nick Piggin 2008-12-01 282 d->d_flags &= ~DCACHE_COOKIE;
c2452f32786159ed Nick Piggin 2008-12-01 283 spin_unlock(&d->d_lock);
c2452f32786159ed Nick Piggin 2008-12-01 284
448678a0f3cdd015 Jan Blunck 2008-02-14 285 path_put(&dcs->path);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 286 kmem_cache_free(dcookie_cache, dcs);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 287 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 288
^1da177e4c3f4152 Linus Torvalds 2005-04-16 289
^1da177e4c3f4152 Linus Torvalds 2005-04-16 290 static void dcookie_exit(void)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 291 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 292 struct list_head * list;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 293 struct list_head * pos;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 294 struct list_head * pos2;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 295 struct dcookie_struct * dcs;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 296 size_t i;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 297
^1da177e4c3f4152 Linus Torvalds 2005-04-16 298 for (i = 0; i < hash_size; ++i) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 299 list = dcookie_hashtable + i;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 300 list_for_each_safe(pos, pos2, list) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 301 dcs = list_entry(pos, struct dcookie_struct, hash_list);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 302 list_del(&dcs->hash_list);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 303 free_dcookie(dcs);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 304 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 305 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 306
^1da177e4c3f4152 Linus Torvalds 2005-04-16 307 kfree(dcookie_hashtable);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 308 kmem_cache_destroy(dcookie_cache);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 309 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 310
^1da177e4c3f4152 Linus Torvalds 2005-04-16 311
^1da177e4c3f4152 Linus Torvalds 2005-04-16 312 struct dcookie_user {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 313 struct list_head next;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 314 };
^1da177e4c3f4152 Linus Torvalds 2005-04-16 315
^1da177e4c3f4152 Linus Torvalds 2005-04-16 @316 struct dcookie_user * dcookie_register(void)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 317 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 318 struct dcookie_user * user;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 319
353ab6e97b8f209d Ingo Molnar 2006-03-26 320 mutex_lock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 321
^1da177e4c3f4152 Linus Torvalds 2005-04-16 322 user = kmalloc(sizeof(struct dcookie_user), GFP_KERNEL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 323 if (!user)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 324 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 325
^1da177e4c3f4152 Linus Torvalds 2005-04-16 326 if (!is_live() && dcookie_init())
^1da177e4c3f4152 Linus Torvalds 2005-04-16 327 goto out_free;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 328
^1da177e4c3f4152 Linus Torvalds 2005-04-16 329 list_add(&user->next, &dcookie_users);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 330
^1da177e4c3f4152 Linus Torvalds 2005-04-16 331 out:
353ab6e97b8f209d Ingo Molnar 2006-03-26 332 mutex_unlock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 333 return user;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 334 out_free:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 335 kfree(user);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 336 user = NULL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 337 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 338 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 339
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 45927 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE
@ 2021-01-14 12:58 ` kernel test robot
0 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2021-01-14 12:58 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 19087 bytes --]
Hi Viresh,
I love your patch! Yet something to improve:
[auto build test ERROR on linus/master]
[also build test ERROR on v5.11-rc3 next-20210114]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Viresh-Kumar/dcookies-Make-dcookies-depend-on-CONFIG_OPROFILE/20210111-140734
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 7c53f6b671f4aba70ff15e1b05148b10d58c2837
config: x86_64-rhel (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/d48f031313d175610c430e9f04c3b6974e3fd3e2
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Viresh-Kumar/dcookies-Make-dcookies-depend-on-CONFIG_OPROFILE/20210111-140734
git checkout d48f031313d175610c430e9f04c3b6974e3fd3e2
# save the attached .config to linux build tree
make W=1 ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
>> fs/dcookies.c:117:5: error: redefinition of 'get_dcookie'
117 | int get_dcookie(const struct path *path, unsigned long *cookie)
| ^~~~~~~~~~~
In file included from fs/dcookies.c:26:
include/linux/dcookies.h:62:19: note: previous definition of 'get_dcookie' was here
62 | static inline int get_dcookie(const struct path *path, unsigned long *cookie)
| ^~~~~~~~~~~
>> fs/dcookies.c:316:23: error: redefinition of 'dcookie_register'
316 | struct dcookie_user * dcookie_register(void)
| ^~~~~~~~~~~~~~~~
In file included from fs/dcookies.c:26:
include/linux/dcookies.h:52:37: note: previous definition of 'dcookie_register' was here
52 | static inline struct dcookie_user * dcookie_register(void)
| ^~~~~~~~~~~~~~~~
>> fs/dcookies.c:341:6: error: redefinition of 'dcookie_unregister'
341 | void dcookie_unregister(struct dcookie_user * user)
| ^~~~~~~~~~~~~~~~~~
In file included from fs/dcookies.c:26:
include/linux/dcookies.h:57:20: note: previous definition of 'dcookie_unregister' was here
57 | static inline void dcookie_unregister(struct dcookie_user * user)
| ^~~~~~~~~~~~~~~~~~
vim +/get_dcookie +117 fs/dcookies.c
^1da177e4c3f4152 Linus Torvalds 2005-04-16 112
^1da177e4c3f4152 Linus Torvalds 2005-04-16 113
^1da177e4c3f4152 Linus Torvalds 2005-04-16 114 /* This is the main kernel-side routine that retrieves the cookie
^1da177e4c3f4152 Linus Torvalds 2005-04-16 115 * value for a dentry/vfsmnt pair.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 116 */
71215a75ceddf38b Al Viro 2016-11-20 @117 int get_dcookie(const struct path *path, unsigned long *cookie)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 118 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 119 int err = 0;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 120 struct dcookie_struct * dcs;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 121
353ab6e97b8f209d Ingo Molnar 2006-03-26 122 mutex_lock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 123
^1da177e4c3f4152 Linus Torvalds 2005-04-16 124 if (!is_live()) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 125 err = -EINVAL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 126 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 127 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 128
c2452f32786159ed Nick Piggin 2008-12-01 129 if (path->dentry->d_flags & DCACHE_COOKIE) {
c2452f32786159ed Nick Piggin 2008-12-01 130 dcs = find_dcookie((unsigned long)path->dentry);
c2452f32786159ed Nick Piggin 2008-12-01 131 } else {
448678a0f3cdd015 Jan Blunck 2008-02-14 132 dcs = alloc_dcookie(path);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 133 if (!dcs) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 134 err = -ENOMEM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 135 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 136 }
c2452f32786159ed Nick Piggin 2008-12-01 137 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 138
^1da177e4c3f4152 Linus Torvalds 2005-04-16 139 *cookie = dcookie_value(dcs);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 140
^1da177e4c3f4152 Linus Torvalds 2005-04-16 141 out:
353ab6e97b8f209d Ingo Molnar 2006-03-26 142 mutex_unlock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 143 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 144 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 145
^1da177e4c3f4152 Linus Torvalds 2005-04-16 146
^1da177e4c3f4152 Linus Torvalds 2005-04-16 147 /* And here is where the userspace process can look up the cookie value
^1da177e4c3f4152 Linus Torvalds 2005-04-16 148 * to retrieve the path.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 149 */
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 150 static int do_lookup_dcookie(u64 cookie64, char __user *buf, size_t len)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 151 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 152 unsigned long cookie = (unsigned long)cookie64;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 153 int err = -EINVAL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 154 char * kbuf;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 155 char * path;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 156 size_t pathlen;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 157 struct dcookie_struct * dcs;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 158
^1da177e4c3f4152 Linus Torvalds 2005-04-16 159 /* we could leak path information to users
^1da177e4c3f4152 Linus Torvalds 2005-04-16 160 * without dir read permission without this
^1da177e4c3f4152 Linus Torvalds 2005-04-16 161 */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 162 if (!capable(CAP_SYS_ADMIN))
^1da177e4c3f4152 Linus Torvalds 2005-04-16 163 return -EPERM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 164
353ab6e97b8f209d Ingo Molnar 2006-03-26 165 mutex_lock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 166
^1da177e4c3f4152 Linus Torvalds 2005-04-16 167 if (!is_live()) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 168 err = -EINVAL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 169 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 170 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 171
^1da177e4c3f4152 Linus Torvalds 2005-04-16 172 if (!(dcs = find_dcookie(cookie)))
^1da177e4c3f4152 Linus Torvalds 2005-04-16 173 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 174
^1da177e4c3f4152 Linus Torvalds 2005-04-16 175 err = -ENOMEM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 176 kbuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 177 if (!kbuf)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 178 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 179
^1da177e4c3f4152 Linus Torvalds 2005-04-16 180 /* FIXME: (deleted) ? */
cf28b4863f9ee8f1 Jan Blunck 2008-02-14 181 path = d_path(&dcs->path, kbuf, PAGE_SIZE);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 182
fe47ae7f53e179d2 Robert Richter 2011-05-31 183 mutex_unlock(&dcookie_mutex);
fe47ae7f53e179d2 Robert Richter 2011-05-31 184
^1da177e4c3f4152 Linus Torvalds 2005-04-16 185 if (IS_ERR(path)) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 186 err = PTR_ERR(path);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 187 goto out_free;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 188 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 189
^1da177e4c3f4152 Linus Torvalds 2005-04-16 190 err = -ERANGE;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 191
^1da177e4c3f4152 Linus Torvalds 2005-04-16 192 pathlen = kbuf + PAGE_SIZE - path;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 193 if (pathlen <= len) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 194 err = pathlen;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 195 if (copy_to_user(buf, path, pathlen))
^1da177e4c3f4152 Linus Torvalds 2005-04-16 196 err = -EFAULT;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 197 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 198
^1da177e4c3f4152 Linus Torvalds 2005-04-16 199 out_free:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 200 kfree(kbuf);
fe47ae7f53e179d2 Robert Richter 2011-05-31 201 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 202 out:
353ab6e97b8f209d Ingo Molnar 2006-03-26 203 mutex_unlock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 204 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 205 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 206
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 207 SYSCALL_DEFINE3(lookup_dcookie, u64, cookie64, char __user *, buf, size_t, len)
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 208 {
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 209 return do_lookup_dcookie(cookie64, buf, len);
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 210 }
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 211
d5dc77bfeeab0b03 Al Viro 2013-02-25 212 #ifdef CONFIG_COMPAT
d8d14bd09cddbaf0 Heiko Carstens 2014-01-29 213 COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, compat_size_t, len)
d5dc77bfeeab0b03 Al Viro 2013-02-25 214 {
d5dc77bfeeab0b03 Al Viro 2013-02-25 215 #ifdef __BIG_ENDIAN
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 216 return do_lookup_dcookie(((u64)w0 << 32) | w1, buf, len);
d5dc77bfeeab0b03 Al Viro 2013-02-25 217 #else
98e5f7bd2c67f402 Dominik Brodowski 2018-03-17 218 return do_lookup_dcookie(((u64)w1 << 32) | w0, buf, len);
d5dc77bfeeab0b03 Al Viro 2013-02-25 219 #endif
d5dc77bfeeab0b03 Al Viro 2013-02-25 220 }
d5dc77bfeeab0b03 Al Viro 2013-02-25 221 #endif
d5dc77bfeeab0b03 Al Viro 2013-02-25 222
^1da177e4c3f4152 Linus Torvalds 2005-04-16 223 static int dcookie_init(void)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 224 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 225 struct list_head * d;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 226 unsigned int i, hash_bits;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 227 int err = -ENOMEM;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 228
^1da177e4c3f4152 Linus Torvalds 2005-04-16 229 dcookie_cache = kmem_cache_create("dcookie_cache",
^1da177e4c3f4152 Linus Torvalds 2005-04-16 230 sizeof(struct dcookie_struct),
20c2df83d25c6a95 Paul Mundt 2007-07-20 231 0, 0, NULL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 232
^1da177e4c3f4152 Linus Torvalds 2005-04-16 233 if (!dcookie_cache)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 234 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 235
^1da177e4c3f4152 Linus Torvalds 2005-04-16 236 dcookie_hashtable = kmalloc(PAGE_SIZE, GFP_KERNEL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 237 if (!dcookie_hashtable)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 238 goto out_kmem;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 239
^1da177e4c3f4152 Linus Torvalds 2005-04-16 240 err = 0;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 241
^1da177e4c3f4152 Linus Torvalds 2005-04-16 242 /*
^1da177e4c3f4152 Linus Torvalds 2005-04-16 243 * Find the power-of-two list-heads that can fit into the allocation..
^1da177e4c3f4152 Linus Torvalds 2005-04-16 244 * We don't guarantee that "sizeof(struct list_head)" is necessarily
^1da177e4c3f4152 Linus Torvalds 2005-04-16 245 * a power-of-two.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 246 */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 247 hash_size = PAGE_SIZE / sizeof(struct list_head);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 248 hash_bits = 0;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 249 do {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 250 hash_bits++;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 251 } while ((hash_size >> hash_bits) != 0);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 252 hash_bits--;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 253
^1da177e4c3f4152 Linus Torvalds 2005-04-16 254 /*
^1da177e4c3f4152 Linus Torvalds 2005-04-16 255 * Re-calculate the actual number of entries and the mask
^1da177e4c3f4152 Linus Torvalds 2005-04-16 256 * from the number of bits we can fit.
^1da177e4c3f4152 Linus Torvalds 2005-04-16 257 */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 258 hash_size = 1UL << hash_bits;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 259
^1da177e4c3f4152 Linus Torvalds 2005-04-16 260 /* And initialize the newly allocated array */
^1da177e4c3f4152 Linus Torvalds 2005-04-16 261 d = dcookie_hashtable;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 262 i = hash_size;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 263 do {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 264 INIT_LIST_HEAD(d);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 265 d++;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 266 i--;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 267 } while (i);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 268
^1da177e4c3f4152 Linus Torvalds 2005-04-16 269 out:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 270 return err;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 271 out_kmem:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 272 kmem_cache_destroy(dcookie_cache);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 273 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 274 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 275
^1da177e4c3f4152 Linus Torvalds 2005-04-16 276
^1da177e4c3f4152 Linus Torvalds 2005-04-16 277 static void free_dcookie(struct dcookie_struct * dcs)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 278 {
c2452f32786159ed Nick Piggin 2008-12-01 279 struct dentry *d = dcs->path.dentry;
c2452f32786159ed Nick Piggin 2008-12-01 280
c2452f32786159ed Nick Piggin 2008-12-01 281 spin_lock(&d->d_lock);
c2452f32786159ed Nick Piggin 2008-12-01 282 d->d_flags &= ~DCACHE_COOKIE;
c2452f32786159ed Nick Piggin 2008-12-01 283 spin_unlock(&d->d_lock);
c2452f32786159ed Nick Piggin 2008-12-01 284
448678a0f3cdd015 Jan Blunck 2008-02-14 285 path_put(&dcs->path);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 286 kmem_cache_free(dcookie_cache, dcs);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 287 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 288
^1da177e4c3f4152 Linus Torvalds 2005-04-16 289
^1da177e4c3f4152 Linus Torvalds 2005-04-16 290 static void dcookie_exit(void)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 291 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 292 struct list_head * list;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 293 struct list_head * pos;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 294 struct list_head * pos2;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 295 struct dcookie_struct * dcs;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 296 size_t i;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 297
^1da177e4c3f4152 Linus Torvalds 2005-04-16 298 for (i = 0; i < hash_size; ++i) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 299 list = dcookie_hashtable + i;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 300 list_for_each_safe(pos, pos2, list) {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 301 dcs = list_entry(pos, struct dcookie_struct, hash_list);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 302 list_del(&dcs->hash_list);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 303 free_dcookie(dcs);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 304 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 305 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 306
^1da177e4c3f4152 Linus Torvalds 2005-04-16 307 kfree(dcookie_hashtable);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 308 kmem_cache_destroy(dcookie_cache);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 309 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 310
^1da177e4c3f4152 Linus Torvalds 2005-04-16 311
^1da177e4c3f4152 Linus Torvalds 2005-04-16 312 struct dcookie_user {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 313 struct list_head next;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 314 };
^1da177e4c3f4152 Linus Torvalds 2005-04-16 315
^1da177e4c3f4152 Linus Torvalds 2005-04-16 @316 struct dcookie_user * dcookie_register(void)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 317 {
^1da177e4c3f4152 Linus Torvalds 2005-04-16 318 struct dcookie_user * user;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 319
353ab6e97b8f209d Ingo Molnar 2006-03-26 320 mutex_lock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 321
^1da177e4c3f4152 Linus Torvalds 2005-04-16 322 user = kmalloc(sizeof(struct dcookie_user), GFP_KERNEL);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 323 if (!user)
^1da177e4c3f4152 Linus Torvalds 2005-04-16 324 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 325
^1da177e4c3f4152 Linus Torvalds 2005-04-16 326 if (!is_live() && dcookie_init())
^1da177e4c3f4152 Linus Torvalds 2005-04-16 327 goto out_free;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 328
^1da177e4c3f4152 Linus Torvalds 2005-04-16 329 list_add(&user->next, &dcookie_users);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 330
^1da177e4c3f4152 Linus Torvalds 2005-04-16 331 out:
353ab6e97b8f209d Ingo Molnar 2006-03-26 332 mutex_unlock(&dcookie_mutex);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 333 return user;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 334 out_free:
^1da177e4c3f4152 Linus Torvalds 2005-04-16 335 kfree(user);
^1da177e4c3f4152 Linus Torvalds 2005-04-16 336 user = NULL;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 337 goto out;
^1da177e4c3f4152 Linus Torvalds 2005-04-16 338 }
^1da177e4c3f4152 Linus Torvalds 2005-04-16 339
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 45927 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-01-14 13:00 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-11 5:37 [PATCH V1 resend] dcookies: Make dcookies depend on CONFIG_OPROFILE Viresh Kumar
2021-01-11 19:28 ` Linus Torvalds
2021-01-12 4:37 ` Viresh Kumar
2021-01-14 12:58 ` kernel test robot
2021-01-14 12:58 ` kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.