-+int ext4_transfer_project(struct inode *inode, __u32 projid)
-+{
-+ struct super_block *sb = inode->i_sb;
-+ struct ext4_inode_info *ei = EXT4_I(inode);
-+ int err;
-+ kprojid_t kprojid;
-+ struct ext4_iloc iloc;
-+ struct ext4_inode *raw_inode;
-+ struct dquot *transfer_to[EXT4_MAXQUOTAS] = { };
-+
-+ if (!EXT4_HAS_RO_COMPAT_FEATURE(sb,
-+ EXT4_FEATURE_RO_COMPAT_PROJECT)) {
-+ BUG_ON(__kprojid_val(EXT4_I(inode)->i_projid)
-+ != EXT4_DEF_PROJID);
-+ if (projid != EXT4_DEF_PROJID)
-+ return -EOPNOTSUPP;
-+ else
-+ return 0;
-+ }
-+
-+ if (EXT4_INODE_SIZE(sb) <= EXT4_GOOD_OLD_INODE_SIZE)
-+ return -EOPNOTSUPP;
-+
-+ kprojid = make_kprojid(&init_user_ns, (projid_t)projid);
-+ if (projid_eq(kprojid, EXT4_I(inode)->i_projid))
-+ return 0;
-+
-+ err = ext4_get_inode_loc(inode, &iloc);
-+ if (err)
-+ return err;
-+
-+ raw_inode = ext4_raw_inode(&iloc);
-+ if (!EXT4_FITS_IN_INODE(raw_inode, ei, i_projid)) {
-+ err = -EOVERFLOW;
-+ brelse(iloc.bh);
-+ return err;
-+ }
-+ brelse(iloc.bh);
-+
-+ dquot_initialize(inode);
-+ transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid));
-+ if (transfer_to[PRJQUOTA]) {
-+ err = __dquot_transfer(inode, transfer_to);
-+ dqput(transfer_to[PRJQUOTA]);
-+ if (err)
-+ return err;
-+ }
-+
-+ return err;
-+}
-+EXPORT_SYMBOL(ext4_transfer_project);
-+