cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

jfs_xtree.h (3031B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *   Copyright (C) International Business Machines Corp., 2000-2002
      4 */
      5#ifndef _H_JFS_XTREE
      6#define _H_JFS_XTREE
      7
      8/*
      9 *	jfs_xtree.h: extent allocation descriptor B+-tree manager
     10 */
     11
     12#include "jfs_btree.h"
     13
     14
     15/*
     16 *	extent allocation descriptor (xad)
     17 */
     18typedef struct xad {
     19	__u8 flag;	/* 1: flag */
     20	__u8 rsvrd[2];	/* 2: reserved */
     21	__u8 off1;	/* 1: offset in unit of fsblksize */
     22	__le32 off2;	/* 4: offset in unit of fsblksize */
     23	pxd_t loc;	/* 8: length and address in unit of fsblksize */
     24} xad_t;			/* (16) */
     25
     26#define MAXXLEN		((1 << 24) - 1)
     27
     28#define XTSLOTSIZE	16
     29#define L2XTSLOTSIZE	4
     30
     31/* xad_t field construction */
     32#define XADoffset(xad, offset64)\
     33{\
     34	(xad)->off1 = ((u64)offset64) >> 32;\
     35	(xad)->off2 = __cpu_to_le32((offset64) & 0xffffffff);\
     36}
     37#define XADaddress(xad, address64) PXDaddress(&(xad)->loc, address64)
     38#define XADlength(xad, length32) PXDlength(&(xad)->loc, length32)
     39
     40/* xad_t field extraction */
     41#define offsetXAD(xad)\
     42	( ((s64)((xad)->off1)) << 32 | __le32_to_cpu((xad)->off2))
     43#define addressXAD(xad) addressPXD(&(xad)->loc)
     44#define lengthXAD(xad) lengthPXD(&(xad)->loc)
     45
     46/* xad list */
     47struct xadlist {
     48	s16 maxnxad;
     49	s16 nxad;
     50	xad_t *xad;
     51};
     52
     53/* xad_t flags */
     54#define XAD_NEW		0x01	/* new */
     55#define XAD_EXTENDED	0x02	/* extended */
     56#define XAD_COMPRESSED	0x04	/* compressed with recorded length */
     57#define XAD_NOTRECORDED 0x08	/* allocated but not recorded */
     58#define XAD_COW		0x10	/* copy-on-write */
     59
     60
     61/* possible values for maxentry */
     62#define XTROOTINITSLOT_DIR 6
     63#define XTROOTINITSLOT	10
     64#define XTROOTMAXSLOT	18
     65#define XTPAGEMAXSLOT	256
     66#define XTENTRYSTART	2
     67
     68/*
     69 *	xtree page:
     70 */
     71typedef union {
     72	struct xtheader {
     73		__le64 next;	/* 8: */
     74		__le64 prev;	/* 8: */
     75
     76		u8 flag;	/* 1: */
     77		u8 rsrvd1;	/* 1: */
     78		__le16 nextindex;	/* 2: next index = number of entries */
     79		__le16 maxentry;	/* 2: max number of entries */
     80		__le16 rsrvd2;	/* 2: */
     81
     82		pxd_t self;	/* 8: self */
     83	} header;		/* (32) */
     84
     85	xad_t xad[XTROOTMAXSLOT];	/* 16 * maxentry: xad array */
     86} xtpage_t;
     87
     88/*
     89 *	external declaration
     90 */
     91extern int xtLookup(struct inode *ip, s64 lstart, s64 llen,
     92		    int *pflag, s64 * paddr, int *plen, int flag);
     93extern void xtInitRoot(tid_t tid, struct inode *ip);
     94extern int xtInsert(tid_t tid, struct inode *ip,
     95		    int xflag, s64 xoff, int xlen, s64 * xaddrp, int flag);
     96extern int xtExtend(tid_t tid, struct inode *ip, s64 xoff, int xlen,
     97		    int flag);
     98extern int xtUpdate(tid_t tid, struct inode *ip, struct xad *nxad);
     99extern int xtDelete(tid_t tid, struct inode *ip, s64 xoff, int xlen,
    100		    int flag);
    101extern s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int type);
    102extern s64 xtTruncate_pmap(tid_t tid, struct inode *ip, s64 committed_size);
    103extern int xtRelocate(tid_t tid, struct inode *ip,
    104		      xad_t * oxad, s64 nxaddr, int xtype);
    105extern int xtAppend(tid_t tid,
    106		    struct inode *ip, int xflag, s64 xoff, int maxblocks,
    107		    int *xlenp, s64 * xaddrp, int flag);
    108#endif				/* !_H_JFS_XTREE */