/* GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 only, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 for more details (a copy is included * in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU General Public License * version 2 along with this program; If not, see * http://www.gnu.org/licenses/gpl-2.0.html * * GPL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * * Copyright (c) 2011, 2014, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ */ #ifndef __OBD_TARGET_H #define __OBD_TARGET_H #include #include /* server-side individual type definitions */ #define OBT_MAGIC 0xBDDECEAE /* hold common fields for "target" device */ struct obd_device_target { __u32 obt_magic; __u32 obt_instance; struct lu_target *obt_lut; __u64 obt_mount_count; struct obd_job_stats obt_jobstats; struct nm_config_file *obt_nodemap_config_file; }; #define OBJ_SUBDIR_COUNT 32 /* set to zero for no subdirs */ struct echo_obd { struct obd_device_target eo_obt; struct obdo eo_oa; spinlock_t eo_lock; u64 eo_lastino; struct lustre_handle eo_nl_lock; atomic_t eo_prep; }; struct ost_obd { struct ptlrpc_service *ost_service; struct ptlrpc_service *ost_create_service; struct ptlrpc_service *ost_io_service; struct ptlrpc_service *ost_seq_service; struct ptlrpc_service *ost_out_service; struct mutex ost_health_mutex; }; static inline struct obd_device_target *obd2obt(struct obd_device *obd) { struct obd_device_target *obt; BUILD_BUG_ON(sizeof(obd->u) < sizeof(*obt)); if (!obd) return NULL; obt = (void *)&obd->u; LASSERT(obt->obt_magic == OBT_MAGIC); return obt; } static inline struct obd_device_target *obd_obt_init(struct obd_device *obd) { struct obd_device_target *obt; obt = (void *)&obd->u; obt->obt_magic = OBT_MAGIC; obt->obt_instance = 0; return obt; } static inline struct echo_obd *obd2echo(struct obd_device *obd) { struct echo_obd *echo; BUILD_BUG_ON(sizeof(obd->u) < sizeof(*echo)); if (!obd) return NULL; echo = (void *)&obd->u; return echo; } static inline struct ost_obd *obd2ost(struct obd_device *obd) { struct ost_obd *ost; BUILD_BUG_ON(sizeof(obd->u) < sizeof(*ost)); if (!obd) return NULL; ost = (void *)&obd->u; return ost; } #endif /* __OBD_TARGET_H */