/* * MARS Long Distance Replication Software * * This file is part of MARS project: http://schoebel.github.io/mars/ * * Copyright (C) 2010-2014 Thomas Schoebel-Theuer * Copyright (C) 2011-2014 1&1 Internet AG * * 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. * * 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 for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _MARS_COMPAT #define _MARS_COMPAT #include /* FIXME: some Redhat/openvz kernels seem to have both (backporting etc). * The following is an incomplete quickfix / workaround. TBD. */ #if !defined(__WAIT_ATOMIC_T_KEY_INITIALIZER) || defined(RHEL_RELEASE) #define HAS_VFS_READDIR #elif !defined(f_dentry) #define __HAS_NEW_FILLDIR_T #endif #ifdef RENAME_NOREPLACE #define __HAS_RENAME2 #endif /* TRANSITIONAL compatibility to the old/new prepatch * and the new wrappers around vfs_*(). */ #ifdef MARS_MAJOR /* * Obey 819671ff849b07b9831b91de879ddc5da4b333d4 as much as possible, * detected via 57b56ac6fecb05c3192586e4892572dd13d972de */ #ifdef SB_I_UNTRUSTED_MOUNTER #define MARS_HAS_PREPATCH_V2 #undef HAS_VFS_READDIR #define __HAS_NEW_FILLDIR_T #else /* old prepatch (to disappear), using deprecated sys_*() calls */ #define MARS_HAS_PREPATCH #endif #else #define MARS_MAJOR (DRBD_MAJOR + 1) #endif #if defined(MARS_HAS_PREPATCH_V2) || defined(MARS_HAS_PREPATCH) #include #else /* MARS_HAS_PREPATCH */ #include #include #include "lamport.h" extern int _compat_symlink( const char __user *oldname, const char __user *newname, struct lamport_time *mtime); extern int _compat_mkdir( const char __user *pathname, int mode); extern int _compat_rename( const char __user *oldname, const char __user *newname); extern int _compat_unlink( const char __user *pathname); #endif /* MARS_HAS_PREPATCH */ /* Various compatibility checks for upstream kernels. * This is a hell. */ /* For bio block layer compatibility */ #include #include #ifdef __bvec_iter_bvec #define MARS_HAS_BVEC_ITER #endif /* Detect upstream commits * dc3b17cc8bf21307c7e076e7c778d5db756f7871 * d03f6cdc1fc422accb734c7c07a661a0018d8631 * b1d2dc5659b41741f5a29b2ade76ffb4e5bb13d8 * via fd2d332677c687ca90c12a47d6c377c547100b56 */ #include #ifdef BLK_QC_T_INTERNAL #define MARS_HAS_BDI_GET #endif #ifdef MARS_HAS_BDI_GET #include #endif /* Detect upstream commits * 2a842acab109f40f0d7d10b38e9ca88390628996 * 4e4cbee93d56137ebff722be022cae5f70ef84fb * & neighbour commits. */ #ifdef BLK_STS_OK #define MARS_HAS_BI_STATUS #else /* adaptation to 4246a0b63bd8f56a1469b12eafeb875b1041a451 and 8ae126660fddbeebb9251a174e6fa45b6ad8f932 */ #ifndef bio_io_error #define MARS_HAS_BI_ERROR #else #define MARS_HAS_MERGE_BVEC #endif #endif /* Adapt to 74d46992e0d9dee7f1f376de0d56d31614c8a17a */ #ifdef bio_set_dev #define MARS_HAS_SET_DEV #endif /* adapt to 4e1b2d52a80d79296a5d899d73249748dea71a53 and many others */ #ifdef bio_op #define MARS_HAS_NEW_BIO_OP #endif #ifdef bio_end_sector #define MARS_HAS_VOID_RELEASE #endif #ifdef __bvec_iter_bvec #define MARS_HAS_BVEC_ITER #endif /* 54efd50bfd873e2dbf784e0b21a8027ba4299a3e and 8ae126660fddbeebb9251a174e6fa45b6ad8f932, * detected via 4246a0b63bd8f56a1469b12eafeb875b1041a451 */ #ifndef BIO_UPTODATE #define NEED_BIO_SPLIT #endif /* Adapt to modification of blk_queue_split() in * af67c31fba3b879b241536a48df703a2eee18ebf * detected via f4560ffe8cec1361b1021d81aca6a4173f8e7c87 */ #ifdef QUEUE_FLAG_QUIESCED #define MARS_HAS_BIO_SPLIT2 #endif /* adapt to 4e1b2d52a80d79296a5d899d73249748dea71a53 and many others */ #ifdef bio_op #define MARS_HAS_NEW_BIO_OP #endif /* adapt to 8d2bbd4c8236e9e38e6b36ac9e2c54fdcfe5b335 */ #ifdef BIO_THROTTLED #define MARS_HAS_BIO_THROTTLED #endif /* IO accounting */ /* adapt to 394ffa503bc40e32d7f54a9b817264e81ce131b4 * detected via b25de9d6da49b1a8760a89672283128aa8c7 */ #ifndef BIO_EOPNOTSUPP #define MARS_HAS_GENERIC_BLK_ACCOUNTING #elif defined(part_stat_lock) #define MARS_HAS_OLD_BLK_ACCOUNTING #endif /* adapt to d62e26b3ffd28f16ddae85a1babd0303a1a6dfb6 * detected via e743eb1ecd5564b5ae0a4a76c1566f748a358839 */ #ifndef QUEUE_FLAG_SYNCFULL #define MARS_HAS_NEW_GENERIC_BLK_ACCOUNTING #endif /* vfs stuff */ /* Adapt to * eb031849d52e61d24ba54e9d27553189ff328174 and siblings * bdd1d2d3d251c65b74ac4493e08db18971c09240 * e13ec939e96b13e664bb6cee361cc976a0ee621a * detected via e462ec50cb5fad19f6003a3d8087f4a0945dd2b1 */ #ifdef SB_RDONLY #define MARS_HAS_KERNEL_READ #endif /* Adapt to fd4a0edf2a3d781c6ae07d2810776ce22302ee1c * detected via 76fca90e9f3abc82114d9d02d8e14e0324a18ca2 */ #ifdef IOP_DEFAULT_READLINK #define MARS_HAS_VFS_READLINK #endif /* for mm stuff, should disappear */ /* adapt to 68e21be2916b359fd8afb536c1911dc014cfd03e * detected via dea38c74cb9205341f52b8d8ae18f61247a43ea8 */ #ifndef CALC_LOAD #include #endif /* for networking */ #include #ifndef TCP_MAX_REORDERING #define __HAS_IOV_ITER #endif /* see eeb1bd5c40edb0e2fd925c8535e2fdebdbc5cef2 */ #ifdef sk_net_refcnt #define __HAS_STRUCT_NET #endif /* for crypto stuff */ #include /* * Forced by 896545098777564212b9e91af4c973f094649aa7 * Detected by 7b5a080b3c46f0cac71c0d0262634c6517d4ee4f */ #ifdef CRYPTO_ALG_TYPE_SHASH #define MARS_HAS_NEW_CRYPTO #endif #if defined(CONFIG_CRC32C) || defined(CONFIG_CRYPTO_CRC32C) || defined(CONFIG_CRYPTO_CRC32C_MODULE) #define HAS_CRC32C #endif #if defined(CONFIG_CRC32) || defined(CONFIG_CRYPTO_CRC32) || defined(CONFIG_CRYPTO_CRC32_MODULE) #define HAS_CRC32 #endif #if defined(CONFIG_CRYPTO_SHA1) || defined(CONFIG_CRYPTO_SHA1_MODULE) #define HAS_SHA1 #endif /* compression stuff */ #if (defined(CONFIG_LZO_COMPRESS) || defined(CONFIG_LZO_COMPRESS_MODULE)) && \ (defined(CONFIG_LZO_DECOMPRESS) || defined(CONFIG_LZO_DECOMPRESS_MODULE)) #include #define HAS_LZO #endif #if (defined(CONFIG_LZ4_COMPRESS) || defined(CONFIG_LZ4_COMPRESS_MODULE)) && \ (defined(CONFIG_LZ4_DECOMPRESS) || defined(CONFIG_LZ4_DECOMPRESS_MODULE)) #include #define HAS_LZ4 /* adapt to 4e1a33b105ddf201f66dcc44490c6086a25eca0b */ #ifdef LZ4_ACCELERATION_DEFAULT #define HAS_FAST_LZ4 #endif #endif #if defined(CONFIG_ZLIB_INFLATE) && defined(CONFIG_ZLIB_DEFLATE) #include #define HAS_ZLIB #endif /* general compat */ /* new code prefers READ_ONCE in place of ACCESS_ONCE */ #ifndef READ_ONCE #define READ_ONCE ACCESS_ONCE #endif #endif /* _MARS_COMPAT */