smb_fs.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  smb_fs.h
  3.  *
  4.  *  Copyright (C) 1995 by Paal-Kr. Engstad and Volker Lendecke
  5.  *  Copyright (C) 1997 by Volker Lendecke
  6.  *
  7.  */
  8. #ifndef _LINUX_SMB_FS_H
  9. #define _LINUX_SMB_FS_H
  10. #include <linux/smb.h>
  11. /*
  12.  * ioctl commands
  13.  */
  14. #define SMB_IOC_GETMOUNTUID _IOR('u', 1, __kernel_old_uid_t)
  15. #define SMB_IOC_NEWCONN                 _IOW('u', 2, struct smb_conn_opt)
  16. /* __kernel_uid_t can never change, so we have to use __kernel_uid32_t */
  17. #define SMB_IOC_GETMOUNTUID32 _IOR('u', 3, __kernel_uid32_t)
  18. #ifdef __KERNEL__
  19. #include <linux/pagemap.h>
  20. #include <linux/vmalloc.h>
  21. #include <linux/smb_mount.h>
  22. #include <asm/unaligned.h>
  23. /* macro names are short for word, double-word, long value (?) */
  24. #define WVAL(buf,pos) 
  25. (le16_to_cpu(get_unaligned((u16 *)((u8 *)(buf) + (pos)))))
  26. #define DVAL(buf,pos) 
  27. (le32_to_cpu(get_unaligned((u32 *)((u8 *)(buf) + (pos)))))
  28. #define LVAL(buf,pos) 
  29. (le64_to_cpu(get_unaligned((u64 *)((u8 *)(buf) + (pos)))))
  30. #define WSET(buf,pos,val) 
  31. put_unaligned(cpu_to_le16((u16)(val)), (u16 *)((u8 *)(buf) + (pos)))
  32. #define DSET(buf,pos,val) 
  33. put_unaligned(cpu_to_le32((u32)(val)), (u32 *)((u8 *)(buf) + (pos)))
  34. #define LSET(buf,pos,val) 
  35. put_unaligned(cpu_to_le64((u64)(val)), (u64 *)((u8 *)(buf) + (pos)))
  36. /* where to find the base of the SMB packet proper */
  37. #define smb_base(buf) ((u8 *)(((u8 *)(buf))+4))
  38. #ifdef DEBUG_SMB_MALLOC
  39. #include <linux/slab.h>
  40. extern int smb_malloced;
  41. extern int smb_current_vmalloced;
  42. extern int smb_current_kmalloced;
  43. static inline void *
  44. smb_vmalloc(unsigned int size)
  45. {
  46.         smb_malloced += 1;
  47.         smb_current_vmalloced += 1;
  48.         return vmalloc(size);
  49. }
  50. static inline void
  51. smb_vfree(void *obj)
  52. {
  53.         smb_current_vmalloced -= 1;
  54.         vfree(obj);
  55. }
  56. static inline void *
  57. smb_kmalloc(size_t size, int flags)
  58. {
  59. smb_malloced += 1;
  60. smb_current_kmalloced += 1;
  61. return kmalloc(size, flags);
  62. }
  63. static inline void
  64. smb_kfree(void *obj)
  65. {
  66. smb_current_kmalloced -= 1;
  67. kfree(obj);
  68. }
  69. #else /* DEBUG_SMB_MALLOC */
  70. #define smb_kmalloc(s,p) kmalloc(s,p)
  71. #define smb_kfree(o) kfree(o)
  72. #define smb_vmalloc(s) vmalloc(s)
  73. #define smb_vfree(o) vfree(o)
  74. #endif /* DEBUG_SMB_MALLOC */
  75. /*
  76.  * Flags for the in-memory inode
  77.  */
  78. #define SMB_F_LOCALWRITE 0x02 /* file modified locally */
  79. /* NT1 protocol capability bits */
  80. #define SMB_CAP_RAW_MODE         0x0001
  81. #define SMB_CAP_MPX_MODE         0x0002
  82. #define SMB_CAP_UNICODE          0x0004
  83. #define SMB_CAP_LARGE_FILES      0x0008
  84. #define SMB_CAP_NT_SMBS          0x0010
  85. #define SMB_CAP_RPC_REMOTE_APIS  0x0020
  86. #define SMB_CAP_STATUS32         0x0040
  87. #define SMB_CAP_LEVEL_II_OPLOCKS 0x0080
  88. #define SMB_CAP_LOCK_AND_READ    0x0100
  89. #define SMB_CAP_NT_FIND          0x0200
  90. #define SMB_CAP_DFS              0x1000
  91. #define SMB_CAP_LARGE_READX      0x4000
  92. /*
  93.  * This is the time we allow an inode, dentry or dir cache to live. It is bad
  94.  * for performance to have shorter ttl on an inode than on the cache. It can
  95.  * cause refresh on each inode for a dir listing ... one-by-one
  96.  */
  97. #define SMB_MAX_AGE(server) (((server)->mnt->ttl * HZ) / 1000)
  98. static inline void
  99. smb_age_dentry(struct smb_sb_info *server, struct dentry *dentry)
  100. {
  101. dentry->d_time = jiffies - SMB_MAX_AGE(server);
  102. }
  103. struct smb_cache_head {
  104. time_t mtime; /* unused */
  105. unsigned long time; /* cache age */
  106. unsigned long end; /* last valid fpos in cache */
  107. int eof;
  108. };
  109. #define SMB_DIRCACHE_SIZE ((int)(PAGE_CACHE_SIZE/sizeof(struct dentry *)))
  110. union smb_dir_cache {
  111. struct smb_cache_head   head;
  112. struct dentry           *dentry[SMB_DIRCACHE_SIZE];
  113. };
  114. #define SMB_FIRSTCACHE_SIZE ((int)((SMB_DIRCACHE_SIZE * 
  115. sizeof(struct dentry *) - sizeof(struct smb_cache_head)) / 
  116. sizeof(struct dentry *)))
  117. #define SMB_DIRCACHE_START      (SMB_DIRCACHE_SIZE - SMB_FIRSTCACHE_SIZE)
  118. struct smb_cache_control {
  119. struct  smb_cache_head head;
  120. struct  page *page;
  121. union   smb_dir_cache *cache;
  122. unsigned long fpos, ofs;
  123. int filled, valid, idx;
  124. };
  125. static inline int
  126. smb_is_open(struct inode *i)
  127. {
  128. return (i->u.smbfs_i.open == server_from_inode(i)->generation);
  129. }
  130. #endif /* __KERNEL__ */
  131. #endif /* _LINUX_SMB_FS_H */