1 /*
   2  * This file and its contents are supplied under the terms of the
   3  * Common Development and Distribution License ("CDDL"), version 1.0.
   4  * You may only use this file in accordance with the terms of version
   5  * 1.0 of the CDDL.
   6  *
   7  * A full copy of the text of the CDDL should have accompanied this
   8  * source.  A copy of the CDDL is also available via the Internet at
   9  * http://www.illumos.org/license/CDDL.
  10  */
  11 
  12 /*
  13  * Copyright 2013 Damian Bogel.  All rights reserved.
  14  */
  15 
  16 #ifndef _FSD_H
  17 #define _FSD_H
  18 
  19 /*
  20  * TODO: Describe the purpose of the file here.
  21  */
  22 
  23 #ifdef __cplusplus
  24 extern "C" {
  25 #endif
  26 
  27 #include <sys/ksynch.h>
  28 #include <sys/list.h>
  29 #include <sys/types.h>
  30 #include <sys/vfs.h>
  31 
  32 
  33 #define FSD_DEV_PATH    "/dev/fsd"
  34 
  35 /*
  36  * Commands for ioctl().
  37  */
  38 #define FSDIOC  (('f' << 24) | ('s' << 16) | ('d' << 8))
  39 #define FSD_GET_STATUS          (FSDIOC | 1)
  40 #define FSD_ENABLE              (FSDIOC | 2)
  41 #define FSD_DISABLE             (FSDIOC | 3)
  42 #define FSD_DISTURB             (FSDIOC | 4)
  43 #define FSD_NODISTURB           (FSDIOC | 5)
  44 #define FSD_DISTURB_NEW         (FSDIOC | 6)
  45 #define FSD_NODISTURB_NEW       (FSDIOC | 7)
  46 
  47 #define FSD_ENTRY_NOT_FOUND     1
  48 #define FSD_BAD_STAT            2
  49 #define FSD_BAD_FD              3
  50 #define FSD_NOT_ENABLED         4
  51 
  52 typedef struct fsd_stat {
  53         uint64_t        fsds_read_less_chance;
  54         uint64_t        fsds_read_less_r[2];    /* range */
  55 } fsd_stat_t;
  56 
  57 
  58 typedef struct fsd_ioc_stat {
  59         int64_t         fsdis_mnt;
  60         fsd_stat_t      fsdis_stat;
  61 } fsd_ioc_stat_t;
  62 
  63 /*
  64  * Once a set of hooks is installed on a filesystem, there's no need
  65  * to bother fsh if we want to change the parameters of disturbance.
  66  * Intead, we use fsdsi_lock to protect the fsd_stat_int_t when it's being
  67  * used and changed.
  68  */
  69 typedef struct fsd_stat_int {
  70         krwlock_t       fsdsi_lock; /* protects fsdsi_stat */
  71         vfs_t           *fsdsi_vfsp;
  72         fsd_stat_t      fsdsi_stat;
  73         list_node_t     fsdsi_next;
  74 } fsd_stat_int_t;
  75 
  76 #ifdef __cplusplus
  77 }
  78 #endif
  79 
  80 #endif /* _FSD_H */