]) # LC_KIOCB_HAS_NBYTES
#
+# LC_BACKING_DEV_INFO_REMOVAL
+#
+# 3.20 kernel removed backing_dev_info from address_space
+#
+AC_DEFUN([LC_BACKING_DEV_INFO_REMOVAL], [
+LB_CHECK_COMPILE([if struct address_space has backing_dev_info],
+backing_dev_info, [
+ #include <linux/fs.h>
+],[
+ struct address_space mapping;
+
+ mapping.backing_dev_info = NULL;
+],[
+ AC_DEFINE(HAVE_BACKING_DEV_INFO, 1, [backing_dev_info exist])
+])
+]) # LC_BACKING_DEV_INFO_REMOVAL
+
+#
+# LC_HAVE_BDI_CAP_MAP_COPY
+#
+# 3.20 removed mmap handling for backing devices since
+# it breaks on non-MMU systems. See kernel commit
+# b4caecd48005fbed3949dde6c1cb233142fd69e9
+#
+AC_DEFUN([LC_HAVE_BDI_CAP_MAP_COPY], [
+LB_CHECK_COMPILE([if have 'BDI_CAP_MAP_COPY'],
+bdi_cap_map_copy, [
+ #include <linux/backing-dev.h>
+],[
+ struct backing_dev_info info;
+
+ info.capabilities = BDI_CAP_MAP_COPY;
+],[
+ AC_DEFINE(HAVE_BDI_CAP_MAP_COPY, 1,
+ [BDI_CAP_MAP_COPY exist])
+])
+]) # LC_HAVE_BDI_CAP_MAP_COPY
+
+#
# LC_CANCEL_DIRTY_PAGE
#
# 4.0.0 kernel removed cancle_dirty_page
# 3.19
LC_KIOCB_HAS_NBYTES
+ # 3.20
+ LC_BACKING_DEV_INFO_REMOVAL
+ LC_HAVE_BDI_CAP_MAP_COPY
+
# 4.0.0
LC_CANCEL_DIRTY_PAGE
if (err)
GOTO(out_free, err);
lsi->lsi_flags |= LSI_BDI_INITIALIZED;
+#ifdef HAVE_BDI_CAP_MAP_COPY
lsi->lsi_bdi.capabilities = BDI_CAP_MAP_COPY;
+#else
+ lsi->lsi_bdi.capabilities = 0;
+#endif
err = ll_bdi_register(&lsi->lsi_bdi);
if (err)
GOTO(out_free, err);
LTIME_S(inode->i_ctime) = 0;
inode->i_rdev = 0;
+#ifdef HAVE_BACKING_DEV_INFO
/* initializing backing dev info. */
inode->i_mapping->backing_dev_info =
&s2lsi(inode->i_sb)->lsi_bdi;
+#endif
inode->i_op = &ll_dir_inode_operations;
inode->i_fop = &ll_dir_operations;
lli->lli_fid = *fid;
/* OIDEBUG(inode); */
- /* initializing backing dev info. */
- inode->i_mapping->backing_dev_info = &s2lsi(inode->i_sb)->lsi_bdi;
-
-
+#ifdef HAVE_BACKING_DEV_INFO
+ /* initializing backing dev info. */
+ inode->i_mapping->backing_dev_info = &s2lsi(inode->i_sb)->lsi_bdi;
+#endif
if (S_ISREG(inode->i_mode)) {
struct ll_sb_info *sbi = ll_i2sbi(inode);
inode->i_op = &ll_file_inode_operations;