xref: /kernel/linux/linux-6.6/fs/hmdfs/hmdfs_share.h (revision 62306a36)
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * fs/hmdfs/hmdfs_share.h
4 *
5 * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
6 */
7
8#ifndef HMDFS_SHARE_H
9#define HMDFS_SHARE_H
10
11#include <linux/file.h>
12#include <linux/slab.h>
13#include <linux/namei.h>
14
15#include "hmdfs_device_view.h"
16#include "comm/connection.h"
17
18#define HMDFS_SHARE_ITEM_TIMEOUT_S 120
19#define HMDFS_SHARE_ITEMS_MAX 128
20
21#define SHARE_RESERVED_DIR ".share"
22#define SHARE_ALL_DEVICE "0"
23
24struct hmdfs_share_control {
25	__u32 src_fd;
26	char cid[HMDFS_CID_SIZE];
27};
28
29struct hmdfs_share_item {
30	struct file *file;
31	struct qstr relative_path;
32	char cid[HMDFS_CID_SIZE];
33	bool opened;
34	bool timeout;
35	struct list_head list;
36	struct delayed_work d_work;
37	struct hmdfs_share_table *hst;
38};
39
40bool hmdfs_is_share_file(struct file *file);
41struct hmdfs_share_item *hmdfs_lookup_share_item(struct hmdfs_share_table *st,
42						struct qstr *cur_relative_path);
43int insert_share_item(struct hmdfs_share_table *st, struct qstr *relative_path,
44			struct file *file, char *cid);
45void update_share_item(struct hmdfs_share_item *item, struct file *file,
46			char *cid);
47bool in_share_dir(struct dentry *child_dentry);
48inline bool is_share_dir(struct inode *inode, const char *name);
49int get_path_from_share_table(struct hmdfs_sb_info *sbi,
50			        struct dentry *cur_dentry, struct path *src_path);
51
52void hmdfs_clear_share_item_offline(struct hmdfs_peer *conn);
53void reset_item_opened_status(struct hmdfs_sb_info *sbi, const char *filename);
54void hmdfs_close_share_item(struct hmdfs_sb_info *sbi, struct file *file,
55			    char *cid);
56int hmdfs_check_share_access_permission(struct hmdfs_sb_info *sbi,
57					const char *filename, char *cid);
58
59int hmdfs_init_share_table(struct hmdfs_sb_info *sbi);
60void hmdfs_clear_share_table(struct hmdfs_sb_info *sbi);
61int hmdfs_clear_first_item(struct hmdfs_share_table *st);
62
63#endif // HMDFS_SHARE_H
64