*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
#include <linux/fs_struct.h>
#include <linux/namei.h>
+#include <linux/pagemap.h>
+#include <linux/bio.h>
+#include <libcfs/libcfs.h>
#include <lustre_patchless_compat.h>
#ifdef HAVE_FS_STRUCT_RWLOCK
#define FS_HAS_FIEMAP (0)
#endif
-/* add a lustre compatible layer for crypto API */
-#include <linux/crypto.h>
-static inline int ll_crypto_hmac(struct crypto_hash *tfm,
- u8 *key, unsigned int *keylen,
- struct scatterlist *sg,
- unsigned int size, u8 *result)
-{
- struct hash_desc desc;
- int rv;
- desc.tfm = tfm;
- desc.flags = 0;
- rv = crypto_hash_setkey(desc.tfm, key, *keylen);
- if (rv) {
- CERROR("failed to hash setkey: %d\n", rv);
- return rv;
- }
- return crypto_hash_digest(&desc, sg, size, result);
-}
-
-static inline
-unsigned int ll_crypto_tfm_alg_min_keysize(struct crypto_blkcipher *tfm)
-{
- return crypto_blkcipher_tfm(tfm)->__crt_alg->cra_blkcipher.min_keysize;
-}
-
#ifndef HAVE_SIMPLE_SETATTR
#define simple_setattr(dentry, ops) inode_setattr((dentry)->d_inode, ops)
#endif
#ifdef HAVE_BVEC_ITER
#define bio_idx(bio) (bio->bi_iter.bi_idx)
#define bio_set_sector(bio, sector) (bio->bi_iter.bi_sector = sector)
+#define bvl_to_page(bvl) (bvl->bv_page)
#else
#define bio_idx(bio) (bio->bi_idx)
#define bio_set_sector(bio, sector) (bio->bi_sector = sector)
#ifndef HAVE_BIO_END_SECTOR
#define bio_end_sector(bio) (bio->bi_sector + bio_sectors(bio))
#endif
-#define bvec_iter_page(bvec, iter) (*bvec->bv_page)
+#define bvl_to_page(bvl) (bvl->bv_page)
#endif
#ifndef HAVE_BLK_QUEUE_MAX_SEGMENTS
# define TIMES_SET_FLAGS (ATTR_MTIME_SET | ATTR_ATIME_SET)
#endif
+#ifndef XATTR_NAME_POSIX_ACL_ACCESS
+# define XATTR_NAME_POSIX_ACL_ACCESS POSIX_ACL_XATTR_ACCESS
+#endif
+
+#ifndef XATTR_NAME_POSIX_ACL_DEFAULT
+# define XATTR_NAME_POSIX_ACL_DEFAULT POSIX_ACL_XATTR_DEFAULT
+#endif
+
#ifndef HAVE_LM_XXX_LOCK_MANAGER_OPS
# define lm_compare_owner fl_compare_owner
#endif
return flag;
}
-#ifdef HAVE_VOID_MAKE_REQUEST_FN
-# define ll_mrf_ret void
-# define LL_MRF_RETURN(rc)
+#ifdef HAVE_QC_MAKE_REQUEST_FN
+# define ll_mrf_ret blk_qc_t
+# define LL_MRF_RETURN(rc) RETURN(BLK_QC_T_NONE)
#else
-# define ll_mrf_ret int
-# define LL_MRF_RETURN(rc) RETURN(rc)
+# ifdef HAVE_VOID_MAKE_REQUEST_FN
+# define ll_mrf_ret void
+# define LL_MRF_RETURN(rc)
+# else
+# define ll_mrf_ret int
+# define LL_MRF_RETURN(rc) RETURN(rc)
+# endif
#endif
#include <linux/fs.h>
# define set_file_inode(file, inode)
#endif
+#ifndef HAVE_FILE_INODE
+static inline struct inode *file_inode(const struct file *file)
+{
+ return file->f_path.dentry->d_inode;
+}
+#endif
+
#ifdef HAVE_OLDSIZE_TRUNCATE_PAGECACHE
#define ll_truncate_pagecache(inode, size) truncate_pagecache(inode, 0, size)
#else
#define ll_vfs_unlink(a, b) vfs_unlink(a, b)
#endif
+#ifndef HAVE_INODE_LOCK
+# define inode_lock(inode) mutex_lock(&(inode)->i_mutex)
+# define inode_unlock(inode) mutex_unlock(&(inode)->i_mutex)
+# define inode_trylock(inode) mutex_trylock(&(inode)->i_mutex)
+#endif
+
#ifndef HAVE_RADIX_EXCEPTION_ENTRY
static inline int radix_tree_exceptional_entry(void *arg)
{
security_inode_init_security(inode, dir, name, value, len)
#endif
+#ifndef bio_for_each_segment_all /* since kernel version 3.9 */
+#ifdef HAVE_BVEC_ITER
+#define bio_for_each_segment_all(bv, bio, it) \
+ for (it = 0, bv = (bio)->bi_io_vec; it < (bio)->bi_vcnt; it++, bv++)
+#else
+#define bio_for_each_segment_all(bv, bio, it) bio_for_each_segment(bv, bio, it)
+#endif
+#endif
+
+#ifdef HAVE_PID_NS_FOR_CHILDREN
+# define ll_task_pid_ns(task) ((task)->nsproxy->pid_ns_for_children)
+#else
+# define ll_task_pid_ns(task) ((task)->nsproxy->pid_ns)
+#endif
+
#endif /* _LUSTRE_COMPAT_H */