volume.h
来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 143 行
H
143 行
/* volume.h: AFS volume management * * Copyright (C) 2002 Red Hat, Inc. All Rights Reserved. * Written by David Howells (dhowells@redhat.com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */#ifndef _LINUX_AFS_VOLUME_H#define _LINUX_AFS_VOLUME_H#include "types.h"#include "fsclient.h"#include "kafstimod.h"#include "kafsasyncd.h"#include "cache.h"#define __packed __attribute__((packed))typedef enum { AFS_VLUPD_SLEEP, /* sleeping waiting for update timer to fire */ AFS_VLUPD_PENDING, /* on pending queue */ AFS_VLUPD_INPROGRESS, /* op in progress */ AFS_VLUPD_BUSYSLEEP, /* sleeping because server returned EBUSY */ } __attribute__((packed)) afs_vlocation_upd_t;/*****************************************************************************//* * entry in the cached volume location catalogue */struct afs_cache_vlocation{ uint8_t name[64]; /* volume name (lowercase, padded with NULs) */ uint8_t nservers; /* number of entries used in servers[] */ uint8_t vidmask; /* voltype mask for vid[] */ uint8_t srvtmask[8]; /* voltype masks for servers[] */#define AFS_VOL_VTM_RW 0x01 /* R/W version of the volume is available (on this server) */#define AFS_VOL_VTM_RO 0x02 /* R/O version of the volume is available (on this server) */#define AFS_VOL_VTM_BAK 0x04 /* backup version of the volume is available (on this server) */ afs_volid_t vid[3]; /* volume IDs for R/W, R/O and Bak volumes */ struct in_addr servers[8]; /* fileserver addresses */ time_t rtime; /* last retrieval time */};#ifdef AFS_CACHING_SUPPORTextern struct cachefs_index_def afs_vlocation_cache_index_def;#endif/*****************************************************************************//* * volume -> vnode hash table entry */struct afs_cache_vhash{ afs_voltype_t vtype; /* which volume variation */ uint8_t hash_bucket; /* which hash bucket this represents */} __attribute__((packed));#ifdef AFS_CACHING_SUPPORTextern struct cachefs_index_def afs_volume_cache_index_def;#endif/*****************************************************************************//* * AFS volume location record */struct afs_vlocation{ atomic_t usage; struct list_head link; /* link in cell volume location list */ struct afs_timer timeout; /* decaching timer */ struct afs_cell *cell; /* cell to which volume belongs */#ifdef AFS_CACHING_SUPPORT struct cachefs_cookie *cache; /* caching cookie */#endif struct afs_cache_vlocation vldb; /* volume information DB record */ struct afs_volume *vols[3]; /* volume access record pointer (index by type) */ rwlock_t lock; /* access lock */ unsigned long read_jif; /* time at which last read from vlserver */ struct afs_timer upd_timer; /* update timer */ struct afs_async_op upd_op; /* update operation */ afs_vlocation_upd_t upd_state; /* update state */ unsigned short upd_first_svix; /* first server index during update */ unsigned short upd_curr_svix; /* current server index during update */ unsigned short upd_rej_cnt; /* ENOMEDIUM count during update */ unsigned short upd_busy_cnt; /* EBUSY count during update */ unsigned short valid; /* T if valid */};extern int afs_vlocation_lookup(struct afs_cell *cell, const char *name, unsigned namesz, struct afs_vlocation **_vlocation);#define afs_get_vlocation(V) do { atomic_inc(&(V)->usage); } while(0)extern void afs_put_vlocation(struct afs_vlocation *vlocation);extern void afs_vlocation_do_timeout(struct afs_vlocation *vlocation);/*****************************************************************************//* * AFS volume access record */struct afs_volume{ atomic_t usage; struct afs_cell *cell; /* cell to which belongs (unrefd ptr) */ struct afs_vlocation *vlocation; /* volume location */#ifdef AFS_CACHING_SUPPORT struct cachefs_cookie *cache; /* caching cookie */#endif afs_volid_t vid; /* volume ID */ afs_voltype_t __packed type; /* type of volume */ char type_force; /* force volume type (suppress R/O -> R/W) */ unsigned short nservers; /* number of server slots filled */ unsigned short rjservers; /* number of servers discarded due to -ENOMEDIUM */ struct afs_server *servers[8]; /* servers on which volume resides (ordered) */ struct rw_semaphore server_sem; /* lock for accessing current server */};extern int afs_volume_lookup(const char *name, struct afs_cell *cell, int rwpath, struct afs_volume **_volume);#define afs_get_volume(V) do { atomic_inc(&(V)->usage); } while(0)extern void afs_put_volume(struct afs_volume *volume);extern int afs_volume_pick_fileserver(struct afs_volume *volume, struct afs_server **_server);extern int afs_volume_release_fileserver(struct afs_volume *volume, struct afs_server *server, int result);#endif /* _LINUX_AFS_VOLUME_H */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?