VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   1) /* SPDX-License-Identifier: GPL-2.0 */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   2) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   3)  * Simple zone file system for zoned block devices.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   4)  *
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   5)  * Copyright (C) 2019 Western Digital Corporation or its affiliates.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   6)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   7) #ifndef __ZONEFS_H__
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   8) #define __ZONEFS_H__
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900   9) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  10) #include <linux/fs.h>
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  11) #include <linux/magic.h>
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  12) #include <linux/uuid.h>
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  13) #include <linux/mutex.h>
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  14) #include <linux/rwsem.h>
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  15) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  16) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  17)  * Maximum length of file names: this only needs to be large enough to fit
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  18)  * the zone group directory names and a decimal zone number for file names.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  19)  * 16 characters is plenty.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  20)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  21) #define ZONEFS_NAME_MAX		16
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  22) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  23) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  24)  * Zone types: ZONEFS_ZTYPE_SEQ is used for all sequential zone types
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  25)  * defined in linux/blkzoned.h, that is, BLK_ZONE_TYPE_SEQWRITE_REQ and
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  26)  * BLK_ZONE_TYPE_SEQWRITE_PREF.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  27)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  28) enum zonefs_ztype {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  29) 	ZONEFS_ZTYPE_CNV,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  30) 	ZONEFS_ZTYPE_SEQ,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  31) 	ZONEFS_ZTYPE_MAX,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  32) };
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  33) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  34) static inline enum zonefs_ztype zonefs_zone_type(struct blk_zone *zone)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  35) {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  36) 	if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  37) 		return ZONEFS_ZTYPE_CNV;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  38) 	return ZONEFS_ZTYPE_SEQ;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  39) }
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  40) 
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900  41) #define ZONEFS_ZONE_OPEN	(1 << 0)
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900  42) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  43) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  44)  * In-memory inode data.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  45)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  46) struct zonefs_inode_info {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  47) 	struct inode		i_vnode;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  48) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  49) 	/* File zone type */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  50) 	enum zonefs_ztype	i_ztype;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  51) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  52) 	/* File zone start sector (512B unit) */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  53) 	sector_t		i_zsector;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  54) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  55) 	/* File zone write pointer position (sequential zones only) */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  56) 	loff_t			i_wpoffset;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  57) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  58) 	/* File maximum size */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  59) 	loff_t			i_max_size;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  60) 
e3c3155bc95ab (Johannes Thumshirn 2020-07-21 21:10:26 +0900  61) 	/* File zone size */
e3c3155bc95ab (Johannes Thumshirn 2020-07-21 21:10:26 +0900  62) 	loff_t			i_zone_size;
e3c3155bc95ab (Johannes Thumshirn 2020-07-21 21:10:26 +0900  63) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  64) 	/*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  65) 	 * To serialise fully against both syscall and mmap based IO and
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  66) 	 * sequential file truncation, two locks are used. For serializing
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  67) 	 * zonefs_seq_file_truncate() against zonefs_iomap_begin(), that is,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  68) 	 * file truncate operations against block mapping, i_truncate_mutex is
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  69) 	 * used. i_truncate_mutex also protects against concurrent accesses
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  70) 	 * and changes to the inode private data, and in particular changes to
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  71) 	 * a sequential file size on completion of direct IO writes.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  72) 	 * Serialization of mmap read IOs with truncate and syscall IO
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  73) 	 * operations is done with i_mmap_sem in addition to i_truncate_mutex.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  74) 	 * Only zonefs_seq_file_truncate() takes both lock (i_mmap_sem first,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  75) 	 * i_truncate_mutex second).
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  76) 	 */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  77) 	struct mutex		i_truncate_mutex;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  78) 	struct rw_semaphore	i_mmap_sem;
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900  79) 
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900  80) 	/* guarded by i_truncate_mutex */
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900  81) 	unsigned int		i_wr_refcnt;
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900  82) 	unsigned int		i_flags;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  83) };
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  84) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  85) static inline struct zonefs_inode_info *ZONEFS_I(struct inode *inode)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  86) {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  87) 	return container_of(inode, struct zonefs_inode_info, i_vnode);
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  88) }
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  89) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  90) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  91)  * On-disk super block (block 0).
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  92)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  93) #define ZONEFS_LABEL_LEN	64
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  94) #define ZONEFS_UUID_SIZE	16
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  95) #define ZONEFS_SUPER_SIZE	4096
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  96) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  97) struct zonefs_super {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  98) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900  99) 	/* Magic number */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 100) 	__le32		s_magic;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 101) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 102) 	/* Checksum */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 103) 	__le32		s_crc;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 104) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 105) 	/* Volume label */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 106) 	char		s_label[ZONEFS_LABEL_LEN];
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 107) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 108) 	/* 128-bit uuid */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 109) 	__u8		s_uuid[ZONEFS_UUID_SIZE];
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 110) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 111) 	/* Features */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 112) 	__le64		s_features;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 113) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 114) 	/* UID/GID to use for files */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 115) 	__le32		s_uid;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 116) 	__le32		s_gid;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 117) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 118) 	/* File permissions */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 119) 	__le32		s_perm;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 120) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 121) 	/* Padding to ZONEFS_SUPER_SIZE bytes */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 122) 	__u8		s_reserved[3988];
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 123) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 124) } __packed;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 125) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 126) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 127)  * Feature flags: specified in the s_features field of the on-disk super
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 128)  * block struct zonefs_super and in-memory in the s_feartures field of
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 129)  * struct zonefs_sb_info.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 130)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 131) enum zonefs_features {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 132) 	/*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 133) 	 * Aggregate contiguous conventional zones into a single file.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 134) 	 */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 135) 	ZONEFS_F_AGGRCNV = 1ULL << 0,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 136) 	/*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 137) 	 * Use super block specified UID for files instead of default 0.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 138) 	 */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 139) 	ZONEFS_F_UID = 1ULL << 1,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 140) 	/*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 141) 	 * Use super block specified GID for files instead of default 0.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 142) 	 */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 143) 	ZONEFS_F_GID = 1ULL << 2,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 144) 	/*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 145) 	 * Use super block specified file permissions instead of default 640.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 146) 	 */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 147) 	ZONEFS_F_PERM = 1ULL << 3,
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 148) };
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 149) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 150) #define ZONEFS_F_DEFINED_FEATURES \
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 151) 	(ZONEFS_F_AGGRCNV | ZONEFS_F_UID | ZONEFS_F_GID | ZONEFS_F_PERM)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 152) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 153) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 154)  * Mount options for zone write pointer error handling.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 155)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 156) #define ZONEFS_MNTOPT_ERRORS_RO		(1 << 0) /* Make zone file readonly */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 157) #define ZONEFS_MNTOPT_ERRORS_ZRO	(1 << 1) /* Make zone file offline */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 158) #define ZONEFS_MNTOPT_ERRORS_ZOL	(1 << 2) /* Make zone file offline */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 159) #define ZONEFS_MNTOPT_ERRORS_REPAIR	(1 << 3) /* Remount read-only */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 160) #define ZONEFS_MNTOPT_ERRORS_MASK	\
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 161) 	(ZONEFS_MNTOPT_ERRORS_RO | ZONEFS_MNTOPT_ERRORS_ZRO | \
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 162) 	 ZONEFS_MNTOPT_ERRORS_ZOL | ZONEFS_MNTOPT_ERRORS_REPAIR)
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900 163) #define ZONEFS_MNTOPT_EXPLICIT_OPEN	(1 << 4) /* Explicit open/close of zones on open/close */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 164) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 165) /*
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 166)  * In-memory Super block information.
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 167)  */
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 168) struct zonefs_sb_info {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 169) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 170) 	unsigned long		s_mount_opts;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 171) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 172) 	spinlock_t		s_lock;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 173) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 174) 	unsigned long long	s_features;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 175) 	kuid_t			s_uid;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 176) 	kgid_t			s_gid;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 177) 	umode_t			s_perm;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 178) 	uuid_t			s_uuid;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 179) 	unsigned int		s_zone_sectors_shift;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 180) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 181) 	unsigned int		s_nr_files[ZONEFS_ZTYPE_MAX];
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 182) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 183) 	loff_t			s_blocks;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 184) 	loff_t			s_used_blocks;
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900 185) 
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900 186) 	unsigned int		s_max_open_zones;
b5c00e975779c (Johannes Thumshirn 2020-09-11 17:56:50 +0900 187) 	atomic_t		s_open_zones;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 188) };
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 189) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 190) static inline struct zonefs_sb_info *ZONEFS_SB(struct super_block *sb)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 191) {
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 192) 	return sb->s_fs_info;
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 193) }
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 194) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 195) #define zonefs_info(sb, format, args...)	\
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 196) 	pr_info("zonefs (%s): " format, sb->s_id, ## args)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 197) #define zonefs_err(sb, format, args...)		\
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 198) 	pr_err("zonefs (%s) ERROR: " format, sb->s_id, ## args)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 199) #define zonefs_warn(sb, format, args...)	\
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 200) 	pr_warn("zonefs (%s) WARNING: " format, sb->s_id, ## args)
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 201) 
8dcc1a9d90c10 (Damien Le Moal     2019-12-25 16:07:44 +0900 202) #endif