hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/fs/nilfs2/ioctl.c
....@@ -70,7 +70,7 @@
7070 if (argv->v_index > ~(__u64)0 - argv->v_nmembs)
7171 return -EINVAL;
7272
73
- buf = (void *)__get_free_pages(GFP_NOFS, 0);
73
+ buf = (void *)get_zeroed_page(GFP_NOFS);
7474 if (unlikely(!buf))
7575 return -ENOMEM;
7676 maxmembs = PAGE_SIZE / argv->v_size;
....@@ -148,13 +148,8 @@
148148
149149 oldflags = NILFS_I(inode)->i_flags;
150150
151
- /*
152
- * The IMMUTABLE and APPEND_ONLY flags can only be changed by the
153
- * relevant capability.
154
- */
155
- ret = -EPERM;
156
- if (((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL)) &&
157
- !capable(CAP_LINUX_IMMUTABLE))
151
+ ret = vfs_ioc_setflags_prepare(inode, oldflags, flags);
152
+ if (ret)
158153 goto out;
159154
160155 ret = nilfs_transaction_begin(inode->i_sb, &ti, 0);
....@@ -574,25 +569,25 @@
574569
575570 if (unlikely(ret < 0)) {
576571 if (ret == -ENOENT)
577
- nilfs_msg(inode->i_sb, KERN_CRIT,
578
- "%s: invalid virtual block address (%s): ino=%llu, cno=%llu, offset=%llu, blocknr=%llu, vblocknr=%llu",
579
- __func__, vdesc->vd_flags ? "node" : "data",
580
- (unsigned long long)vdesc->vd_ino,
581
- (unsigned long long)vdesc->vd_cno,
582
- (unsigned long long)vdesc->vd_offset,
583
- (unsigned long long)vdesc->vd_blocknr,
584
- (unsigned long long)vdesc->vd_vblocknr);
572
+ nilfs_crit(inode->i_sb,
573
+ "%s: invalid virtual block address (%s): ino=%llu, cno=%llu, offset=%llu, blocknr=%llu, vblocknr=%llu",
574
+ __func__, vdesc->vd_flags ? "node" : "data",
575
+ (unsigned long long)vdesc->vd_ino,
576
+ (unsigned long long)vdesc->vd_cno,
577
+ (unsigned long long)vdesc->vd_offset,
578
+ (unsigned long long)vdesc->vd_blocknr,
579
+ (unsigned long long)vdesc->vd_vblocknr);
585580 return ret;
586581 }
587582 if (unlikely(!list_empty(&bh->b_assoc_buffers))) {
588
- nilfs_msg(inode->i_sb, KERN_CRIT,
589
- "%s: conflicting %s buffer: ino=%llu, cno=%llu, offset=%llu, blocknr=%llu, vblocknr=%llu",
590
- __func__, vdesc->vd_flags ? "node" : "data",
591
- (unsigned long long)vdesc->vd_ino,
592
- (unsigned long long)vdesc->vd_cno,
593
- (unsigned long long)vdesc->vd_offset,
594
- (unsigned long long)vdesc->vd_blocknr,
595
- (unsigned long long)vdesc->vd_vblocknr);
583
+ nilfs_crit(inode->i_sb,
584
+ "%s: conflicting %s buffer: ino=%llu, cno=%llu, offset=%llu, blocknr=%llu, vblocknr=%llu",
585
+ __func__, vdesc->vd_flags ? "node" : "data",
586
+ (unsigned long long)vdesc->vd_ino,
587
+ (unsigned long long)vdesc->vd_cno,
588
+ (unsigned long long)vdesc->vd_offset,
589
+ (unsigned long long)vdesc->vd_blocknr,
590
+ (unsigned long long)vdesc->vd_vblocknr);
596591 brelse(bh);
597592 return -EEXIST;
598593 }
....@@ -842,8 +837,7 @@
842837 return 0;
843838
844839 failed:
845
- nilfs_msg(nilfs->ns_sb, KERN_ERR, "error %d preparing GC: %s", ret,
846
- msg);
840
+ nilfs_err(nilfs->ns_sb, "error %d preparing GC: %s", ret, msg);
847841 return ret;
848842 }
849843
....@@ -952,7 +946,7 @@
952946
953947 ret = nilfs_ioctl_move_blocks(inode->i_sb, &argv[0], kbufs[0]);
954948 if (ret < 0) {
955
- nilfs_msg(inode->i_sb, KERN_ERR,
949
+ nilfs_err(inode->i_sb,
956950 "error %d preparing GC: cannot read source blocks",
957951 ret);
958952 } else {
....@@ -1135,7 +1129,14 @@
11351129
11361130 minseg = range[0] + segbytes - 1;
11371131 do_div(minseg, segbytes);
1132
+
1133
+ if (range[1] < 4096)
1134
+ goto out;
1135
+
11381136 maxseg = NILFS_SB2_OFFSET_BYTES(range[1]);
1137
+ if (maxseg < segbytes)
1138
+ goto out;
1139
+
11391140 do_div(maxseg, segbytes);
11401141 maxseg--;
11411142
....@@ -1359,6 +1360,7 @@
13591360 case NILFS_IOCTL_SYNC:
13601361 case NILFS_IOCTL_RESIZE:
13611362 case NILFS_IOCTL_SET_ALLOC_RANGE:
1363
+ case FITRIM:
13621364 break;
13631365 default:
13641366 return -ENOIOCTLCMD;