mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 22:14:03 +02:00
fs/ntfs3: widen inode/record number storage to u64
NTFS inode and MFT record numbers are inherently 64-bit values, but several places stored them in 'unsigned long' (or CLST, a u32). On 32-bit architectures 'unsigned long' is only 32 bits wide, so the upper bits of a record reference are truncated. Store these values in u64 and update the associated format specifiers (%lx -> %llx) accordingly. Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
parent
dc59e4fea9
commit
55106e5010
|
|
@ -281,7 +281,7 @@ static inline bool ntfs_dir_emit(struct ntfs_sb_info *sbi,
|
|||
u8 *name, struct dir_context *ctx)
|
||||
{
|
||||
const struct ATTR_FILE_NAME *fname;
|
||||
unsigned long ino;
|
||||
u64 ino;
|
||||
int name_len;
|
||||
u32 dt_type;
|
||||
|
||||
|
|
@ -313,7 +313,7 @@ static inline bool ntfs_dir_emit(struct ntfs_sb_info *sbi,
|
|||
name_len = ntfs_utf16_to_nls(sbi, fname->name, fname->name_len, name,
|
||||
PATH_MAX);
|
||||
if (name_len <= 0) {
|
||||
ntfs_warn(sbi->sb, "failed to convert name for inode %lx.",
|
||||
ntfs_warn(sbi->sb, "failed to convert name for inode %llx.",
|
||||
ino);
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ int ni_load_mi_ex(struct ntfs_inode *ni, CLST rno, struct mft_inode **mi)
|
|||
int ni_load_mi(struct ntfs_inode *ni, const struct ATTR_LIST_ENTRY *le,
|
||||
struct mft_inode **mi)
|
||||
{
|
||||
CLST rno;
|
||||
u64 rno;
|
||||
|
||||
if (!le) {
|
||||
*mi = &ni->mi;
|
||||
|
|
@ -2961,8 +2961,8 @@ int ni_write_parents(struct ntfs_inode *ni, int sync)
|
|||
if (IS_ERR(dir)) {
|
||||
ntfs_inode_warn(
|
||||
&ni->vfs_inode,
|
||||
"failed to open parent directory r=%lx to write",
|
||||
(long)ino_get(&fname->home));
|
||||
"failed to open parent directory r=%llx to write",
|
||||
(u64)ino_get(&fname->home));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -3081,8 +3081,8 @@ static bool ni_update_parent(struct ntfs_inode *ni, struct NTFS_DUP_INFO *dup,
|
|||
if (IS_ERR(dir)) {
|
||||
ntfs_inode_warn(
|
||||
&ni->vfs_inode,
|
||||
"failed to open parent directory r=%lx to update",
|
||||
(long)ino_get(&fname->home));
|
||||
"failed to open parent directory r=%llx to update",
|
||||
(u64)ino_get(&fname->home));
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ static struct inode *ntfs_read_mft(struct inode *inode,
|
|||
bool is_match = false;
|
||||
bool is_root = false;
|
||||
bool is_dir;
|
||||
unsigned long ino = inode->i_ino;
|
||||
u64 ino = inode->i_ino;
|
||||
u32 rp_fa = 0, asize, t32;
|
||||
u16 roff, rsize, names = 0, links = 0;
|
||||
const struct ATTR_FILE_NAME *fname = NULL;
|
||||
|
|
@ -79,7 +79,7 @@ static struct inode *ntfs_read_mft(struct inode *inode,
|
|||
;
|
||||
} else if (ref->seq != rec->seq) {
|
||||
err = -EINVAL;
|
||||
ntfs_err(sb, "MFT: r=%lx, expect seq=%x instead of %x!", ino,
|
||||
ntfs_err(sb, "MFT: r=%llx, expect seq=%x instead of %x!", ino,
|
||||
le16_to_cpu(ref->seq), le16_to_cpu(rec->seq));
|
||||
goto out;
|
||||
} else if (!is_rec_inuse(rec)) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user