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

log.h (3062B)


      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 __LOG_DOT_H__
      8#define __LOG_DOT_H__
      9
     10#include <linux/list.h>
     11#include <linux/spinlock.h>
     12#include <linux/writeback.h>
     13#include "incore.h"
     14#include "inode.h"
     15
     16/*
     17 * The minimum amount of log space required for a log flush is one block for
     18 * revokes and one block for the log header.  Log flushes other than
     19 * GFS2_LOG_HEAD_FLUSH_NORMAL may write one or two more log headers.
     20 */
     21#define GFS2_LOG_FLUSH_MIN_BLOCKS 4
     22
     23/**
     24 * gfs2_log_lock - acquire the right to mess with the log manager
     25 * @sdp: the filesystem
     26 *
     27 */
     28
     29static inline void gfs2_log_lock(struct gfs2_sbd *sdp)
     30__acquires(&sdp->sd_log_lock)
     31{
     32	spin_lock(&sdp->sd_log_lock);
     33}
     34
     35/**
     36 * gfs2_log_unlock - release the right to mess with the log manager
     37 * @sdp: the filesystem
     38 *
     39 */
     40
     41static inline void gfs2_log_unlock(struct gfs2_sbd *sdp)
     42__releases(&sdp->sd_log_lock)
     43{
     44	spin_unlock(&sdp->sd_log_lock);
     45}
     46
     47static inline void gfs2_log_pointers_init(struct gfs2_sbd *sdp,
     48					  unsigned int value)
     49{
     50	if (++value == sdp->sd_jdesc->jd_blocks) {
     51		value = 0;
     52	}
     53	sdp->sd_log_tail = value;
     54	sdp->sd_log_flush_tail = value;
     55	sdp->sd_log_head = value;
     56}
     57
     58static inline void gfs2_ordered_add_inode(struct gfs2_inode *ip)
     59{
     60	struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
     61
     62	if (gfs2_is_jdata(ip) || !gfs2_is_ordered(sdp))
     63		return;
     64
     65	if (list_empty(&ip->i_ordered)) {
     66		spin_lock(&sdp->sd_ordered_lock);
     67		if (list_empty(&ip->i_ordered))
     68			list_add(&ip->i_ordered, &sdp->sd_log_ordered);
     69		spin_unlock(&sdp->sd_ordered_lock);
     70	}
     71}
     72
     73extern void gfs2_ordered_del_inode(struct gfs2_inode *ip);
     74extern unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct);
     75extern void gfs2_remove_from_ail(struct gfs2_bufdata *bd);
     76extern bool gfs2_log_is_empty(struct gfs2_sbd *sdp);
     77extern void gfs2_log_release_revokes(struct gfs2_sbd *sdp, unsigned int revokes);
     78extern void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks);
     79extern bool gfs2_log_try_reserve(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
     80				 unsigned int *extra_revokes);
     81extern void gfs2_log_reserve(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
     82			     unsigned int *extra_revokes);
     83extern void gfs2_write_log_header(struct gfs2_sbd *sdp, struct gfs2_jdesc *jd,
     84				  u64 seq, u32 tail, u32 lblock, u32 flags,
     85				  int op_flags);
     86extern void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl,
     87			   u32 type);
     88extern void gfs2_log_commit(struct gfs2_sbd *sdp, struct gfs2_trans *trans);
     89extern void gfs2_ail1_flush(struct gfs2_sbd *sdp, struct writeback_control *wbc);
     90extern void log_flush_wait(struct gfs2_sbd *sdp);
     91
     92extern int gfs2_logd(void *data);
     93extern void gfs2_add_revoke(struct gfs2_sbd *sdp, struct gfs2_bufdata *bd);
     94extern void gfs2_glock_remove_revoke(struct gfs2_glock *gl);
     95extern void gfs2_flush_revokes(struct gfs2_sbd *sdp);
     96extern void gfs2_ail_drain(struct gfs2_sbd *sdp);
     97
     98#endif /* __LOG_DOT_H__ */