#include <sys/nvpair.h>
+#include <sys/zfs_znode.h>
#include "udmu.h"
#define LUSTRE_ROOT_FID_SEQ 0
return rc;
}
+static inline uint64_t attrs_fs2zfs(const uint32_t flags)
+{
+ return (((flags & FS_APPEND_FL) ? ZFS_APPENDONLY : 0) |
+ ((flags & FS_NODUMP_FL) ? ZFS_NODUMP : 0) |
+ ((flags & FS_IMMUTABLE_FL) ? ZFS_IMMUTABLE : 0));
+}
+
+static inline uint32_t attrs_zfs2fs(const uint64_t flags)
+{
+ return (((flags & ZFS_APPENDONLY) ? FS_APPEND_FL : 0) |
+ ((flags & ZFS_NODUMP) ? FS_NODUMP_FL : 0) |
+ ((flags & ZFS_IMMUTABLE) ? FS_IMMUTABLE_FL : 0));
+}
+
#endif
#endif /* _OSD_INTERNAL_H */
la->la_uid = osa->uid;
la->la_gid = osa->gid;
la->la_nlink = osa->nlink;
- la->la_flags = osa->flags;
+ la->la_flags = attrs_zfs2fs(osa->flags);
la->la_size = osa->size;
if (S_ISCHR(la->la_mode) || S_ISBLK(la->la_mode)) {
&osa->rdev, 8);
}
if (la->la_valid & LA_FLAGS) {
- osa->flags = obj->oo_attr.la_flags = la->la_flags;
+ osa->flags = attrs_fs2zfs(la->la_flags);
+ /* many flags are not supported by zfs, so ensure a good cached
+ * copy */
+ obj->oo_attr.la_flags = attrs_zfs2fs(osa->flags);
SA_ADD_BULK_ATTR(bulk, cnt, SA_ZPL_FLAGS(uos), NULL,
&osa->flags, 8);
}
osa->gid = la->la_gid;
osa->rdev = la->la_rdev;
osa->nlink = la->la_nlink;
- osa->flags = la->la_flags;
+ osa->flags = attrs_fs2zfs(la->la_flags);
osa->size = la->la_size;
/* Now add in all of the "SA" attributes */