78 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Copyright (C) 2018 Samsung Electronics Co., Ltd.4 */5 6#ifndef __SHARE_CONFIG_MANAGEMENT_H__7#define __SHARE_CONFIG_MANAGEMENT_H__8 9#include <linux/workqueue.h>10#include <linux/hashtable.h>11#include <linux/path.h>12#include <linux/unicode.h>13 14struct ksmbd_work;15 16struct ksmbd_share_config {17 char *name;18 char *path;19 20 unsigned int path_sz;21 unsigned int flags;22 struct list_head veto_list;23 24 struct path vfs_path;25 26 atomic_t refcount;27 struct hlist_node hlist;28 unsigned short create_mask;29 unsigned short directory_mask;30 unsigned short force_create_mode;31 unsigned short force_directory_mode;32 unsigned short force_uid;33 unsigned short force_gid;34};35 36#define KSMBD_SHARE_INVALID_UID ((__u16)-1)37#define KSMBD_SHARE_INVALID_GID ((__u16)-1)38 39static inline umode_t40share_config_create_mode(struct ksmbd_share_config *share,41 umode_t posix_mode)42{43 umode_t mode = (posix_mode ?: (umode_t)-1) & share->create_mask;44 45 return mode | share->force_create_mode;46}47 48static inline umode_t49share_config_directory_mode(struct ksmbd_share_config *share,50 umode_t posix_mode)51{52 umode_t mode = (posix_mode ?: (umode_t)-1) & share->directory_mask;53 54 return mode | share->force_directory_mode;55}56 57static inline int test_share_config_flag(struct ksmbd_share_config *share,58 int flag)59{60 return share->flags & flag;61}62 63void ksmbd_share_config_del(struct ksmbd_share_config *share);64void __ksmbd_share_config_put(struct ksmbd_share_config *share);65 66static inline void ksmbd_share_config_put(struct ksmbd_share_config *share)67{68 if (!atomic_dec_and_test(&share->refcount))69 return;70 __ksmbd_share_config_put(share);71}72 73struct ksmbd_share_config *ksmbd_share_config_get(struct ksmbd_work *work,74 const char *name);75bool ksmbd_share_veto_filename(struct ksmbd_share_config *share,76 const char *filename);77#endif /* __SHARE_CONFIG_MANAGEMENT_H__ */78