vfsub.h 1.74 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 2005-2019 Junjiro R. Okajima
 */

/*
 * sub-routines for VFS
 */

#ifndef __AUFS_VFSUB_H__
#define __AUFS_VFSUB_H__

#ifdef __KERNEL__

#include <linux/fs.h>
#include "debug.h"

J. R. Okajima's avatar
J. R. Okajima committed
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* ---------------------------------------------------------------------- */

/* lock subclass for lower inode */
/* default MAX_LOCKDEP_SUBCLASSES(8) is not enough */
/* reduce? gave up. */
enum {
	AuLsc_I_Begin = I_MUTEX_PARENT2, /* 5 */
	AuLsc_I_PARENT,		/* lower inode, parent first */
	AuLsc_I_PARENT2,	/* copyup dirs */
	AuLsc_I_PARENT3,	/* copyup wh */
	AuLsc_I_CHILD,
	AuLsc_I_CHILD2,
	AuLsc_I_End
};

33
34
35
36
/* to debug easier, do not make them inlined functions */
#define MtxMustLock(mtx)	AuDebugOn(!mutex_is_locked(mtx))
#define IMustLock(i)		AuDebugOn(!inode_is_locked(i))

J. R. Okajima's avatar
J. R. Okajima committed
37
38
39
40
/* ---------------------------------------------------------------------- */

struct file *vfsub_dentry_open(struct path *path, int flags);
struct file *vfsub_filp_open(const char *path, int oflags, int mode);
41
42
int vfsub_kern_path(const char *name, unsigned int flags, struct path *path);

J. R. Okajima's avatar
J. R. Okajima committed
43
44
45
struct dentry *vfsub_lookup_one_len(const char *name, struct dentry *parent,
				    int len);

J. R. Okajima's avatar
J. R. Okajima committed
46
47
48
49
50
51
static inline struct dentry *vfsub_lkup_one(struct qstr *name,
					    struct dentry *parent)
{
	return vfsub_lookup_one_len(name->name, parent, name->len);
}

J. R. Okajima's avatar
J. R. Okajima committed
52
53
54
55
56
57
58
59
60
61
62
63
/* ---------------------------------------------------------------------- */

static inline loff_t vfsub_f_size_read(struct file *file)
{
	return i_size_read(file_inode(file));
}

/* ---------------------------------------------------------------------- */

int vfsub_unlink(struct inode *dir, struct path *path,
		 struct inode **delegated_inode, int force);

64
65
#endif /* __KERNEL__ */
#endif /* __AUFS_VFSUB_H__ */