mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-17 07:54:54 +08:00
0b2355fe91
For non-static function declarations, external linkage is implied and the 'extern' keyword isn't needed. Some static checkers complain about the overuse of 'extern', so clean up all the function declarations. In addition, remove 'extern' from the definition of free_local_statfs_inodes(); it isn't needed there, either. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
83 lines
2.4 KiB
C
83 lines
2.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
* Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __DIR_DOT_H__
|
|
#define __DIR_DOT_H__
|
|
|
|
#include <linux/dcache.h>
|
|
#include <linux/crc32.h>
|
|
|
|
struct inode;
|
|
struct gfs2_inode;
|
|
struct gfs2_inum;
|
|
struct buffer_head;
|
|
struct gfs2_dirent;
|
|
|
|
struct gfs2_diradd {
|
|
unsigned nr_blocks;
|
|
struct gfs2_dirent *dent;
|
|
struct buffer_head *bh;
|
|
int save_loc;
|
|
};
|
|
|
|
struct inode *gfs2_dir_search(struct inode *dir,
|
|
const struct qstr *filename,
|
|
bool fail_on_exist);
|
|
int gfs2_dir_check(struct inode *dir, const struct qstr *filename,
|
|
const struct gfs2_inode *ip);
|
|
int gfs2_dir_add(struct inode *inode, const struct qstr *filename,
|
|
const struct gfs2_inode *ip, struct gfs2_diradd *da);
|
|
static inline void gfs2_dir_no_add(struct gfs2_diradd *da)
|
|
{
|
|
brelse(da->bh);
|
|
da->bh = NULL;
|
|
}
|
|
int gfs2_dir_del(struct gfs2_inode *dip, const struct dentry *dentry);
|
|
int gfs2_dir_read(struct inode *inode, struct dir_context *ctx,
|
|
struct file_ra_state *f_ra);
|
|
int gfs2_dir_mvino(struct gfs2_inode *dip, const struct qstr *filename,
|
|
const struct gfs2_inode *nip, unsigned int new_type);
|
|
|
|
int gfs2_dir_exhash_dealloc(struct gfs2_inode *dip);
|
|
|
|
int gfs2_diradd_alloc_required(struct inode *dir,
|
|
const struct qstr *filename,
|
|
struct gfs2_diradd *da);
|
|
int gfs2_dir_get_new_buffer(struct gfs2_inode *ip, u64 block,
|
|
struct buffer_head **bhp);
|
|
void gfs2_dir_hash_inval(struct gfs2_inode *ip);
|
|
|
|
static inline u32 gfs2_disk_hash(const char *data, int len)
|
|
{
|
|
return crc32_le((u32)~0, data, len) ^ (u32)~0;
|
|
}
|
|
|
|
|
|
static inline void gfs2_str2qstr(struct qstr *name, const char *fname)
|
|
{
|
|
name->name = fname;
|
|
name->len = strlen(fname);
|
|
name->hash = gfs2_disk_hash(name->name, name->len);
|
|
}
|
|
|
|
/* N.B. This probably ought to take inum & type as args as well */
|
|
static inline void gfs2_qstr2dirent(const struct qstr *name, u16 reclen, struct gfs2_dirent *dent)
|
|
{
|
|
dent->de_inum.no_addr = cpu_to_be64(0);
|
|
dent->de_inum.no_formal_ino = cpu_to_be64(0);
|
|
dent->de_hash = cpu_to_be32(name->hash);
|
|
dent->de_rec_len = cpu_to_be16(reclen);
|
|
dent->de_name_len = cpu_to_be16(name->len);
|
|
dent->de_type = cpu_to_be16(0);
|
|
memset(dent->__pad, 0, sizeof(dent->__pad));
|
|
memcpy(dent + 1, name->name, name->len);
|
|
}
|
|
|
|
extern struct qstr gfs2_qdot;
|
|
extern struct qstr gfs2_qdotdot;
|
|
|
|
#endif /* __DIR_DOT_H__ */
|