Description for this pull request:
- Fix xfstests generic/482 test failure. - Fix double free in delayed_free. -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEE6NzKS6Uv/XAAGHgyZwv7A1FEIQgFAmg1BJgWHGxpbmtpbmpl b25Aa2VybmVsLm9yZwAKCRBnC/sDUUQhCGtXD/9ZIcwcPFqAs08LU8XXi6PXw5/6 UbA868SO1tI1aOc5IzMZWmIc0tRYaDHigWazO1DHIENt/UvixVOdOuOgn/BcCjv+ 2bZdrId3H2n6JaDu9XR/yYZl7iotYtNpxNC1TKBGXF9ah3uZc6LTHAxVAgkPfWY/ 1mr6vLF1+K+Z5GRtC/U0HBkkdMcmd5pJUYWH0aZPUJnP/6drfbrzvIsI3m01xqWZ B/+TnjOmFQLBlv7mIabIqE2O/oERHVLjMRNwdkQOrpGLqtfJiHAs6O4NluVvBeQ1 sNUkAPl/2R/ya8CZdDpZYsDWTjJ7PHyHuUrCCj47A8lC/rAwOXidqUckSaGNtJDN Zk10N/ciiXgjuCBR6SoJrQHmHacCvyo/bamHzP23yevKxIY2t4DGuiOrYWZ7aXSZ T7WoptzxrhxGuIhV5l/req97ZNE2WOe3OkSRacAVjtHxmsjL/+/gGF//bupRIILt xEsZNvaxo84U468+O4FXZvaYlwCk31Jj6ihglnHmyGoCy14P9v/Ksf9DTZYYTZvm OVkaSa7B/+w10q/43u5V0FCwyfgk8KiPI/rgwi3KaAUhMbg+6EKhwwj651KytCuf xPyGvHmvvXR8h1fbm8pSX7R11jDBcM2nP2YxX3AJK/K8m5pW/+Dhi6iYXnjITJ8C vNPgd2OSyqzXOB/gOg== =p5zT -----END PGP SIGNATURE----- Merge tag 'exfat-for-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat Pull exfat updates from Namjae Jeon: - Fix xfstests generic/482 test failure - Fix double free in delayed_free * tag 'exfat-for-6.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat: exfat: do not clear volume dirty flag during sync exfat: fix double free in delayed_freepull/1112/head
commit
c69d8e9de0
|
|
@ -801,4 +801,5 @@ load_default:
|
||||||
void exfat_free_upcase_table(struct exfat_sb_info *sbi)
|
void exfat_free_upcase_table(struct exfat_sb_info *sbi)
|
||||||
{
|
{
|
||||||
kvfree(sbi->vol_utbl);
|
kvfree(sbi->vol_utbl);
|
||||||
|
sbi->vol_utbl = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,31 +36,12 @@ static void exfat_put_super(struct super_block *sb)
|
||||||
struct exfat_sb_info *sbi = EXFAT_SB(sb);
|
struct exfat_sb_info *sbi = EXFAT_SB(sb);
|
||||||
|
|
||||||
mutex_lock(&sbi->s_lock);
|
mutex_lock(&sbi->s_lock);
|
||||||
|
exfat_clear_volume_dirty(sb);
|
||||||
exfat_free_bitmap(sbi);
|
exfat_free_bitmap(sbi);
|
||||||
brelse(sbi->boot_bh);
|
brelse(sbi->boot_bh);
|
||||||
mutex_unlock(&sbi->s_lock);
|
mutex_unlock(&sbi->s_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int exfat_sync_fs(struct super_block *sb, int wait)
|
|
||||||
{
|
|
||||||
struct exfat_sb_info *sbi = EXFAT_SB(sb);
|
|
||||||
int err = 0;
|
|
||||||
|
|
||||||
if (unlikely(exfat_forced_shutdown(sb)))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (!wait)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* If there are some dirty buffers in the bdev inode */
|
|
||||||
mutex_lock(&sbi->s_lock);
|
|
||||||
sync_blockdev(sb->s_bdev);
|
|
||||||
if (exfat_clear_volume_dirty(sb))
|
|
||||||
err = -EIO;
|
|
||||||
mutex_unlock(&sbi->s_lock);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int exfat_statfs(struct dentry *dentry, struct kstatfs *buf)
|
static int exfat_statfs(struct dentry *dentry, struct kstatfs *buf)
|
||||||
{
|
{
|
||||||
struct super_block *sb = dentry->d_sb;
|
struct super_block *sb = dentry->d_sb;
|
||||||
|
|
@ -219,7 +200,6 @@ static const struct super_operations exfat_sops = {
|
||||||
.write_inode = exfat_write_inode,
|
.write_inode = exfat_write_inode,
|
||||||
.evict_inode = exfat_evict_inode,
|
.evict_inode = exfat_evict_inode,
|
||||||
.put_super = exfat_put_super,
|
.put_super = exfat_put_super,
|
||||||
.sync_fs = exfat_sync_fs,
|
|
||||||
.statfs = exfat_statfs,
|
.statfs = exfat_statfs,
|
||||||
.show_options = exfat_show_options,
|
.show_options = exfat_show_options,
|
||||||
.shutdown = exfat_shutdown,
|
.shutdown = exfat_shutdown,
|
||||||
|
|
@ -751,10 +731,14 @@ static void exfat_free(struct fs_context *fc)
|
||||||
|
|
||||||
static int exfat_reconfigure(struct fs_context *fc)
|
static int exfat_reconfigure(struct fs_context *fc)
|
||||||
{
|
{
|
||||||
|
struct super_block *sb = fc->root->d_sb;
|
||||||
fc->sb_flags |= SB_NODIRATIME;
|
fc->sb_flags |= SB_NODIRATIME;
|
||||||
|
|
||||||
/* volume flag will be updated in exfat_sync_fs */
|
sync_filesystem(sb);
|
||||||
sync_filesystem(fc->root->d_sb);
|
mutex_lock(&EXFAT_SB(sb)->s_lock);
|
||||||
|
exfat_clear_volume_dirty(sb);
|
||||||
|
mutex_unlock(&EXFAT_SB(sb)->s_lock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue