* published by the Free Software Foundation.
*/
#include "fsck.h"
+#include "xattr.h"
#include "quotaio.h"
#include <time.h>
node_blk->i.i_inline &= ~F2FS_EXTRA_ATTR;
need_fix = 1;
}
+
+ if ((c.feature &
+ cpu_to_le32(F2FS_FEATURE_FLEXIBLE_INLINE_XATTR)) &&
+ (node_blk->i.i_inline & F2FS_INLINE_XATTR)) {
+ unsigned int inline_size =
+ le16_to_cpu(node_blk->i.i_inline_xattr_size);
+
+ if (!inline_size ||
+ inline_size > MAX_INLINE_XATTR_SIZE) {
+ FIX_MSG("ino[0x%x] recover inline xattr size "
+ "from %u to %u",
+ nid, inline_size,
+ DEFAULT_INLINE_XATTR_ADDRS);
+ node_blk->i.i_inline_xattr_size =
+ cpu_to_le16(DEFAULT_INLINE_XATTR_ADDRS);
+ need_fix = 1;
+ }
+ }
}
ofs = get_extra_isize(node_blk);
sizeof(struct f2fs_xattr_header) - \
sizeof(struct f2fs_xattr_entry))
+#define MAX_INLINE_XATTR_SIZE \
+ (DEF_ADDRS_PER_INODE - \
+ F2FS_TOTAL_EXTRA_ATTR_SIZE / sizeof(__le32) - \
+ DEF_INLINE_RESERVED_SIZE - \
+ MIN_INLINE_DENTRY_SIZE / sizeof(__le32))
#endif
#define SIZE_OF_RESERVED (PAGE_SIZE - ((SIZE_OF_DIR_ENTRY + \
F2FS_SLOT_LEN) * \
NR_DENTRY_IN_BLOCK + SIZE_OF_DENTRY_BITMAP))
+#define MIN_INLINE_DENTRY_SIZE 40 /* just include '.' and '..' entries */
/* One directory entry slot representing F2FS_SLOT_LEN-sized file name */
struct f2fs_dir_entry {