#define YAFFS_USE_DIR_ITERATE
#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0))
+#define YAFFS_USE_XATTR
+#endif
+
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0))
#define YAFFS_NEW_PROCFS
#include <linux/seq_file.h>
#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0))
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0))
#define PAGE_CACHE_SIZE PAGE_SIZE
#define PAGE_CACHE_SHIFT PAGE_SHIFT
#define Y_GET_DENTRY(f) ((f)->f_path.dentry)
-#define page_cache_release put_page
#define YAFFS_NEW_XATTR 1
#define YAFFS_NEW_GET_LINK 1
#else
#define YAFFS_NEW_GET_LINK 0
#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0))
+#define page_cache_release put_page
+#endif
+
#define update_dir_time(dir) do {\
(dir)->i_ctime = (dir)->i_mtime = CURRENT_TIME; \
} while (0)
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0))
+static inline int setattr_prepare(struct dentry *dentry, struct iattr *attr)
+{
+ return inode_change_ok(dentry->d_inode, attr);
+}
+#endif
+
static void yaffs_fill_inode_from_obj(struct inode *inode,
struct yaffs_obj *obj);
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
static const struct file_operations yaffs_file_operations = {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 0)
.read = new_sync_read,
.write = new_sync_write,
#endif
#endif
if (error == 0)
- error = inode_change_ok(inode, attr);
+ error = setattr_prepare(dentry, attr);
if (error == 0) {
int result;
if (!error) {
return error;
}
+#ifdef YAFFS_USE_XATTR
#if (YAFFS_NEW_XATTR > 0)
static int yaffs_setxattr(struct dentry *dentry, struct inode *inode,
const char *name, const void *value, size_t size, int flags)
return error;
}
-#ifdef YAFFS_NEW_XATTR
+#if (YAFFS_NEW_XATTR > 0)
static ssize_t yaffs_getxattr(struct dentry * dentry, struct inode *inode,
const char *name, void *buff, size_t size)
{
return error;
}
+#endif
static ssize_t yaffs_listxattr(struct dentry * dentry, char *buff, size_t size)
{
static const struct inode_operations yaffs_file_inode_operations = {
.setattr = yaffs_setattr,
+#ifdef YAFFS_USE_XATTR
.setxattr = yaffs_setxattr,
.getxattr = yaffs_getxattr,
- .listxattr = yaffs_listxattr,
.removexattr = yaffs_removexattr,
+#endif
+ .listxattr = yaffs_listxattr,
};
.put_link = yaffs_put_link,
#endif
.setattr = yaffs_setattr,
+#ifdef YAFFS_USE_XATTR
.setxattr = yaffs_setxattr,
.getxattr = yaffs_getxattr,
- .listxattr = yaffs_listxattr,
.removexattr = yaffs_removexattr,
+#endif
+ .listxattr = yaffs_listxattr,
};
#ifdef YAFFS_USE_OWN_IGET
*
* NB: POSIX says you can rename an object over an old object of the same name
*/
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0))
+static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
+ struct inode *new_dir, struct dentry *new_dentry, unsigned int unused)
+#else
static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry)
+#endif
{
struct yaffs_dev *dev;
int ret_val = YAFFS_FAIL;
.mknod = yaffs_mknod,
.rename = yaffs_rename,
.setattr = yaffs_setattr,
+ .listxattr = yaffs_listxattr,
+#ifdef YAFFS_USE_XATTR
.setxattr = yaffs_setxattr,
.getxattr = yaffs_getxattr,
- .listxattr = yaffs_listxattr,
.removexattr = yaffs_removexattr,
+#endif
};
/*-----------------------------------------------------------------*/