Merge 4.19.143 into android-4.19-stable
Changes in 4.19.143 powerpc/64s: Don't init FSCR_DSCR in __init_FSCR() gre6: Fix reception with IP6_TNL_F_RCV_DSCP_COPY net: Fix potential wrong skb->protocol in skb_vlan_untag() net: qrtr: fix usage of idr in port assignment to socket net/smc: Prevent kernel-infoleak in __smc_diag_dump() tipc: fix uninit skb->data in tipc_nl_compat_dumpit() net: ena: Make missed_tx stat incremental ipvlan: fix device features ALSA: pci: delete repeated words in comments ASoC: img: Fix a reference count leak in img_i2s_in_set_fmt ASoC: img-parallel-out: Fix a reference count leak ASoC: tegra: Fix reference count leaks. mfd: intel-lpss: Add Intel Emmitsburg PCH PCI IDs arm64: dts: qcom: msm8916: Pull down PDM GPIOs during sleep powerpc/xive: Ignore kmemleak false positives media: pci: ttpci: av7110: fix possible buffer overflow caused by bad DMA value in debiirq() blktrace: ensure our debugfs dir exists scsi: target: tcmu: Fix crash on ARM during cmd completion iommu/iova: Don't BUG on invalid PFNs drm/amdkfd: Fix reference count leaks. drm/radeon: fix multiple reference count leak drm/amdgpu: fix ref count leak in amdgpu_driver_open_kms drm/amd/display: fix ref count leak in amdgpu_drm_ioctl drm/amdgpu: fix ref count leak in amdgpu_display_crtc_set_config drm/amdgpu/display: fix ref count leak when pm_runtime_get_sync fails scsi: lpfc: Fix shost refcount mismatch when deleting vport xfs: Don't allow logging of XFS_ISTALE inodes selftests/powerpc: Purge extra count_pmc() calls of ebb selftests f2fs: fix error path in do_recover_data() omapfb: fix multiple reference count leaks due to pm_runtime_get_sync PCI: Fix pci_create_slot() reference count leak ARM: dts: ls1021a: output PPS signal on FIPER2 rtlwifi: rtl8192cu: Prevent leaking urb mips/vdso: Fix resource leaks in genvdso.c cec-api: prevent leaking memory through hole in structure HID: quirks: add NOGET quirk for Logitech GROUP f2fs: fix use-after-free issue drm/nouveau/drm/noveau: fix reference count leak in nouveau_fbcon_open drm/nouveau: fix reference count leak in nv50_disp_atomic_commit drm/nouveau: Fix reference count leak in nouveau_connector_detect locking/lockdep: Fix overflow in presentation of average lock-time btrfs: file: reserve qgroup space after the hole punch range is locked scsi: iscsi: Do not put host in iscsi_set_flashnode_param() ceph: fix potential mdsc use-after-free crash scsi: fcoe: Memory leak fix in fcoe_sysfs_fcf_del() EDAC/ie31200: Fallback if host bridge device is already initialized KVM: arm64: Fix symbol dependency in __hyp_call_panic_nvhe powerpc/spufs: add CONFIG_COREDUMP dependency USB: sisusbvga: Fix a potential UB casued by left shifting a negative value efi: provide empty efi_enter_virtual_mode implementation Revert "ath10k: fix DMA related firmware crashes on multiple devices" media: gpio-ir-tx: improve precision of transmitted signal due to scheduling drm/msm/adreno: fix updating ring fence nvme-fc: Fix wrong return value in __nvme_fc_init_request() null_blk: fix passing of REQ_FUA flag in null_handle_rq i2c: rcar: in slave mode, clear NACK earlier usb: gadget: f_tcm: Fix some resource leaks in some error paths jbd2: make sure jh have b_transaction set in refile/unfile_buffer ext4: don't BUG on inconsistent journal feature ext4: handle read only external journal device jbd2: abort journal if free a async write error metadata buffer ext4: handle option set by mount flags correctly ext4: handle error of ext4_setup_system_zone() on remount ext4: correctly restore system zone info when remount fails fs: prevent BUG_ON in submit_bh_wbc() spi: stm32: fix stm32_spi_prepare_mbr in case of odd clk_rate s390/cio: add cond_resched() in the slow_eval_known_fn() loop ASoC: wm8994: Avoid attempts to read unreadable registers scsi: fcoe: Fix I/O path allocation scsi: ufs: Fix possible infinite loop in ufshcd_hold scsi: ufs: Improve interrupt handling for shared interrupts scsi: ufs: Clean up completed request without interrupt notification scsi: qla2xxx: Check if FW supports MQ before enabling scsi: qla2xxx: Fix null pointer access during disconnect from subsystem Revert "scsi: qla2xxx: Fix crash on qla2x00_mailbox_command" macvlan: validate setting of multiple remote source MAC addresses net: gianfar: Add of_node_put() before goto statement powerpc/perf: Fix soft lockups due to missed interrupt accounting block: loop: set discard granularity and alignment for block device backed loop HID: i2c-hid: Always sleep 60ms after I2C_HID_PWR_ON commands blk-mq: order adding requests to hctx->dispatch and checking SCHED_RESTART btrfs: reset compression level for lzo on remount btrfs: fix space cache memory leak after transaction abort fbcon: prevent user font height or width change from causing potential out-of-bounds access USB: lvtest: return proper error code in probe vt: defer kfree() of vc_screenbuf in vc_do_resize() vt_ioctl: change VT_RESIZEX ioctl to check for error return from vc_resize() serial: samsung: Removes the IRQ not found warning serial: pl011: Fix oops on -EPROBE_DEFER serial: pl011: Don't leak amba_ports entry on driver register error serial: 8250_exar: Fix number of ports for Commtech PCIe cards serial: 8250: change lock order in serial8250_do_startup() writeback: Protect inode->i_io_list with inode->i_lock writeback: Avoid skipping inode writeback writeback: Fix sync livelock due to b_dirty_time processing XEN uses irqdesc::irq_data_common::handler_data to store a per interrupt XEN data pointer which contains XEN specific information. usb: host: xhci: fix ep context print mismatch in debugfs xhci: Do warm-reset when both CAS and XDEV_RESUME are set xhci: Always restore EP_SOFT_CLEAR_TOGGLE even if ep reset failed PM: sleep: core: Fix the handling of pending runtime resume requests device property: Fix the secondary firmware node handling in set_primary_fwnode() genirq/matrix: Deal with the sillyness of for_each_cpu() on UP irqchip/stm32-exti: Avoid losing interrupts due to clearing pending bits by mistake drm/amdgpu: Fix buffer overflow in INFO ioctl drm/amd/pm: correct Vega10 swctf limit setting drm/amd/pm: correct Vega12 swctf limit setting USB: yurex: Fix bad gfp argument usb: uas: Add quirk for PNY Pro Elite USB: quirks: Add no-lpm quirk for another Raydium touchscreen USB: quirks: Ignore duplicate endpoint on Sound Devices MixPre-D USB: Ignore UAS for JMicron JMS567 ATA/ATAPI Bridge usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe() USB: gadget: u_f: add overflow checks to VLA macros USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb() USB: gadget: u_f: Unbreak offset calculation in VLAs USB: cdc-acm: rework notification_buffer resizing usb: storage: Add unusual_uas entry for Sony PSZ drives btrfs: check the right error variable in btrfs_del_dir_entries_in_log usb: dwc3: gadget: Don't setup more than requested usb: dwc3: gadget: Fix handling ZLP usb: dwc3: gadget: Handle ZLP for sg requests tpm: Unify the mismatching TPM space buffer sizes HID: hiddev: Fix slab-out-of-bounds write in hiddev_ioctl_usage() ALSA: usb-audio: Update documentation comment for MS2109 quirk Linux 4.19.143 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com> Change-Id: I8b6e29eda77bd69df30132842cf28019c8e7c1a3
This commit is contained in:
175
fs/ext4/super.c
175
fs/ext4/super.c
@@ -66,10 +66,10 @@ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
|
||||
unsigned long journal_devnum);
|
||||
static int ext4_show_options(struct seq_file *seq, struct dentry *root);
|
||||
static int ext4_commit_super(struct super_block *sb, int sync);
|
||||
static void ext4_mark_recovery_complete(struct super_block *sb,
|
||||
static int ext4_mark_recovery_complete(struct super_block *sb,
|
||||
struct ext4_super_block *es);
|
||||
static void ext4_clear_journal_err(struct super_block *sb,
|
||||
struct ext4_super_block *es);
|
||||
static int ext4_clear_journal_err(struct super_block *sb,
|
||||
struct ext4_super_block *es);
|
||||
static int ext4_sync_fs(struct super_block *sb, int wait);
|
||||
static int ext4_remount(struct super_block *sb, int *flags, char *data);
|
||||
static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
|
||||
@@ -4629,11 +4629,13 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
|
||||
|
||||
ext4_set_resv_clusters(sb);
|
||||
|
||||
err = ext4_setup_system_zone(sb);
|
||||
if (err) {
|
||||
ext4_msg(sb, KERN_ERR, "failed to initialize system "
|
||||
"zone (%d)", err);
|
||||
goto failed_mount4a;
|
||||
if (test_opt(sb, BLOCK_VALIDITY)) {
|
||||
err = ext4_setup_system_zone(sb);
|
||||
if (err) {
|
||||
ext4_msg(sb, KERN_ERR, "failed to initialize system "
|
||||
"zone (%d)", err);
|
||||
goto failed_mount4a;
|
||||
}
|
||||
}
|
||||
|
||||
ext4_ext_init(sb);
|
||||
@@ -4701,7 +4703,9 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
|
||||
EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS;
|
||||
if (needs_recovery) {
|
||||
ext4_msg(sb, KERN_INFO, "recovery complete");
|
||||
ext4_mark_recovery_complete(sb, es);
|
||||
err = ext4_mark_recovery_complete(sb, es);
|
||||
if (err)
|
||||
goto failed_mount8;
|
||||
}
|
||||
if (EXT4_SB(sb)->s_journal) {
|
||||
if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
|
||||
@@ -4744,10 +4748,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
|
||||
ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
|
||||
goto failed_mount;
|
||||
|
||||
#ifdef CONFIG_QUOTA
|
||||
failed_mount8:
|
||||
ext4_unregister_sysfs(sb);
|
||||
#endif
|
||||
failed_mount7:
|
||||
ext4_unregister_li_request(sb);
|
||||
failed_mount6:
|
||||
@@ -4889,7 +4891,8 @@ static journal_t *ext4_get_journal(struct super_block *sb,
|
||||
struct inode *journal_inode;
|
||||
journal_t *journal;
|
||||
|
||||
BUG_ON(!ext4_has_feature_journal(sb));
|
||||
if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
|
||||
return NULL;
|
||||
|
||||
journal_inode = ext4_get_journal_inode(sb, journal_inum);
|
||||
if (!journal_inode)
|
||||
@@ -4919,7 +4922,8 @@ static journal_t *ext4_get_dev_journal(struct super_block *sb,
|
||||
struct ext4_super_block *es;
|
||||
struct block_device *bdev;
|
||||
|
||||
BUG_ON(!ext4_has_feature_journal(sb));
|
||||
if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
|
||||
return NULL;
|
||||
|
||||
bdev = ext4_blkdev_get(j_dev, sb);
|
||||
if (bdev == NULL)
|
||||
@@ -5010,8 +5014,10 @@ static int ext4_load_journal(struct super_block *sb,
|
||||
dev_t journal_dev;
|
||||
int err = 0;
|
||||
int really_read_only;
|
||||
int journal_dev_ro;
|
||||
|
||||
BUG_ON(!ext4_has_feature_journal(sb));
|
||||
if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
|
||||
return -EFSCORRUPTED;
|
||||
|
||||
if (journal_devnum &&
|
||||
journal_devnum != le32_to_cpu(es->s_journal_dev)) {
|
||||
@@ -5021,7 +5027,31 @@ static int ext4_load_journal(struct super_block *sb,
|
||||
} else
|
||||
journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
|
||||
|
||||
really_read_only = bdev_read_only(sb->s_bdev);
|
||||
if (journal_inum && journal_dev) {
|
||||
ext4_msg(sb, KERN_ERR,
|
||||
"filesystem has both journal inode and journal device!");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (journal_inum) {
|
||||
journal = ext4_get_journal(sb, journal_inum);
|
||||
if (!journal)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
journal = ext4_get_dev_journal(sb, journal_dev);
|
||||
if (!journal)
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
journal_dev_ro = bdev_read_only(journal->j_dev);
|
||||
really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro;
|
||||
|
||||
if (journal_dev_ro && !sb_rdonly(sb)) {
|
||||
ext4_msg(sb, KERN_ERR,
|
||||
"journal device read-only, try mounting with '-o ro'");
|
||||
err = -EROFS;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
/*
|
||||
* Are we loading a blank journal or performing recovery after a
|
||||
@@ -5036,27 +5066,14 @@ static int ext4_load_journal(struct super_block *sb,
|
||||
ext4_msg(sb, KERN_ERR, "write access "
|
||||
"unavailable, cannot proceed "
|
||||
"(try mounting with noload)");
|
||||
return -EROFS;
|
||||
err = -EROFS;
|
||||
goto err_out;
|
||||
}
|
||||
ext4_msg(sb, KERN_INFO, "write access will "
|
||||
"be enabled during recovery");
|
||||
}
|
||||
}
|
||||
|
||||
if (journal_inum && journal_dev) {
|
||||
ext4_msg(sb, KERN_ERR, "filesystem has both journal "
|
||||
"and inode journals!");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (journal_inum) {
|
||||
if (!(journal = ext4_get_journal(sb, journal_inum)))
|
||||
return -EINVAL;
|
||||
} else {
|
||||
if (!(journal = ext4_get_dev_journal(sb, journal_dev)))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!(journal->j_flags & JBD2_BARRIER))
|
||||
ext4_msg(sb, KERN_INFO, "barriers disabled");
|
||||
|
||||
@@ -5076,12 +5093,16 @@ static int ext4_load_journal(struct super_block *sb,
|
||||
|
||||
if (err) {
|
||||
ext4_msg(sb, KERN_ERR, "error loading journal");
|
||||
jbd2_journal_destroy(journal);
|
||||
return err;
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
EXT4_SB(sb)->s_journal = journal;
|
||||
ext4_clear_journal_err(sb, es);
|
||||
err = ext4_clear_journal_err(sb, es);
|
||||
if (err) {
|
||||
EXT4_SB(sb)->s_journal = NULL;
|
||||
jbd2_journal_destroy(journal);
|
||||
return err;
|
||||
}
|
||||
|
||||
if (!really_read_only && journal_devnum &&
|
||||
journal_devnum != le32_to_cpu(es->s_journal_dev)) {
|
||||
@@ -5092,6 +5113,10 @@ static int ext4_load_journal(struct super_block *sb,
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_out:
|
||||
jbd2_journal_destroy(journal);
|
||||
return err;
|
||||
}
|
||||
|
||||
static int ext4_commit_super(struct super_block *sb, int sync)
|
||||
@@ -5103,13 +5128,6 @@ static int ext4_commit_super(struct super_block *sb, int sync)
|
||||
if (!sbh || block_device_ejected(sb))
|
||||
return error;
|
||||
|
||||
/*
|
||||
* The superblock bh should be mapped, but it might not be if the
|
||||
* device was hot-removed. Not much we can do but fail the I/O.
|
||||
*/
|
||||
if (!buffer_mapped(sbh))
|
||||
return error;
|
||||
|
||||
/*
|
||||
* If the file system is mounted read-only, don't update the
|
||||
* superblock write time. This avoids updating the superblock
|
||||
@@ -5177,26 +5195,32 @@ static int ext4_commit_super(struct super_block *sb, int sync)
|
||||
* remounting) the filesystem readonly, then we will end up with a
|
||||
* consistent fs on disk. Record that fact.
|
||||
*/
|
||||
static void ext4_mark_recovery_complete(struct super_block *sb,
|
||||
struct ext4_super_block *es)
|
||||
static int ext4_mark_recovery_complete(struct super_block *sb,
|
||||
struct ext4_super_block *es)
|
||||
{
|
||||
int err;
|
||||
journal_t *journal = EXT4_SB(sb)->s_journal;
|
||||
|
||||
if (!ext4_has_feature_journal(sb)) {
|
||||
BUG_ON(journal != NULL);
|
||||
return;
|
||||
if (journal != NULL) {
|
||||
ext4_error(sb, "Journal got removed while the fs was "
|
||||
"mounted!");
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
jbd2_journal_lock_updates(journal);
|
||||
if (jbd2_journal_flush(journal) < 0)
|
||||
err = jbd2_journal_flush(journal);
|
||||
if (err < 0)
|
||||
goto out;
|
||||
|
||||
if (ext4_has_feature_journal_needs_recovery(sb) && sb_rdonly(sb)) {
|
||||
ext4_clear_feature_journal_needs_recovery(sb);
|
||||
ext4_commit_super(sb, 1);
|
||||
}
|
||||
|
||||
out:
|
||||
jbd2_journal_unlock_updates(journal);
|
||||
return err;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5204,14 +5228,17 @@ static void ext4_mark_recovery_complete(struct super_block *sb,
|
||||
* has recorded an error from a previous lifetime, move that error to the
|
||||
* main filesystem now.
|
||||
*/
|
||||
static void ext4_clear_journal_err(struct super_block *sb,
|
||||
static int ext4_clear_journal_err(struct super_block *sb,
|
||||
struct ext4_super_block *es)
|
||||
{
|
||||
journal_t *journal;
|
||||
int j_errno;
|
||||
const char *errstr;
|
||||
|
||||
BUG_ON(!ext4_has_feature_journal(sb));
|
||||
if (!ext4_has_feature_journal(sb)) {
|
||||
ext4_error(sb, "Journal got removed while the fs was mounted!");
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
journal = EXT4_SB(sb)->s_journal;
|
||||
|
||||
@@ -5236,6 +5263,7 @@ static void ext4_clear_journal_err(struct super_block *sb,
|
||||
jbd2_journal_clear_err(journal);
|
||||
jbd2_journal_update_sb_errno(journal);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -5378,7 +5406,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
{
|
||||
struct ext4_super_block *es;
|
||||
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
||||
unsigned long old_sb_flags;
|
||||
unsigned long old_sb_flags, vfs_flags;
|
||||
struct ext4_mount_options old_opts;
|
||||
int enable_quota = 0;
|
||||
ext4_group_t g;
|
||||
@@ -5421,6 +5449,14 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
if (sbi->s_journal && sbi->s_journal->j_task->io_context)
|
||||
journal_ioprio = sbi->s_journal->j_task->io_context->ioprio;
|
||||
|
||||
/*
|
||||
* Some options can be enabled by ext4 and/or by VFS mount flag
|
||||
* either way we need to make sure it matches in both *flags and
|
||||
* s_flags. Copy those selected flags from *flags to s_flags
|
||||
*/
|
||||
vfs_flags = SB_LAZYTIME | SB_I_VERSION;
|
||||
sb->s_flags = (sb->s_flags & ~vfs_flags) | (*flags & vfs_flags);
|
||||
|
||||
if (!parse_options(data, sb, NULL, &journal_ioprio, 1)) {
|
||||
err = -EINVAL;
|
||||
goto restore_opts;
|
||||
@@ -5474,9 +5510,6 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
|
||||
}
|
||||
|
||||
if (*flags & SB_LAZYTIME)
|
||||
sb->s_flags |= SB_LAZYTIME;
|
||||
|
||||
if ((bool)(*flags & SB_RDONLY) != sb_rdonly(sb)) {
|
||||
if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) {
|
||||
err = -EROFS;
|
||||
@@ -5506,8 +5539,13 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
(sbi->s_mount_state & EXT4_VALID_FS))
|
||||
es->s_state = cpu_to_le16(sbi->s_mount_state);
|
||||
|
||||
if (sbi->s_journal)
|
||||
if (sbi->s_journal) {
|
||||
/*
|
||||
* We let remount-ro finish even if marking fs
|
||||
* as clean failed...
|
||||
*/
|
||||
ext4_mark_recovery_complete(sb, es);
|
||||
}
|
||||
if (sbi->s_mmp_tsk)
|
||||
kthread_stop(sbi->s_mmp_tsk);
|
||||
} else {
|
||||
@@ -5555,8 +5593,11 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
* been changed by e2fsck since we originally mounted
|
||||
* the partition.)
|
||||
*/
|
||||
if (sbi->s_journal)
|
||||
ext4_clear_journal_err(sb, es);
|
||||
if (sbi->s_journal) {
|
||||
err = ext4_clear_journal_err(sb, es);
|
||||
if (err)
|
||||
goto restore_opts;
|
||||
}
|
||||
sbi->s_mount_state = le16_to_cpu(es->s_state);
|
||||
|
||||
err = ext4_setup_super(sb, es, 0);
|
||||
@@ -5586,7 +5627,17 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
ext4_register_li_request(sb, first_not_zeroed);
|
||||
}
|
||||
|
||||
ext4_setup_system_zone(sb);
|
||||
/*
|
||||
* Handle creation of system zone data early because it can fail.
|
||||
* Releasing of existing data is done when we are sure remount will
|
||||
* succeed.
|
||||
*/
|
||||
if (test_opt(sb, BLOCK_VALIDITY) && !sbi->system_blks) {
|
||||
err = ext4_setup_system_zone(sb);
|
||||
if (err)
|
||||
goto restore_opts;
|
||||
}
|
||||
|
||||
if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) {
|
||||
err = ext4_commit_super(sb, 1);
|
||||
if (err)
|
||||
@@ -5607,8 +5658,16 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!test_opt(sb, BLOCK_VALIDITY) && sbi->system_blks)
|
||||
ext4_release_system_zone(sb);
|
||||
|
||||
/*
|
||||
* Some options can be enabled by ext4 and/or by VFS mount flag
|
||||
* either way we need to make sure it matches in both *flags and
|
||||
* s_flags. Copy those selected flags from s_flags to *flags
|
||||
*/
|
||||
*flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags);
|
||||
|
||||
*flags = (*flags & ~SB_LAZYTIME) | (sb->s_flags & SB_LAZYTIME);
|
||||
ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s", orig_data);
|
||||
kfree(orig_data);
|
||||
return 0;
|
||||
@@ -5622,6 +5681,8 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
|
||||
sbi->s_commit_interval = old_opts.s_commit_interval;
|
||||
sbi->s_min_batch_time = old_opts.s_min_batch_time;
|
||||
sbi->s_max_batch_time = old_opts.s_max_batch_time;
|
||||
if (!test_opt(sb, BLOCK_VALIDITY) && sbi->system_blks)
|
||||
ext4_release_system_zone(sb);
|
||||
#ifdef CONFIG_QUOTA
|
||||
sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
|
||||
for (i = 0; i < EXT4_MAXQUOTAS; i++) {
|
||||
|
||||
Reference in New Issue
Block a user