ioctl.c (5a94296bc02ac616336da7b5332b86d2ca8827f0) | ioctl.c (8813587a996e7d2ae160be3b79f9f70d9fef4583) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ext4/ioctl.c 4 * 5 * Copyright (C) 1993, 1994, 1995 6 * Remy Card (card@masi.ibp.fr) 7 * Laboratoire MASI - Institut Blaise Pascal 8 * Universite Pierre et Marie Curie (Paris VI) --- 645 unchanged lines hidden (view full) --- 654 ext4_fsmap_to_internal(sb, &xhead.fmh_keys[1], &head.fmh_keys[1]); 655 656 trace_ext4_getfsmap_low_key(sb, &xhead.fmh_keys[0]); 657 trace_ext4_getfsmap_high_key(sb, &xhead.fmh_keys[1]); 658 659 info.gi_sb = sb; 660 info.gi_data = arg; 661 error = ext4_getfsmap(sb, &xhead, ext4_getfsmap_format, &info); | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * linux/fs/ext4/ioctl.c 4 * 5 * Copyright (C) 1993, 1994, 1995 6 * Remy Card (card@masi.ibp.fr) 7 * Laboratoire MASI - Institut Blaise Pascal 8 * Universite Pierre et Marie Curie (Paris VI) --- 645 unchanged lines hidden (view full) --- 654 ext4_fsmap_to_internal(sb, &xhead.fmh_keys[1], &head.fmh_keys[1]); 655 656 trace_ext4_getfsmap_low_key(sb, &xhead.fmh_keys[0]); 657 trace_ext4_getfsmap_high_key(sb, &xhead.fmh_keys[1]); 658 659 info.gi_sb = sb; 660 info.gi_data = arg; 661 error = ext4_getfsmap(sb, &xhead, ext4_getfsmap_format, &info); |
662 if (error == EXT4_QUERY_RANGE_ABORT) { 663 error = 0; | 662 if (error == EXT4_QUERY_RANGE_ABORT) |
664 aborted = true; | 663 aborted = true; |
665 } else if (error) | 664 else if (error) |
666 return error; 667 668 /* If we didn't abort, set the "last" flag in the last fmx */ 669 if (!aborted && info.gi_idx) { 670 info.gi_last_flags |= FMR_OF_LAST; 671 if (copy_to_user(&info.gi_data->fmh_recs[info.gi_idx - 1].fmr_flags, 672 &info.gi_last_flags, 673 sizeof(info.gi_last_flags))) --- 28 unchanged lines hidden (view full) --- 702 703 err = mnt_want_write_file(file); 704 if (err) 705 goto group_add_out; 706 707 err = ext4_group_add(sb, input); 708 if (EXT4_SB(sb)->s_journal) { 709 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); | 665 return error; 666 667 /* If we didn't abort, set the "last" flag in the last fmx */ 668 if (!aborted && info.gi_idx) { 669 info.gi_last_flags |= FMR_OF_LAST; 670 if (copy_to_user(&info.gi_data->fmh_recs[info.gi_idx - 1].fmr_flags, 671 &info.gi_last_flags, 672 sizeof(info.gi_last_flags))) --- 28 unchanged lines hidden (view full) --- 701 702 err = mnt_want_write_file(file); 703 if (err) 704 goto group_add_out; 705 706 err = ext4_group_add(sb, input); 707 if (EXT4_SB(sb)->s_journal) { 708 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); |
710 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); | 709 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0); |
711 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 712 } 713 if (err == 0) 714 err = err2; 715 mnt_drop_write_file(file); 716 if (!err && ext4_has_group_desc_csum(sb) && 717 test_opt(sb, INIT_INODE_TABLE)) 718 err = ext4_register_li_request(sb, input->group); --- 76 unchanged lines hidden (view full) --- 795 fiemap.fm_flags = fieinfo.fi_flags; 796 fiemap.fm_mapped_extents = fieinfo.fi_extents_mapped; 797 if (copy_to_user(ufiemap, &fiemap, sizeof(fiemap))) 798 error = -EFAULT; 799 800 return error; 801} 802 | 710 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 711 } 712 if (err == 0) 713 err = err2; 714 mnt_drop_write_file(file); 715 if (!err && ext4_has_group_desc_csum(sb) && 716 test_opt(sb, INIT_INODE_TABLE)) 717 err = ext4_register_li_request(sb, input->group); --- 76 unchanged lines hidden (view full) --- 794 fiemap.fm_flags = fieinfo.fi_flags; 795 fiemap.fm_mapped_extents = fieinfo.fi_extents_mapped; 796 if (copy_to_user(ufiemap, &fiemap, sizeof(fiemap))) 797 error = -EFAULT; 798 799 return error; 800} 801 |
802static int ext4_ioctl_checkpoint(struct file *filp, unsigned long arg) 803{ 804 int err = 0; 805 __u32 flags = 0; 806 unsigned int flush_flags = 0; 807 struct super_block *sb = file_inode(filp)->i_sb; 808 struct request_queue *q; 809 810 if (copy_from_user(&flags, (__u32 __user *)arg, 811 sizeof(__u32))) 812 return -EFAULT; 813 814 if (!capable(CAP_SYS_ADMIN)) 815 return -EPERM; 816 817 /* check for invalid bits set */ 818 if ((flags & ~EXT4_IOC_CHECKPOINT_FLAG_VALID) || 819 ((flags & JBD2_JOURNAL_FLUSH_DISCARD) && 820 (flags & JBD2_JOURNAL_FLUSH_ZEROOUT))) 821 return -EINVAL; 822 823 if (!EXT4_SB(sb)->s_journal) 824 return -ENODEV; 825 826 if (flags & ~JBD2_JOURNAL_FLUSH_VALID) 827 return -EINVAL; 828 829 q = bdev_get_queue(EXT4_SB(sb)->s_journal->j_dev); 830 if (!q) 831 return -ENXIO; 832 if ((flags & JBD2_JOURNAL_FLUSH_DISCARD) && !blk_queue_discard(q)) 833 return -EOPNOTSUPP; 834 835 if (flags & EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN) 836 return 0; 837 838 if (flags & EXT4_IOC_CHECKPOINT_FLAG_DISCARD) 839 flush_flags |= JBD2_JOURNAL_FLUSH_DISCARD; 840 841 if (flags & EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT) { 842 flush_flags |= JBD2_JOURNAL_FLUSH_ZEROOUT; 843 pr_info_ratelimited("warning: checkpointing journal with EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT can be slow"); 844 } 845 846 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); 847 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal, flush_flags); 848 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 849 850 return err; 851} 852 |
|
803static long __ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 804{ 805 struct inode *inode = file_inode(filp); 806 struct super_block *sb = inode->i_sb; 807 struct user_namespace *mnt_userns = file_mnt_user_ns(filp); 808 809 ext4_debug("cmd = %u, arg = %lu\n", cmd, arg); 810 --- 69 unchanged lines hidden (view full) --- 880 881 err = mnt_want_write_file(filp); 882 if (err) 883 goto group_extend_out; 884 885 err = ext4_group_extend(sb, EXT4_SB(sb)->s_es, n_blocks_count); 886 if (EXT4_SB(sb)->s_journal) { 887 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); | 853static long __ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 854{ 855 struct inode *inode = file_inode(filp); 856 struct super_block *sb = inode->i_sb; 857 struct user_namespace *mnt_userns = file_mnt_user_ns(filp); 858 859 ext4_debug("cmd = %u, arg = %lu\n", cmd, arg); 860 --- 69 unchanged lines hidden (view full) --- 930 931 err = mnt_want_write_file(filp); 932 if (err) 933 goto group_extend_out; 934 935 err = ext4_group_extend(sb, EXT4_SB(sb)->s_es, n_blocks_count); 936 if (EXT4_SB(sb)->s_journal) { 937 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); |
888 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); | 938 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0); |
889 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 890 } 891 if (err == 0) 892 err = err2; 893 mnt_drop_write_file(filp); 894group_extend_out: 895 ext4_resize_end(sb); 896 return err; --- 126 unchanged lines hidden (view full) --- 1023 err = mnt_want_write_file(filp); 1024 if (err) 1025 goto resizefs_out; 1026 1027 err = ext4_resize_fs(sb, n_blocks_count); 1028 if (EXT4_SB(sb)->s_journal) { 1029 ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_RESIZE); 1030 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); | 939 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 940 } 941 if (err == 0) 942 err = err2; 943 mnt_drop_write_file(filp); 944group_extend_out: 945 ext4_resize_end(sb); 946 return err; --- 126 unchanged lines hidden (view full) --- 1073 err = mnt_want_write_file(filp); 1074 if (err) 1075 goto resizefs_out; 1076 1077 err = ext4_resize_fs(sb, n_blocks_count); 1078 if (EXT4_SB(sb)->s_journal) { 1079 ext4_fc_mark_ineligible(sb, EXT4_FC_REASON_RESIZE); 1080 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); |
1031 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal); | 1081 err2 = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0); |
1032 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 1033 } 1034 if (err == 0) 1035 err = err2; 1036 mnt_drop_write_file(filp); 1037 if (!err && (o_group < EXT4_SB(sb)->s_groups_count) && 1038 ext4_has_group_desc_csum(sb) && 1039 test_opt(sb, INIT_INODE_TABLE)) --- 166 unchanged lines hidden (view full) --- 1206 return fsverity_ioctl_measure(filp, (void __user *)arg); 1207 1208 case FS_IOC_READ_VERITY_METADATA: 1209 if (!ext4_has_feature_verity(sb)) 1210 return -EOPNOTSUPP; 1211 return fsverity_ioctl_read_metadata(filp, 1212 (const void __user *)arg); 1213 | 1082 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); 1083 } 1084 if (err == 0) 1085 err = err2; 1086 mnt_drop_write_file(filp); 1087 if (!err && (o_group < EXT4_SB(sb)->s_groups_count) && 1088 ext4_has_group_desc_csum(sb) && 1089 test_opt(sb, INIT_INODE_TABLE)) --- 166 unchanged lines hidden (view full) --- 1256 return fsverity_ioctl_measure(filp, (void __user *)arg); 1257 1258 case FS_IOC_READ_VERITY_METADATA: 1259 if (!ext4_has_feature_verity(sb)) 1260 return -EOPNOTSUPP; 1261 return fsverity_ioctl_read_metadata(filp, 1262 (const void __user *)arg); 1263 |
1264 case EXT4_IOC_CHECKPOINT: 1265 return ext4_ioctl_checkpoint(filp, arg); 1266 |
|
1214 default: 1215 return -ENOTTY; 1216 } 1217} 1218 1219long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 1220{ 1221 long ret; --- 64 unchanged lines hidden (view full) --- 1286 case EXT4_IOC_SHUTDOWN: 1287 case FS_IOC_GETFSMAP: 1288 case FS_IOC_ENABLE_VERITY: 1289 case FS_IOC_MEASURE_VERITY: 1290 case FS_IOC_READ_VERITY_METADATA: 1291 case EXT4_IOC_CLEAR_ES_CACHE: 1292 case EXT4_IOC_GETSTATE: 1293 case EXT4_IOC_GET_ES_CACHE: | 1267 default: 1268 return -ENOTTY; 1269 } 1270} 1271 1272long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) 1273{ 1274 long ret; --- 64 unchanged lines hidden (view full) --- 1339 case EXT4_IOC_SHUTDOWN: 1340 case FS_IOC_GETFSMAP: 1341 case FS_IOC_ENABLE_VERITY: 1342 case FS_IOC_MEASURE_VERITY: 1343 case FS_IOC_READ_VERITY_METADATA: 1344 case EXT4_IOC_CLEAR_ES_CACHE: 1345 case EXT4_IOC_GETSTATE: 1346 case EXT4_IOC_GET_ES_CACHE: |
1347 case EXT4_IOC_CHECKPOINT: |
|
1294 break; 1295 default: 1296 return -ENOIOCTLCMD; 1297 } 1298 return ext4_ioctl(file, cmd, (unsigned long) compat_ptr(arg)); 1299} 1300#endif | 1348 break; 1349 default: 1350 return -ENOIOCTLCMD; 1351 } 1352 return ext4_ioctl(file, cmd, (unsigned long) compat_ptr(arg)); 1353} 1354#endif |