]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - include/os/linux/kernel/linux/dcache_compat.h
Vendor import of openzfs master @ 184df27eef0abdc7ab2105b21257f753834b936b
[FreeBSD/FreeBSD.git] / include / os / linux / kernel / linux / dcache_compat.h
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21
22 /*
23  * Copyright (C) 2011 Lawrence Livermore National Security, LLC.
24  */
25
26 #ifndef _ZFS_DCACHE_H
27 #define _ZFS_DCACHE_H
28
29 #include <linux/dcache.h>
30
31 #define dname(dentry)   ((char *)((dentry)->d_name.name))
32 #define dlen(dentry)    ((int)((dentry)->d_name.len))
33
34 #ifndef HAVE_D_MAKE_ROOT
35 #define d_make_root(inode)      d_alloc_root(inode)
36 #endif /* HAVE_D_MAKE_ROOT */
37
38 /*
39  * 2.6.30 API change,
40  * The const keyword was added to the 'struct dentry_operations' in
41  * the dentry structure.  To handle this we define an appropriate
42  * dentry_operations_t typedef which can be used.
43  */
44 typedef const struct dentry_operations  dentry_operations_t;
45
46 /*
47  * 2.6.38 API addition,
48  * Added d_clear_d_op() helper function which clears some flags and the
49  * registered dentry->d_op table.  This is required because d_set_d_op()
50  * issues a warning when the dentry operations table is already set.
51  * For the .zfs control directory to work properly we must be able to
52  * override the default operations table and register custom .d_automount
53  * and .d_revalidate callbacks.
54  */
55 static inline void
56 d_clear_d_op(struct dentry *dentry)
57 {
58         dentry->d_op = NULL;
59         dentry->d_flags &= ~(
60             DCACHE_OP_HASH | DCACHE_OP_COMPARE |
61             DCACHE_OP_REVALIDATE | DCACHE_OP_DELETE);
62 }
63
64 #endif /* _ZFS_DCACHE_H */