1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* -*- mode: c; c-basic-offset: 8; -*- 3*4882a593Smuzhiyun * vim: noexpandtab sw=8 ts=8 sts=0: 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * filecheck.h 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Online file check. 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * Copyright (C) 2016 SuSE. All rights reserved. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #ifndef FILECHECK_H 14*4882a593Smuzhiyun #define FILECHECK_H 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include <linux/types.h> 17*4882a593Smuzhiyun #include <linux/list.h> 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun /* File check errno */ 21*4882a593Smuzhiyun enum { 22*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_SUCCESS = 0, /* Success */ 23*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_FAILED = 1000, /* Other failure */ 24*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_INPROGRESS, /* In progress */ 25*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_READONLY, /* Read only */ 26*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_INJBD, /* Buffer in jbd */ 27*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_INVALIDINO, /* Invalid ino */ 28*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_BLOCKECC, /* Block ecc */ 29*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_BLOCKNO, /* Block number */ 30*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_VALIDFLAG, /* Inode valid flag */ 31*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_GENERATION, /* Inode generation */ 32*4882a593Smuzhiyun OCFS2_FILECHECK_ERR_UNSUPPORTED /* Unsupported */ 33*4882a593Smuzhiyun }; 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define OCFS2_FILECHECK_ERR_START OCFS2_FILECHECK_ERR_FAILED 36*4882a593Smuzhiyun #define OCFS2_FILECHECK_ERR_END OCFS2_FILECHECK_ERR_UNSUPPORTED 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun struct ocfs2_filecheck { 39*4882a593Smuzhiyun struct list_head fc_head; /* File check entry list head */ 40*4882a593Smuzhiyun spinlock_t fc_lock; 41*4882a593Smuzhiyun unsigned int fc_max; /* Maximum number of entry in list */ 42*4882a593Smuzhiyun unsigned int fc_size; /* Current entry count in list */ 43*4882a593Smuzhiyun unsigned int fc_done; /* Finished entry count in list */ 44*4882a593Smuzhiyun }; 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define OCFS2_FILECHECK_MAXSIZE 100 47*4882a593Smuzhiyun #define OCFS2_FILECHECK_MINSIZE 10 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun /* File check operation type */ 50*4882a593Smuzhiyun enum { 51*4882a593Smuzhiyun OCFS2_FILECHECK_TYPE_CHK = 0, /* Check a file(inode) */ 52*4882a593Smuzhiyun OCFS2_FILECHECK_TYPE_FIX, /* Fix a file(inode) */ 53*4882a593Smuzhiyun OCFS2_FILECHECK_TYPE_SET = 100 /* Set entry list maximum size */ 54*4882a593Smuzhiyun }; 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun struct ocfs2_filecheck_sysfs_entry { /* sysfs entry per partition */ 57*4882a593Smuzhiyun struct kobject fs_kobj; 58*4882a593Smuzhiyun struct completion fs_kobj_unregister; 59*4882a593Smuzhiyun struct ocfs2_filecheck *fs_fcheck; 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun int ocfs2_filecheck_create_sysfs(struct ocfs2_super *osb); 64*4882a593Smuzhiyun void ocfs2_filecheck_remove_sysfs(struct ocfs2_super *osb); 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun #endif /* FILECHECK_H */ 67