162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * fs/hmdfs/hmdfs_share.h
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef HMDFS_SHARE_H
962306a36Sopenharmony_ci#define HMDFS_SHARE_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/file.h>
1262306a36Sopenharmony_ci#include <linux/slab.h>
1362306a36Sopenharmony_ci#include <linux/namei.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "hmdfs_device_view.h"
1662306a36Sopenharmony_ci#include "comm/connection.h"
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci#define HMDFS_SHARE_ITEM_TIMEOUT_S 120
1962306a36Sopenharmony_ci#define HMDFS_SHARE_ITEMS_MAX 128
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define SHARE_RESERVED_DIR ".share"
2262306a36Sopenharmony_ci#define SHARE_ALL_DEVICE "0"
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistruct hmdfs_share_control {
2562306a36Sopenharmony_ci	__u32 src_fd;
2662306a36Sopenharmony_ci	char cid[HMDFS_CID_SIZE];
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct hmdfs_share_item {
3062306a36Sopenharmony_ci	struct file *file;
3162306a36Sopenharmony_ci	struct qstr relative_path;
3262306a36Sopenharmony_ci	char cid[HMDFS_CID_SIZE];
3362306a36Sopenharmony_ci	bool opened;
3462306a36Sopenharmony_ci	bool timeout;
3562306a36Sopenharmony_ci	struct list_head list;
3662306a36Sopenharmony_ci	struct delayed_work d_work;
3762306a36Sopenharmony_ci	struct hmdfs_share_table *hst;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cibool hmdfs_is_share_file(struct file *file);
4162306a36Sopenharmony_cistruct hmdfs_share_item *hmdfs_lookup_share_item(struct hmdfs_share_table *st,
4262306a36Sopenharmony_ci						struct qstr *cur_relative_path);
4362306a36Sopenharmony_ciint insert_share_item(struct hmdfs_share_table *st, struct qstr *relative_path,
4462306a36Sopenharmony_ci			struct file *file, char *cid);
4562306a36Sopenharmony_civoid update_share_item(struct hmdfs_share_item *item, struct file *file,
4662306a36Sopenharmony_ci			char *cid);
4762306a36Sopenharmony_cibool in_share_dir(struct dentry *child_dentry);
4862306a36Sopenharmony_ciinline bool is_share_dir(struct inode *inode, const char *name);
4962306a36Sopenharmony_ciint get_path_from_share_table(struct hmdfs_sb_info *sbi,
5062306a36Sopenharmony_ci			        struct dentry *cur_dentry, struct path *src_path);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_civoid hmdfs_clear_share_item_offline(struct hmdfs_peer *conn);
5362306a36Sopenharmony_civoid reset_item_opened_status(struct hmdfs_sb_info *sbi, const char *filename);
5462306a36Sopenharmony_civoid hmdfs_close_share_item(struct hmdfs_sb_info *sbi, struct file *file,
5562306a36Sopenharmony_ci			    char *cid);
5662306a36Sopenharmony_ciint hmdfs_check_share_access_permission(struct hmdfs_sb_info *sbi,
5762306a36Sopenharmony_ci					const char *filename, char *cid);
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ciint hmdfs_init_share_table(struct hmdfs_sb_info *sbi);
6062306a36Sopenharmony_civoid hmdfs_clear_share_table(struct hmdfs_sb_info *sbi);
6162306a36Sopenharmony_ciint hmdfs_clear_first_item(struct hmdfs_share_table *st);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#endif // HMDFS_SHARE_H
64