tree_connect.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Copyright (C) 2018 Samsung Electronics Co., Ltd.
  4. */
  5. #ifndef __TREE_CONNECT_MANAGEMENT_H__
  6. #define __TREE_CONNECT_MANAGEMENT_H__
  7. #include <linux/hashtable.h>
  8. #include "../ksmbd_netlink.h"
  9. struct ksmbd_share_config;
  10. struct ksmbd_user;
  11. struct ksmbd_conn;
  12. struct ksmbd_work;
  13. enum {
  14. TREE_NEW = 0,
  15. TREE_CONNECTED,
  16. TREE_DISCONNECTED
  17. };
  18. struct ksmbd_tree_connect {
  19. int id;
  20. unsigned int flags;
  21. struct ksmbd_share_config *share_conf;
  22. struct ksmbd_user *user;
  23. struct list_head list;
  24. int maximal_access;
  25. bool posix_extensions;
  26. atomic_t refcount;
  27. wait_queue_head_t refcount_q;
  28. unsigned int t_state;
  29. };
  30. struct ksmbd_tree_conn_status {
  31. unsigned int ret;
  32. struct ksmbd_tree_connect *tree_conn;
  33. };
  34. static inline int test_tree_conn_flag(struct ksmbd_tree_connect *tree_conn,
  35. int flag)
  36. {
  37. return tree_conn->flags & flag;
  38. }
  39. struct ksmbd_session;
  40. struct ksmbd_tree_conn_status
  41. ksmbd_tree_conn_connect(struct ksmbd_work *work, const char *share_name);
  42. void ksmbd_tree_connect_put(struct ksmbd_tree_connect *tcon);
  43. int ksmbd_tree_conn_disconnect(struct ksmbd_session *sess,
  44. struct ksmbd_tree_connect *tree_conn);
  45. struct ksmbd_tree_connect *ksmbd_tree_conn_lookup(struct ksmbd_session *sess,
  46. unsigned int id);
  47. int ksmbd_tree_conn_session_logoff(struct ksmbd_session *sess);
  48. #endif /* __TREE_CONNECT_MANAGEMENT_H__ */