Description for this pull request:
- Fix ->i_blocks truncation issue that still exists elsewhere. - 4 cleanups & typos fixes. - Move super block magic number to magic.h - Fix missing REQ_SYNC in exfat_update_bhs(). -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEE6NzKS6Uv/XAAGHgyZwv7A1FEIQgFAmHiZ68WHGxpbmtpbmpl b25Aa2VybmVsLm9yZwAKCRBnC/sDUUQhCNUhD/48wj/ce6+GNeyKeadfcD/wMFJF DNs564zTHcjecUg7+tzk82b4n7NM3X//hCaEqEwmX1WjcZcXbtSNqUY7DTMTadgM Ad10JQheOfVRHqSAchNK3ph86Mo5u1c29+4tWS9tv4UaZeAgyCXph+w8d5/M0BBj Rhxoi2Sb2cIVJAu6eMWbKGy4aQVN8a/nlf36ZCKDNCz8IwLyNtUtQ8myZLDhf7BA df4guextxvSyjURqFy/2At+/+faP/nXddJTKOIkmV3VGM9b7URjwADVsEjtouZIo TAH+flRle5tMFFguFLoXt+pVLuiK3AMtgV/1JNaAQGTotD0VpB66LkFGqsUjBtew D8XzoESafeMp3HmWA2eSAbHQ3n1ulzyhuJ5RJpGfhicBFlFlwld4uoGm1JUOA05T or84sPN32rCVMxeMquykXHQ0HzGXg7coZHjGG9YjYV1FsyGCIO3aa5IpQ9D2g0WZ wvRruXXwFur19mnGXYWfwB67HUXYB8iiAHWKXQM2msMklpLT1+rY+M8RBd/Yz4bJ WNrU/U4NCGMjlB4Qmq/ZGazubDOXO4xNt/28gkNm+S2EDGp0w6HOIP/BqHO9879k Xx0EqgLSPfGgdMtH0wigfEZ9UkI3W1+Z0gInGs2LVtSPq7rS7HzbKd9CNci2d41Y 2mCoqCZ0eH14+CXS5A== =/DUv -----END PGP SIGNATURE----- Merge tag 'exfat-for-5.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat Pull exfat updates from Namjae Jeon: - Fix ->i_blocks truncation issue that still exists elsewhere. - Four cleanups & typos fixes. - Move super block magic number to magic.h - Fix missing REQ_SYNC in exfat_update_bhs(). * tag 'exfat-for-5.17-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat: exfat: fix missing REQ_SYNC in exfat_update_bhs() exfat: remove argument 'sector' from exfat_get_dentry() exfat: move super block magic number to magic.h exfat: fix i_blocks for files truncated over 4 GiB exfat: reuse exfat_inode_info variable instead of calling EXFAT_I() exfat: make exfat_find_location() static exfat: fix typos in comments exfat: simplify is_valid_cluster()
This commit is contained in:
commit
88db845808
@ -105,7 +105,7 @@ int exfat_load_bitmap(struct super_block *sb)
|
||||
struct exfat_dentry *ep;
|
||||
struct buffer_head *bh;
|
||||
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
|
@ -64,7 +64,6 @@ static int exfat_readdir(struct inode *inode, loff_t *cpos, struct exfat_dir_ent
|
||||
{
|
||||
int i, dentries_per_clu, dentries_per_clu_bits = 0, num_ext;
|
||||
unsigned int type, clu_offset, max_dentries;
|
||||
sector_t sector;
|
||||
struct exfat_chain dir, clu;
|
||||
struct exfat_uni_name uni_name;
|
||||
struct exfat_dentry *ep;
|
||||
@ -115,7 +114,7 @@ static int exfat_readdir(struct inode *inode, loff_t *cpos, struct exfat_dir_ent
|
||||
i = dentry & (dentries_per_clu - 1);
|
||||
|
||||
for ( ; i < dentries_per_clu; i++, dentry++) {
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -156,7 +155,7 @@ static int exfat_readdir(struct inode *inode, loff_t *cpos, struct exfat_dir_ent
|
||||
dir_entry->namebuf.lfnbuf_len);
|
||||
brelse(bh);
|
||||
|
||||
ep = exfat_get_dentry(sb, &clu, i + 1, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i + 1, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
dir_entry->size =
|
||||
@ -445,7 +444,6 @@ int exfat_init_dir_entry(struct inode *inode, struct exfat_chain *p_dir,
|
||||
struct super_block *sb = inode->i_sb;
|
||||
struct exfat_sb_info *sbi = EXFAT_SB(sb);
|
||||
struct timespec64 ts = current_time(inode);
|
||||
sector_t sector;
|
||||
struct exfat_dentry *ep;
|
||||
struct buffer_head *bh;
|
||||
|
||||
@ -453,7 +451,7 @@ int exfat_init_dir_entry(struct inode *inode, struct exfat_chain *p_dir,
|
||||
* We cannot use exfat_get_dentry_set here because file ep is not
|
||||
* initialized yet.
|
||||
*/
|
||||
ep = exfat_get_dentry(sb, p_dir, entry, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -477,7 +475,7 @@ int exfat_init_dir_entry(struct inode *inode, struct exfat_chain *p_dir,
|
||||
exfat_update_bh(bh, IS_DIRSYNC(inode));
|
||||
brelse(bh);
|
||||
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + 1, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + 1, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -496,12 +494,11 @@ int exfat_update_dir_chksum(struct inode *inode, struct exfat_chain *p_dir,
|
||||
struct super_block *sb = inode->i_sb;
|
||||
int ret = 0;
|
||||
int i, num_entries;
|
||||
sector_t sector;
|
||||
u16 chksum;
|
||||
struct exfat_dentry *ep, *fep;
|
||||
struct buffer_head *fbh, *bh;
|
||||
|
||||
fep = exfat_get_dentry(sb, p_dir, entry, &fbh, §or);
|
||||
fep = exfat_get_dentry(sb, p_dir, entry, &fbh);
|
||||
if (!fep)
|
||||
return -EIO;
|
||||
|
||||
@ -509,7 +506,7 @@ int exfat_update_dir_chksum(struct inode *inode, struct exfat_chain *p_dir,
|
||||
chksum = exfat_calc_chksum16(fep, DENTRY_SIZE, 0, CS_DIR_ENTRY);
|
||||
|
||||
for (i = 1; i < num_entries; i++) {
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + i, &bh);
|
||||
if (!ep) {
|
||||
ret = -EIO;
|
||||
goto release_fbh;
|
||||
@ -531,13 +528,12 @@ int exfat_init_ext_entry(struct inode *inode, struct exfat_chain *p_dir,
|
||||
{
|
||||
struct super_block *sb = inode->i_sb;
|
||||
int i;
|
||||
sector_t sector;
|
||||
unsigned short *uniname = p_uniname->name;
|
||||
struct exfat_dentry *ep;
|
||||
struct buffer_head *bh;
|
||||
int sync = IS_DIRSYNC(inode);
|
||||
|
||||
ep = exfat_get_dentry(sb, p_dir, entry, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -545,7 +541,7 @@ int exfat_init_ext_entry(struct inode *inode, struct exfat_chain *p_dir,
|
||||
exfat_update_bh(bh, sync);
|
||||
brelse(bh);
|
||||
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + 1, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + 1, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -555,7 +551,7 @@ int exfat_init_ext_entry(struct inode *inode, struct exfat_chain *p_dir,
|
||||
brelse(bh);
|
||||
|
||||
for (i = EXFAT_FIRST_CLUSTER; i < num_entries; i++) {
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + i, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -574,12 +570,11 @@ int exfat_remove_entries(struct inode *inode, struct exfat_chain *p_dir,
|
||||
{
|
||||
struct super_block *sb = inode->i_sb;
|
||||
int i;
|
||||
sector_t sector;
|
||||
struct exfat_dentry *ep;
|
||||
struct buffer_head *bh;
|
||||
|
||||
for (i = order; i < num_entries; i++) {
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + i, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, p_dir, entry + i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -656,8 +651,8 @@ static int exfat_walk_fat_chain(struct super_block *sb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int exfat_find_location(struct super_block *sb, struct exfat_chain *p_dir,
|
||||
int entry, sector_t *sector, int *offset)
|
||||
static int exfat_find_location(struct super_block *sb, struct exfat_chain *p_dir,
|
||||
int entry, sector_t *sector, int *offset)
|
||||
{
|
||||
int ret;
|
||||
unsigned int off, clu = 0;
|
||||
@ -717,8 +712,7 @@ static int exfat_dir_readahead(struct super_block *sb, sector_t sec)
|
||||
}
|
||||
|
||||
struct exfat_dentry *exfat_get_dentry(struct super_block *sb,
|
||||
struct exfat_chain *p_dir, int entry, struct buffer_head **bh,
|
||||
sector_t *sector)
|
||||
struct exfat_chain *p_dir, int entry, struct buffer_head **bh)
|
||||
{
|
||||
unsigned int dentries_per_page = EXFAT_B_TO_DEN(PAGE_SIZE);
|
||||
int off;
|
||||
@ -740,8 +734,6 @@ struct exfat_dentry *exfat_get_dentry(struct super_block *sb,
|
||||
if (!*bh)
|
||||
return NULL;
|
||||
|
||||
if (sector)
|
||||
*sector = sec;
|
||||
return (struct exfat_dentry *)((*bh)->b_data + off);
|
||||
}
|
||||
|
||||
@ -892,7 +884,7 @@ struct exfat_entry_set_cache *exfat_get_dentry_set(struct super_block *sb,
|
||||
es->bh[es->num_bh++] = bh;
|
||||
}
|
||||
|
||||
/* validiate cached dentries */
|
||||
/* validate cached dentries */
|
||||
for (i = 1; i < num_entries; i++) {
|
||||
ep = exfat_get_dentry_cached(es, i);
|
||||
if (!exfat_validate_entry(exfat_get_entry_type(ep), &mode))
|
||||
@ -960,7 +952,7 @@ rewind:
|
||||
if (rewind && dentry == end_eidx)
|
||||
goto not_found;
|
||||
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -1145,7 +1137,7 @@ int exfat_count_ext_entries(struct super_block *sb, struct exfat_chain *p_dir,
|
||||
struct buffer_head *bh;
|
||||
|
||||
for (i = 0, entry++; i < ep->dentry.file.num_ext; i++, entry++) {
|
||||
ext_ep = exfat_get_dentry(sb, p_dir, entry, &bh, NULL);
|
||||
ext_ep = exfat_get_dentry(sb, p_dir, entry, &bh);
|
||||
if (!ext_ep)
|
||||
return -EIO;
|
||||
|
||||
@ -1175,7 +1167,7 @@ int exfat_count_dir_entries(struct super_block *sb, struct exfat_chain *p_dir)
|
||||
|
||||
while (clu.dir != EXFAT_EOF_CLUSTER) {
|
||||
for (i = 0; i < dentries_per_clu; i++) {
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
entry_type = exfat_get_entry_type(ep);
|
||||
|
@ -10,7 +10,6 @@
|
||||
#include <linux/ratelimit.h>
|
||||
#include <linux/nls.h>
|
||||
|
||||
#define EXFAT_SUPER_MAGIC 0x2011BAB0UL
|
||||
#define EXFAT_ROOT_INO 1
|
||||
|
||||
#define EXFAT_CLUSTERS_UNTRACKED (~0u)
|
||||
@ -459,11 +458,8 @@ int exfat_find_dir_entry(struct super_block *sb, struct exfat_inode_info *ei,
|
||||
struct exfat_chain *p_dir, struct exfat_uni_name *p_uniname,
|
||||
int num_entries, unsigned int type, struct exfat_hint *hint_opt);
|
||||
int exfat_alloc_new_dir(struct inode *inode, struct exfat_chain *clu);
|
||||
int exfat_find_location(struct super_block *sb, struct exfat_chain *p_dir,
|
||||
int entry, sector_t *sector, int *offset);
|
||||
struct exfat_dentry *exfat_get_dentry(struct super_block *sb,
|
||||
struct exfat_chain *p_dir, int entry, struct buffer_head **bh,
|
||||
sector_t *sector);
|
||||
struct exfat_chain *p_dir, int entry, struct buffer_head **bh);
|
||||
struct exfat_dentry *exfat_get_dentry_cached(struct exfat_entry_set_cache *es,
|
||||
int num);
|
||||
struct exfat_entry_set_cache *exfat_get_dentry_set(struct super_block *sb,
|
||||
|
@ -84,9 +84,7 @@ int exfat_ent_set(struct super_block *sb, unsigned int loc,
|
||||
static inline bool is_valid_cluster(struct exfat_sb_info *sbi,
|
||||
unsigned int clus)
|
||||
{
|
||||
if (clus < EXFAT_FIRST_CLUSTER || sbi->num_clusters <= clus)
|
||||
return false;
|
||||
return true;
|
||||
return clus >= EXFAT_FIRST_CLUSTER && clus < sbi->num_clusters;
|
||||
}
|
||||
|
||||
int exfat_ent_get(struct super_block *sb, unsigned int loc,
|
||||
|
@ -110,8 +110,7 @@ int __exfat_truncate(struct inode *inode, loff_t new_size)
|
||||
exfat_set_volume_dirty(sb);
|
||||
|
||||
num_clusters_new = EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi);
|
||||
num_clusters_phys =
|
||||
EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk, sbi);
|
||||
num_clusters_phys = EXFAT_B_TO_CLU_ROUND_UP(ei->i_size_ondisk, sbi);
|
||||
|
||||
exfat_chain_set(&clu, ei->start_clu, num_clusters_phys, ei->flags);
|
||||
|
||||
@ -228,12 +227,13 @@ void exfat_truncate(struct inode *inode, loff_t size)
|
||||
{
|
||||
struct super_block *sb = inode->i_sb;
|
||||
struct exfat_sb_info *sbi = EXFAT_SB(sb);
|
||||
struct exfat_inode_info *ei = EXFAT_I(inode);
|
||||
unsigned int blocksize = i_blocksize(inode);
|
||||
loff_t aligned_size;
|
||||
int err;
|
||||
|
||||
mutex_lock(&sbi->s_lock);
|
||||
if (EXFAT_I(inode)->start_clu == 0) {
|
||||
if (ei->start_clu == 0) {
|
||||
/*
|
||||
* Empty start_clu != ~0 (not allocated)
|
||||
*/
|
||||
@ -251,8 +251,8 @@ void exfat_truncate(struct inode *inode, loff_t size)
|
||||
else
|
||||
mark_inode_dirty(inode);
|
||||
|
||||
inode->i_blocks = ((i_size_read(inode) + (sbi->cluster_size - 1)) &
|
||||
~(sbi->cluster_size - 1)) >> inode->i_blkbits;
|
||||
inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >>
|
||||
inode->i_blkbits;
|
||||
write_size:
|
||||
aligned_size = i_size_read(inode);
|
||||
if (aligned_size & (blocksize - 1)) {
|
||||
@ -260,11 +260,11 @@ write_size:
|
||||
aligned_size++;
|
||||
}
|
||||
|
||||
if (EXFAT_I(inode)->i_size_ondisk > i_size_read(inode))
|
||||
EXFAT_I(inode)->i_size_ondisk = aligned_size;
|
||||
if (ei->i_size_ondisk > i_size_read(inode))
|
||||
ei->i_size_ondisk = aligned_size;
|
||||
|
||||
if (EXFAT_I(inode)->i_size_aligned > i_size_read(inode))
|
||||
EXFAT_I(inode)->i_size_aligned = aligned_size;
|
||||
if (ei->i_size_aligned > i_size_read(inode))
|
||||
ei->i_size_aligned = aligned_size;
|
||||
mutex_unlock(&sbi->s_lock);
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ static int __exfat_write_inode(struct inode *inode, int sync)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* If the indode is already unlinked, there is no need for updating it.
|
||||
* If the inode is already unlinked, there is no need for updating it.
|
||||
*/
|
||||
if (ei->dir.dir == DIR_DELETED)
|
||||
return 0;
|
||||
@ -114,10 +114,9 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
|
||||
unsigned int local_clu_offset = clu_offset;
|
||||
unsigned int num_to_be_allocated = 0, num_clusters = 0;
|
||||
|
||||
if (EXFAT_I(inode)->i_size_ondisk > 0)
|
||||
if (ei->i_size_ondisk > 0)
|
||||
num_clusters =
|
||||
EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk,
|
||||
sbi);
|
||||
EXFAT_B_TO_CLU_ROUND_UP(ei->i_size_ondisk, sbi);
|
||||
|
||||
if (clu_offset >= num_clusters)
|
||||
num_to_be_allocated = clu_offset - num_clusters + 1;
|
||||
@ -416,10 +415,10 @@ static int exfat_write_end(struct file *file, struct address_space *mapping,
|
||||
|
||||
err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata);
|
||||
|
||||
if (EXFAT_I(inode)->i_size_aligned < i_size_read(inode)) {
|
||||
if (ei->i_size_aligned < i_size_read(inode)) {
|
||||
exfat_fs_error(inode->i_sb,
|
||||
"invalid size(size(%llu) > aligned(%llu)\n",
|
||||
i_size_read(inode), EXFAT_I(inode)->i_size_aligned);
|
||||
i_size_read(inode), ei->i_size_aligned);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
@ -603,8 +602,8 @@ static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)
|
||||
|
||||
exfat_save_attr(inode, info->attr);
|
||||
|
||||
inode->i_blocks = ((i_size_read(inode) + (sbi->cluster_size - 1)) &
|
||||
~((loff_t)sbi->cluster_size - 1)) >> inode->i_blkbits;
|
||||
inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >>
|
||||
inode->i_blkbits;
|
||||
inode->i_mtime = info->mtime;
|
||||
inode->i_ctime = info->mtime;
|
||||
ei->i_crtime = info->crtime;
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/blk_types.h>
|
||||
|
||||
#include "exfat_raw.h"
|
||||
#include "exfat_fs.h"
|
||||
@ -180,7 +181,7 @@ int exfat_update_bhs(struct buffer_head **bhs, int nr_bhs, int sync)
|
||||
set_buffer_uptodate(bhs[i]);
|
||||
mark_buffer_dirty(bhs[i]);
|
||||
if (sync)
|
||||
write_dirty_buffer(bhs[i], 0);
|
||||
write_dirty_buffer(bhs[i], REQ_SYNC);
|
||||
}
|
||||
|
||||
for (i = 0; i < nr_bhs && sync; i++) {
|
||||
|
@ -229,7 +229,7 @@ static int exfat_search_empty_slot(struct super_block *sb,
|
||||
i = dentry & (dentries_per_clu - 1);
|
||||
|
||||
for (; i < dentries_per_clu; i++, dentry++) {
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
type = exfat_get_entry_type(ep);
|
||||
@ -306,7 +306,6 @@ static int exfat_find_empty_entry(struct inode *inode,
|
||||
{
|
||||
int dentry;
|
||||
unsigned int ret, last_clu;
|
||||
sector_t sector;
|
||||
loff_t size = 0;
|
||||
struct exfat_chain clu;
|
||||
struct exfat_dentry *ep = NULL;
|
||||
@ -379,7 +378,7 @@ static int exfat_find_empty_entry(struct inode *inode,
|
||||
struct buffer_head *bh;
|
||||
|
||||
ep = exfat_get_dentry(sb,
|
||||
&(ei->dir), ei->entry + 1, &bh, §or);
|
||||
&(ei->dir), ei->entry + 1, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
@ -395,9 +394,9 @@ static int exfat_find_empty_entry(struct inode *inode,
|
||||
|
||||
/* directory inode should be updated in here */
|
||||
i_size_write(inode, size);
|
||||
EXFAT_I(inode)->i_size_ondisk += sbi->cluster_size;
|
||||
EXFAT_I(inode)->i_size_aligned += sbi->cluster_size;
|
||||
EXFAT_I(inode)->flags = p_dir->flags;
|
||||
ei->i_size_ondisk += sbi->cluster_size;
|
||||
ei->i_size_aligned += sbi->cluster_size;
|
||||
ei->flags = p_dir->flags;
|
||||
inode->i_blocks += 1 << sbi->sect_per_clus_bits;
|
||||
}
|
||||
|
||||
@ -779,7 +778,6 @@ static int exfat_unlink(struct inode *dir, struct dentry *dentry)
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct exfat_inode_info *ei = EXFAT_I(inode);
|
||||
struct buffer_head *bh;
|
||||
sector_t sector;
|
||||
int num_entries, entry, err = 0;
|
||||
|
||||
mutex_lock(&EXFAT_SB(sb)->s_lock);
|
||||
@ -791,7 +789,7 @@ static int exfat_unlink(struct inode *dir, struct dentry *dentry)
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
ep = exfat_get_dentry(sb, &cdir, entry, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, &cdir, entry, &bh);
|
||||
if (!ep) {
|
||||
err = -EIO;
|
||||
goto unlock;
|
||||
@ -895,7 +893,7 @@ static int exfat_check_dir_empty(struct super_block *sb,
|
||||
|
||||
while (clu.dir != EXFAT_EOF_CLUSTER) {
|
||||
for (i = 0; i < dentries_per_clu; i++) {
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
type = exfat_get_entry_type(ep);
|
||||
@ -932,7 +930,6 @@ static int exfat_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
struct exfat_sb_info *sbi = EXFAT_SB(sb);
|
||||
struct exfat_inode_info *ei = EXFAT_I(inode);
|
||||
struct buffer_head *bh;
|
||||
sector_t sector;
|
||||
int num_entries, entry, err;
|
||||
|
||||
mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
|
||||
@ -957,7 +954,7 @@ static int exfat_rmdir(struct inode *dir, struct dentry *dentry)
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
ep = exfat_get_dentry(sb, &cdir, entry, &bh, §or);
|
||||
ep = exfat_get_dentry(sb, &cdir, entry, &bh);
|
||||
if (!ep) {
|
||||
err = -EIO;
|
||||
goto unlock;
|
||||
@ -1005,13 +1002,12 @@ static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
|
||||
struct exfat_inode_info *ei)
|
||||
{
|
||||
int ret, num_old_entries, num_new_entries;
|
||||
sector_t sector_old, sector_new;
|
||||
struct exfat_dentry *epold, *epnew;
|
||||
struct super_block *sb = inode->i_sb;
|
||||
struct buffer_head *new_bh, *old_bh;
|
||||
int sync = IS_DIRSYNC(inode);
|
||||
|
||||
epold = exfat_get_dentry(sb, p_dir, oldentry, &old_bh, §or_old);
|
||||
epold = exfat_get_dentry(sb, p_dir, oldentry, &old_bh);
|
||||
if (!epold)
|
||||
return -EIO;
|
||||
|
||||
@ -1032,8 +1028,7 @@ static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
|
||||
if (newentry < 0)
|
||||
return newentry; /* -EIO or -ENOSPC */
|
||||
|
||||
epnew = exfat_get_dentry(sb, p_dir, newentry, &new_bh,
|
||||
§or_new);
|
||||
epnew = exfat_get_dentry(sb, p_dir, newentry, &new_bh);
|
||||
if (!epnew)
|
||||
return -EIO;
|
||||
|
||||
@ -1046,12 +1041,10 @@ static int exfat_rename_file(struct inode *inode, struct exfat_chain *p_dir,
|
||||
brelse(old_bh);
|
||||
brelse(new_bh);
|
||||
|
||||
epold = exfat_get_dentry(sb, p_dir, oldentry + 1, &old_bh,
|
||||
§or_old);
|
||||
epold = exfat_get_dentry(sb, p_dir, oldentry + 1, &old_bh);
|
||||
if (!epold)
|
||||
return -EIO;
|
||||
epnew = exfat_get_dentry(sb, p_dir, newentry + 1, &new_bh,
|
||||
§or_new);
|
||||
epnew = exfat_get_dentry(sb, p_dir, newentry + 1, &new_bh);
|
||||
if (!epnew) {
|
||||
brelse(old_bh);
|
||||
return -EIO;
|
||||
@ -1093,12 +1086,11 @@ static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir,
|
||||
struct exfat_uni_name *p_uniname, struct exfat_inode_info *ei)
|
||||
{
|
||||
int ret, newentry, num_new_entries, num_old_entries;
|
||||
sector_t sector_mov, sector_new;
|
||||
struct exfat_dentry *epmov, *epnew;
|
||||
struct super_block *sb = inode->i_sb;
|
||||
struct buffer_head *mov_bh, *new_bh;
|
||||
|
||||
epmov = exfat_get_dentry(sb, p_olddir, oldentry, &mov_bh, §or_mov);
|
||||
epmov = exfat_get_dentry(sb, p_olddir, oldentry, &mov_bh);
|
||||
if (!epmov)
|
||||
return -EIO;
|
||||
|
||||
@ -1116,7 +1108,7 @@ static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir,
|
||||
if (newentry < 0)
|
||||
return newentry; /* -EIO or -ENOSPC */
|
||||
|
||||
epnew = exfat_get_dentry(sb, p_newdir, newentry, &new_bh, §or_new);
|
||||
epnew = exfat_get_dentry(sb, p_newdir, newentry, &new_bh);
|
||||
if (!epnew)
|
||||
return -EIO;
|
||||
|
||||
@ -1129,12 +1121,10 @@ static int exfat_move_file(struct inode *inode, struct exfat_chain *p_olddir,
|
||||
brelse(mov_bh);
|
||||
brelse(new_bh);
|
||||
|
||||
epmov = exfat_get_dentry(sb, p_olddir, oldentry + 1, &mov_bh,
|
||||
§or_mov);
|
||||
epmov = exfat_get_dentry(sb, p_olddir, oldentry + 1, &mov_bh);
|
||||
if (!epmov)
|
||||
return -EIO;
|
||||
epnew = exfat_get_dentry(sb, p_newdir, newentry + 1, &new_bh,
|
||||
§or_new);
|
||||
epnew = exfat_get_dentry(sb, p_newdir, newentry + 1, &new_bh);
|
||||
if (!epnew) {
|
||||
brelse(mov_bh);
|
||||
return -EIO;
|
||||
@ -1216,7 +1206,7 @@ static int __exfat_rename(struct inode *old_parent_inode,
|
||||
exfat_chain_dup(&olddir, &ei->dir);
|
||||
dentry = ei->entry;
|
||||
|
||||
ep = exfat_get_dentry(sb, &olddir, dentry, &old_bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &olddir, dentry, &old_bh);
|
||||
if (!ep) {
|
||||
ret = -EIO;
|
||||
goto out;
|
||||
@ -1237,7 +1227,7 @@ static int __exfat_rename(struct inode *old_parent_inode,
|
||||
|
||||
p_dir = &(new_ei->dir);
|
||||
new_entry = new_ei->entry;
|
||||
ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh, NULL);
|
||||
ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh);
|
||||
if (!ep)
|
||||
goto out;
|
||||
|
||||
@ -1277,7 +1267,7 @@ static int __exfat_rename(struct inode *old_parent_inode,
|
||||
|
||||
if (!ret && new_inode) {
|
||||
/* delete entries of new_dir */
|
||||
ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh, NULL);
|
||||
ep = exfat_get_dentry(sb, p_dir, new_entry, &new_bh);
|
||||
if (!ep) {
|
||||
ret = -EIO;
|
||||
goto del_out;
|
||||
|
@ -761,7 +761,7 @@ int exfat_create_upcase_table(struct super_block *sb)
|
||||
|
||||
while (clu.dir != EXFAT_EOF_CLUSTER) {
|
||||
for (i = 0; i < sbi->dentries_per_clu; i++) {
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh, NULL);
|
||||
ep = exfat_get_dentry(sb, &clu, i, &bh);
|
||||
if (!ep)
|
||||
return -EIO;
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <linux/iversion.h>
|
||||
#include <linux/nls.h>
|
||||
#include <linux/buffer_head.h>
|
||||
#include <linux/magic.h>
|
||||
|
||||
#include "exfat_raw.h"
|
||||
#include "exfat_fs.h"
|
||||
@ -364,11 +365,11 @@ static int exfat_read_root(struct inode *inode)
|
||||
inode->i_op = &exfat_dir_inode_operations;
|
||||
inode->i_fop = &exfat_dir_operations;
|
||||
|
||||
inode->i_blocks = ((i_size_read(inode) + (sbi->cluster_size - 1))
|
||||
& ~(sbi->cluster_size - 1)) >> inode->i_blkbits;
|
||||
EXFAT_I(inode)->i_pos = ((loff_t)sbi->root_dir << 32) | 0xffffffff;
|
||||
EXFAT_I(inode)->i_size_aligned = i_size_read(inode);
|
||||
EXFAT_I(inode)->i_size_ondisk = i_size_read(inode);
|
||||
inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >>
|
||||
inode->i_blkbits;
|
||||
ei->i_pos = ((loff_t)sbi->root_dir << 32) | 0xffffffff;
|
||||
ei->i_size_aligned = i_size_read(inode);
|
||||
ei->i_size_ondisk = i_size_read(inode);
|
||||
|
||||
exfat_save_attr(inode, ATTR_SUBDIR);
|
||||
inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime =
|
||||
|
@ -43,6 +43,7 @@
|
||||
#define MINIX3_SUPER_MAGIC 0x4d5a /* minix v3 fs, 60 char names */
|
||||
|
||||
#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */
|
||||
#define EXFAT_SUPER_MAGIC 0x2011BAB0
|
||||
#define NCP_SUPER_MAGIC 0x564c /* Guess, what 0x564c is :-) */
|
||||
#define NFS_SUPER_MAGIC 0x6969
|
||||
#define OCFS2_SUPER_MAGIC 0x7461636f
|
||||
|
Loading…
Reference in New Issue
Block a user