mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add vn_mode_to_vtype/vn_vtype to_mode helpers
Add simple helpers to convert a vnode->v_type to a inode->i_mode. These should be used sparingly but they are handy to have.
This commit is contained in:
		
							parent
							
								
									3f688a8c38
								
							
						
					
					
						commit
						4295b530ee
					
				| @ -25,4 +25,8 @@ | |||||||
| #ifndef _SPL_MODE_H | #ifndef _SPL_MODE_H | ||||||
| #define _SPL_MODE_H | #define _SPL_MODE_H | ||||||
| 
 | 
 | ||||||
|  | #define IFTOVT(mode)	vn_mode_to_vtype(mode) | ||||||
|  | #define VTTOIF(vtype)	vn_vtype_to_mode(vtype) | ||||||
|  | #define MAKEIMODE(T, M) (VTTOIF(T) | ((M) & ~S_IFMT)) | ||||||
|  | 
 | ||||||
| #endif /* SPL_MODE_H */ | #endif /* SPL_MODE_H */ | ||||||
|  | |||||||
| @ -202,6 +202,8 @@ typedef struct caller_context { | |||||||
| 
 | 
 | ||||||
| extern vnode_t *vn_alloc(int flag); | extern vnode_t *vn_alloc(int flag); | ||||||
| void vn_free(vnode_t *vp); | void vn_free(vnode_t *vp); | ||||||
|  | extern vtype_t vn_mode_to_vtype(mode_t); | ||||||
|  | extern mode_t vn_vtype_to_mode(vtype_t); | ||||||
| extern int vn_open(const char *path, uio_seg_t seg, int flags, int mode, | extern int vn_open(const char *path, uio_seg_t seg, int flags, int mode, | ||||||
| 		   vnode_t **vpp, int x1, void *x2); | 		   vnode_t **vpp, int x1, void *x2); | ||||||
| extern int vn_openat(const char *path, uio_seg_t seg, int flags, int mode, | extern int vn_openat(const char *path, uio_seg_t seg, int flags, int mode, | ||||||
|  | |||||||
| @ -42,8 +42,8 @@ static spl_kmem_cache_t *vn_file_cache; | |||||||
| static spinlock_t vn_file_lock = SPIN_LOCK_UNLOCKED; | static spinlock_t vn_file_lock = SPIN_LOCK_UNLOCKED; | ||||||
| static LIST_HEAD(vn_file_list); | static LIST_HEAD(vn_file_list); | ||||||
| 
 | 
 | ||||||
| static vtype_t | vtype_t | ||||||
| vn_get_sol_type(umode_t mode) | vn_mode_to_vtype(mode_t mode) | ||||||
| { | { | ||||||
| 	if (S_ISREG(mode)) | 	if (S_ISREG(mode)) | ||||||
| 		return VREG; | 		return VREG; | ||||||
| @ -70,7 +70,36 @@ vn_get_sol_type(umode_t mode) | |||||||
| 		return VCHR; | 		return VCHR; | ||||||
| 
 | 
 | ||||||
| 	return VNON; | 	return VNON; | ||||||
| } /* vn_get_sol_type() */ | } /* vn_mode_to_vtype() */ | ||||||
|  | EXPORT_SYMBOL(vn_mode_to_vtype); | ||||||
|  | 
 | ||||||
|  | mode_t | ||||||
|  | vn_vtype_to_mode(vtype_t vtype) | ||||||
|  | { | ||||||
|  | 	if (vtype == VREG) | ||||||
|  | 		return S_IFREG; | ||||||
|  | 
 | ||||||
|  | 	if (vtype == VDIR) | ||||||
|  | 		return S_IFDIR; | ||||||
|  | 
 | ||||||
|  | 	if (vtype == VCHR) | ||||||
|  | 		return S_IFCHR; | ||||||
|  | 
 | ||||||
|  | 	if (vtype == VBLK) | ||||||
|  | 		return S_IFBLK; | ||||||
|  | 
 | ||||||
|  | 	if (vtype == VFIFO) | ||||||
|  | 		return S_IFIFO; | ||||||
|  | 
 | ||||||
|  | 	if (vtype == VLNK) | ||||||
|  | 		return S_IFLNK; | ||||||
|  | 
 | ||||||
|  | 	if (vtype == VSOCK) | ||||||
|  | 		return S_IFSOCK; | ||||||
|  | 
 | ||||||
|  | 	return VNON; | ||||||
|  | } /* vn_vtype_to_mode() */ | ||||||
|  | EXPORT_SYMBOL(vn_vtype_to_mode); | ||||||
| 
 | 
 | ||||||
| vnode_t * | vnode_t * | ||||||
| vn_alloc(int flag) | vn_alloc(int flag) | ||||||
| @ -150,7 +179,7 @@ vn_open(const char *path, uio_seg_t seg, int flags, int mode, | |||||||
| 	mapping_set_gfp_mask(fp->f_mapping, saved_gfp & ~(__GFP_IO|__GFP_FS)); | 	mapping_set_gfp_mask(fp->f_mapping, saved_gfp & ~(__GFP_IO|__GFP_FS)); | ||||||
| 
 | 
 | ||||||
| 	mutex_enter(&vp->v_lock); | 	mutex_enter(&vp->v_lock); | ||||||
| 	vp->v_type = vn_get_sol_type(stat.mode); | 	vp->v_type = vn_mode_to_vtype(stat.mode); | ||||||
| 	vp->v_file = fp; | 	vp->v_file = fp; | ||||||
| 	vp->v_gfp_mask = saved_gfp; | 	vp->v_gfp_mask = saved_gfp; | ||||||
| 	*vpp = vp; | 	*vpp = vp; | ||||||
| @ -439,7 +468,7 @@ vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4) | |||||||
| 	if (rc) | 	if (rc) | ||||||
| 		SRETURN(-rc); | 		SRETURN(-rc); | ||||||
| 
 | 
 | ||||||
| 	vap->va_type          = vn_get_sol_type(stat.mode); | 	vap->va_type          = vn_mode_to_vtype(stat.mode); | ||||||
| 	vap->va_mode          = stat.mode; | 	vap->va_mode          = stat.mode; | ||||||
| 	vap->va_uid           = stat.uid; | 	vap->va_uid           = stat.uid; | ||||||
| 	vap->va_gid           = stat.gid; | 	vap->va_gid           = stat.gid; | ||||||
| @ -539,7 +568,7 @@ vn_getf(int fd) | |||||||
| 		SGOTO(out_vnode, rc); | 		SGOTO(out_vnode, rc); | ||||||
| 
 | 
 | ||||||
| 	mutex_enter(&vp->v_lock); | 	mutex_enter(&vp->v_lock); | ||||||
| 	vp->v_type = vn_get_sol_type(stat.mode); | 	vp->v_type = vn_mode_to_vtype(stat.mode); | ||||||
| 	vp->v_file = lfp; | 	vp->v_file = lfp; | ||||||
| 	mutex_exit(&vp->v_lock); | 	mutex_exit(&vp->v_lock); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Brian Behlendorf
						Brian Behlendorf