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

meta_io.h (2554B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
      4 * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
      5 */
      6
      7#ifndef __DIO_DOT_H__
      8#define __DIO_DOT_H__
      9
     10#include <linux/buffer_head.h>
     11#include <linux/string.h>
     12#include "incore.h"
     13
     14static inline void gfs2_buffer_clear(struct buffer_head *bh)
     15{
     16	memset(bh->b_data, 0, bh->b_size);
     17}
     18
     19static inline void gfs2_buffer_clear_tail(struct buffer_head *bh, int head)
     20{
     21	BUG_ON(head > bh->b_size);
     22	memset(bh->b_data + head, 0, bh->b_size - head);
     23}
     24
     25static inline void gfs2_buffer_copy_tail(struct buffer_head *to_bh,
     26					 int to_head,
     27					 struct buffer_head *from_bh,
     28					 int from_head)
     29{
     30	BUG_ON(from_head < to_head);
     31	memcpy(to_bh->b_data + to_head, from_bh->b_data + from_head,
     32	       from_bh->b_size - from_head);
     33	memset(to_bh->b_data + to_bh->b_size + to_head - from_head,
     34	       0, from_head - to_head);
     35}
     36
     37extern const struct address_space_operations gfs2_meta_aops;
     38extern const struct address_space_operations gfs2_rgrp_aops;
     39
     40static inline struct gfs2_sbd *gfs2_mapping2sbd(struct address_space *mapping)
     41{
     42	struct inode *inode = mapping->host;
     43	if (mapping->a_ops == &gfs2_meta_aops) {
     44		struct gfs2_glock_aspace *gla =
     45			container_of(mapping, struct gfs2_glock_aspace, mapping);
     46		return gla->glock.gl_name.ln_sbd;
     47	} else if (mapping->a_ops == &gfs2_rgrp_aops)
     48		return container_of(mapping, struct gfs2_sbd, sd_aspace);
     49	else
     50		return inode->i_sb->s_fs_info;
     51}
     52
     53extern struct buffer_head *gfs2_meta_new(struct gfs2_glock *gl, u64 blkno);
     54extern int gfs2_meta_read(struct gfs2_glock *gl, u64 blkno, int flags,
     55			  int rahead, struct buffer_head **bhp);
     56extern int gfs2_meta_wait(struct gfs2_sbd *sdp, struct buffer_head *bh);
     57extern struct buffer_head *gfs2_getbuf(struct gfs2_glock *gl, u64 blkno,
     58				       int create);
     59enum {
     60	REMOVE_JDATA = 0,
     61	REMOVE_META = 1,
     62};
     63
     64extern void gfs2_remove_from_journal(struct buffer_head *bh, int meta);
     65extern void gfs2_journal_wipe(struct gfs2_inode *ip, u64 bstart, u32 blen);
     66extern int gfs2_meta_buffer(struct gfs2_inode *ip, u32 mtype, u64 num,
     67			    struct buffer_head **bhp);
     68
     69static inline int gfs2_meta_inode_buffer(struct gfs2_inode *ip,
     70					 struct buffer_head **bhp)
     71{
     72	return gfs2_meta_buffer(ip, GFS2_METATYPE_DI, ip->i_no_addr, bhp);
     73}
     74
     75struct buffer_head *gfs2_meta_ra(struct gfs2_glock *gl, u64 dblock, u32 extlen);
     76
     77#define buffer_busy(bh) \
     78((bh)->b_state & ((1ul << BH_Dirty) | (1ul << BH_Lock) | (1ul << BH_Pinned)))
     79
     80#endif /* __DIO_DOT_H__ */
     81