linux/fs/jfs/jfs_xtree.h
<<
>>
Prefs
   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);
  98#ifdef _NOTYET
  99extern int xtTailgate(tid_t tid, struct inode *ip,
 100                      s64 xoff, int xlen, s64 xaddr, int flag);
 101#endif
 102extern int xtUpdate(tid_t tid, struct inode *ip, struct xad *nxad);
 103extern int xtDelete(tid_t tid, struct inode *ip, s64 xoff, int xlen,
 104                    int flag);
 105extern s64 xtTruncate(tid_t tid, struct inode *ip, s64 newsize, int type);
 106extern s64 xtTruncate_pmap(tid_t tid, struct inode *ip, s64 committed_size);
 107extern int xtRelocate(tid_t tid, struct inode *ip,
 108                      xad_t * oxad, s64 nxaddr, int xtype);
 109extern int xtAppend(tid_t tid,
 110                    struct inode *ip, int xflag, s64 xoff, int maxblocks,
 111                    int *xlenp, s64 * xaddrp, int flag);
 112#endif                          /* !_H_JFS_XTREE */
 113