Skip to content

Commit 91b0abe

Browse files
hnaztorvalds
authored andcommitted
mm + fs: store shadow entries in page cache
Reclaim will be leaving shadow entries in the page cache radix tree upon evicting the real page. As those pages are found from the LRU, an iput() can lead to the inode being freed concurrently. At this point, reclaim must no longer install shadow pages because the inode freeing code needs to ensure the page tree is really empty. Add an address_space flag, AS_EXITING, that the inode freeing code sets under the tree lock before doing the final truncate. Reclaim will check for this flag before installing shadow pages. Signed-off-by: Johannes Weiner <[email protected]> Reviewed-by: Rik van Riel <[email protected]> Reviewed-by: Minchan Kim <[email protected]> Cc: Andrea Arcangeli <[email protected]> Cc: Bob Liu <[email protected]> Cc: Christoph Hellwig <[email protected]> Cc: Dave Chinner <[email protected]> Cc: Greg Thelen <[email protected]> Cc: Hugh Dickins <[email protected]> Cc: Jan Kara <[email protected]> Cc: KOSAKI Motohiro <[email protected]> Cc: Luigi Semenzato <[email protected]> Cc: Mel Gorman <[email protected]> Cc: Metin Doslu <[email protected]> Cc: Michel Lespinasse <[email protected]> Cc: Ozgun Erdogan <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Roman Gushchin <[email protected]> Cc: Ryan Mallon <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Vlastimil Babka <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 0cd6144 commit 91b0abe

File tree

50 files changed

+147
-65
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+147
-65
lines changed

Documentation/filesystems/porting

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -295,9 +295,9 @@ in the beginning of ->setattr unconditionally.
295295
->clear_inode() and ->delete_inode() are gone; ->evict_inode() should
296296
be used instead. It gets called whenever the inode is evicted, whether it has
297297
remaining links or not. Caller does *not* evict the pagecache or inode-associated
298-
metadata buffers; getting rid of those is responsibility of method, as it had
299-
been for ->delete_inode(). Caller makes sure async writeback cannot be running
300-
for the inode while (or after) ->evict_inode() is called.
298+
metadata buffers; the method has to use truncate_inode_pages_final() to get rid
299+
of those. Caller makes sure async writeback cannot be running for the inode while
300+
(or after) ->evict_inode() is called.
301301

302302
->drop_inode() returns int now; it's called on final iput() with
303303
inode->i_lock held and it returns true if filesystems wants the inode to be

drivers/staging/lustre/lustre/llite/llite_lib.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1877,7 +1877,7 @@ void ll_delete_inode(struct inode *inode)
18771877
cl_sync_file_range(inode, 0, OBD_OBJECT_EOF,
18781878
CL_FSYNC_DISCARD, 1);
18791879

1880-
truncate_inode_pages(&inode->i_data, 0);
1880+
truncate_inode_pages_final(&inode->i_data);
18811881

18821882
/* Workaround for LU-118 */
18831883
if (inode->i_data.nrpages) {

fs/9p/vfs_inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ void v9fs_evict_inode(struct inode *inode)
451451
{
452452
struct v9fs_inode *v9inode = V9FS_I(inode);
453453

454-
truncate_inode_pages(inode->i_mapping, 0);
454+
truncate_inode_pages_final(inode->i_mapping);
455455
clear_inode(inode);
456456
filemap_fdatawrite(inode->i_mapping);
457457

fs/affs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ affs_evict_inode(struct inode *inode)
259259
{
260260
unsigned long cache_page;
261261
pr_debug("AFFS: evict_inode(ino=%lu, nlink=%u)\n", inode->i_ino, inode->i_nlink);
262-
truncate_inode_pages(&inode->i_data, 0);
262+
truncate_inode_pages_final(&inode->i_data);
263263

264264
if (!inode->i_nlink) {
265265
inode->i_size = 0;

fs/afs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ void afs_evict_inode(struct inode *inode)
422422

423423
ASSERTCMP(inode->i_ino, ==, vnode->fid.vnode);
424424

425-
truncate_inode_pages(&inode->i_data, 0);
425+
truncate_inode_pages_final(&inode->i_data);
426426
clear_inode(inode);
427427

428428
afs_give_up_callback(vnode);

fs/bfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ static void bfs_evict_inode(struct inode *inode)
172172

173173
dprintf("ino=%08lx\n", ino);
174174

175-
truncate_inode_pages(&inode->i_data, 0);
175+
truncate_inode_pages_final(&inode->i_data);
176176
invalidate_inode_buffers(inode);
177177
clear_inode(inode);
178178

fs/block_dev.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void kill_bdev(struct block_device *bdev)
8383
{
8484
struct address_space *mapping = bdev->bd_inode->i_mapping;
8585

86-
if (mapping->nrpages == 0)
86+
if (mapping->nrpages == 0 && mapping->nrshadows == 0)
8787
return;
8888

8989
invalidate_bh_lrus();
@@ -419,7 +419,7 @@ static void bdev_evict_inode(struct inode *inode)
419419
{
420420
struct block_device *bdev = &BDEV_I(inode)->bdev;
421421
struct list_head *p;
422-
truncate_inode_pages(&inode->i_data, 0);
422+
truncate_inode_pages_final(&inode->i_data);
423423
invalidate_inode_buffers(inode); /* is it needed here? */
424424
clear_inode(inode);
425425
spin_lock(&bdev_lock);

fs/btrfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4593,7 +4593,7 @@ static void evict_inode_truncate_pages(struct inode *inode)
45934593
struct rb_node *node;
45944594

45954595
ASSERT(inode->i_state & I_FREEING);
4596-
truncate_inode_pages(&inode->i_data, 0);
4596+
truncate_inode_pages_final(&inode->i_data);
45974597

45984598
write_lock(&map_tree->lock);
45994599
while (!RB_EMPTY_ROOT(&map_tree->map)) {

fs/cifs/cifsfs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ cifs_destroy_inode(struct inode *inode)
286286
static void
287287
cifs_evict_inode(struct inode *inode)
288288
{
289-
truncate_inode_pages(&inode->i_data, 0);
289+
truncate_inode_pages_final(&inode->i_data);
290290
clear_inode(inode);
291291
cifs_fscache_release_inode_cookie(inode);
292292
}

fs/coda/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ static void coda_put_super(struct super_block *sb)
250250

251251
static void coda_evict_inode(struct inode *inode)
252252
{
253-
truncate_inode_pages(&inode->i_data, 0);
253+
truncate_inode_pages_final(&inode->i_data);
254254
clear_inode(inode);
255255
coda_cache_clear_inode(inode);
256256
}

fs/ecryptfs/super.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ static int ecryptfs_statfs(struct dentry *dentry, struct kstatfs *buf)
132132
*/
133133
static void ecryptfs_evict_inode(struct inode *inode)
134134
{
135-
truncate_inode_pages(&inode->i_data, 0);
135+
truncate_inode_pages_final(&inode->i_data);
136136
clear_inode(inode);
137137
iput(ecryptfs_inode_to_lower(inode));
138138
}

fs/exofs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1486,7 +1486,7 @@ void exofs_evict_inode(struct inode *inode)
14861486
struct ore_io_state *ios;
14871487
int ret;
14881488

1489-
truncate_inode_pages(&inode->i_data, 0);
1489+
truncate_inode_pages_final(&inode->i_data);
14901490

14911491
/* TODO: should do better here */
14921492
if (inode->i_nlink || is_bad_inode(inode))

fs/ext2/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ void ext2_evict_inode(struct inode * inode)
7878
dquot_drop(inode);
7979
}
8080

81-
truncate_inode_pages(&inode->i_data, 0);
81+
truncate_inode_pages_final(&inode->i_data);
8282

8383
if (want_delete) {
8484
sb_start_intwrite(inode->i_sb);

fs/ext3/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ void ext3_evict_inode (struct inode *inode)
228228
log_wait_commit(journal, commit_tid);
229229
filemap_write_and_wait(&inode->i_data);
230230
}
231-
truncate_inode_pages(&inode->i_data, 0);
231+
truncate_inode_pages_final(&inode->i_data);
232232

233233
ext3_discard_reservation(inode);
234234
rsv = ei->i_block_alloc_info;

fs/ext4/inode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ void ext4_evict_inode(struct inode *inode)
215215
jbd2_complete_transaction(journal, commit_tid);
216216
filemap_write_and_wait(&inode->i_data);
217217
}
218-
truncate_inode_pages(&inode->i_data, 0);
218+
truncate_inode_pages_final(&inode->i_data);
219219

220220
WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count));
221221
goto no_delete;
@@ -226,7 +226,7 @@ void ext4_evict_inode(struct inode *inode)
226226

227227
if (ext4_should_order_data(inode))
228228
ext4_begin_ordered_truncate(inode, 0);
229-
truncate_inode_pages(&inode->i_data, 0);
229+
truncate_inode_pages_final(&inode->i_data);
230230

231231
WARN_ON(atomic_read(&EXT4_I(inode)->i_ioend_count));
232232
if (is_bad_inode(inode))

fs/f2fs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ void f2fs_evict_inode(struct inode *inode)
260260
struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
261261

262262
trace_f2fs_evict_inode(inode);
263-
truncate_inode_pages(&inode->i_data, 0);
263+
truncate_inode_pages_final(&inode->i_data);
264264

265265
if (inode->i_ino == F2FS_NODE_INO(sbi) ||
266266
inode->i_ino == F2FS_META_INO(sbi))

fs/fat/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ EXPORT_SYMBOL_GPL(fat_build_inode);
490490

491491
static void fat_evict_inode(struct inode *inode)
492492
{
493-
truncate_inode_pages(&inode->i_data, 0);
493+
truncate_inode_pages_final(&inode->i_data);
494494
if (!inode->i_nlink) {
495495
inode->i_size = 0;
496496
fat_truncate_blocks(inode, 0);

fs/freevxfs/vxfs_inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ static void vxfs_i_callback(struct rcu_head *head)
354354
void
355355
vxfs_evict_inode(struct inode *ip)
356356
{
357-
truncate_inode_pages(&ip->i_data, 0);
357+
truncate_inode_pages_final(&ip->i_data);
358358
clear_inode(ip);
359359
call_rcu(&ip->i_rcu, vxfs_i_callback);
360360
}

fs/fuse/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static void fuse_destroy_inode(struct inode *inode)
123123

124124
static void fuse_evict_inode(struct inode *inode)
125125
{
126-
truncate_inode_pages(&inode->i_data, 0);
126+
truncate_inode_pages_final(&inode->i_data);
127127
clear_inode(inode);
128128
if (inode->i_sb->s_flags & MS_ACTIVE) {
129129
struct fuse_conn *fc = get_fuse_conn(inode);

fs/gfs2/super.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1558,7 +1558,7 @@ static void gfs2_evict_inode(struct inode *inode)
15581558
fs_warn(sdp, "gfs2_evict_inode: %d\n", error);
15591559
out:
15601560
/* Case 3 starts here */
1561-
truncate_inode_pages(&inode->i_data, 0);
1561+
truncate_inode_pages_final(&inode->i_data);
15621562
gfs2_rs_delete(ip, NULL);
15631563
gfs2_ordered_del_inode(ip);
15641564
clear_inode(inode);

fs/hfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ static struct dentry *hfs_file_lookup(struct inode *dir, struct dentry *dentry,
547547

548548
void hfs_evict_inode(struct inode *inode)
549549
{
550-
truncate_inode_pages(&inode->i_data, 0);
550+
truncate_inode_pages_final(&inode->i_data);
551551
clear_inode(inode);
552552
if (HFS_IS_RSRC(inode) && HFS_I(inode)->rsrc_inode) {
553553
HFS_I(HFS_I(inode)->rsrc_inode)->rsrc_inode = NULL;

fs/hfsplus/super.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ static int hfsplus_write_inode(struct inode *inode,
161161
static void hfsplus_evict_inode(struct inode *inode)
162162
{
163163
hfs_dbg(INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino);
164-
truncate_inode_pages(&inode->i_data, 0);
164+
truncate_inode_pages_final(&inode->i_data);
165165
clear_inode(inode);
166166
if (HFSPLUS_IS_RSRC(inode)) {
167167
HFSPLUS_I(HFSPLUS_I(inode)->rsrc_inode)->rsrc_inode = NULL;

fs/hostfs/hostfs_kern.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb)
230230

231231
static void hostfs_evict_inode(struct inode *inode)
232232
{
233-
truncate_inode_pages(&inode->i_data, 0);
233+
truncate_inode_pages_final(&inode->i_data);
234234
clear_inode(inode);
235235
if (HOSTFS_I(inode)->fd != -1) {
236236
close_file(&HOSTFS_I(inode)->fd);

fs/hpfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,7 +304,7 @@ void hpfs_write_if_changed(struct inode *inode)
304304

305305
void hpfs_evict_inode(struct inode *inode)
306306
{
307-
truncate_inode_pages(&inode->i_data, 0);
307+
truncate_inode_pages_final(&inode->i_data);
308308
clear_inode(inode);
309309
if (!inode->i_nlink) {
310310
hpfs_lock(inode->i_sb);

fs/inode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ void clear_inode(struct inode *inode)
503503
*/
504504
spin_lock_irq(&inode->i_data.tree_lock);
505505
BUG_ON(inode->i_data.nrpages);
506+
BUG_ON(inode->i_data.nrshadows);
506507
spin_unlock_irq(&inode->i_data.tree_lock);
507508
BUG_ON(!list_empty(&inode->i_data.private_list));
508509
BUG_ON(!(inode->i_state & I_FREEING));
@@ -548,8 +549,7 @@ static void evict(struct inode *inode)
548549
if (op->evict_inode) {
549550
op->evict_inode(inode);
550551
} else {
551-
if (inode->i_data.nrpages)
552-
truncate_inode_pages(&inode->i_data, 0);
552+
truncate_inode_pages_final(&inode->i_data);
553553
clear_inode(inode);
554554
}
555555
if (S_ISBLK(inode->i_mode) && inode->i_bdev)

fs/jffs2/fs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ void jffs2_evict_inode (struct inode *inode)
242242

243243
jffs2_dbg(1, "%s(): ino #%lu mode %o\n",
244244
__func__, inode->i_ino, inode->i_mode);
245-
truncate_inode_pages(&inode->i_data, 0);
245+
truncate_inode_pages_final(&inode->i_data);
246246
clear_inode(inode);
247247
jffs2_do_clear_inode(c, f);
248248
}

fs/jfs/inode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ void jfs_evict_inode(struct inode *inode)
154154
dquot_initialize(inode);
155155

156156
if (JFS_IP(inode)->fileset == FILESYSTEM_I) {
157-
truncate_inode_pages(&inode->i_data, 0);
157+
truncate_inode_pages_final(&inode->i_data);
158158

159159
if (test_cflag(COMMIT_Freewmap, inode))
160160
jfs_free_zero_link(inode);
@@ -168,7 +168,7 @@ void jfs_evict_inode(struct inode *inode)
168168
dquot_free_inode(inode);
169169
}
170170
} else {
171-
truncate_inode_pages(&inode->i_data, 0);
171+
truncate_inode_pages_final(&inode->i_data);
172172
}
173173
clear_inode(inode);
174174
dquot_drop(inode);

fs/kernfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -355,7 +355,7 @@ void kernfs_evict_inode(struct inode *inode)
355355
{
356356
struct kernfs_node *kn = inode->i_private;
357357

358-
truncate_inode_pages(&inode->i_data, 0);
358+
truncate_inode_pages_final(&inode->i_data);
359359
clear_inode(inode);
360360
kernfs_put(kn);
361361
}

fs/logfs/readwrite.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2180,7 +2180,7 @@ void logfs_evict_inode(struct inode *inode)
21802180
do_delete_inode(inode);
21812181
}
21822182
}
2183-
truncate_inode_pages(&inode->i_data, 0);
2183+
truncate_inode_pages_final(&inode->i_data);
21842184
clear_inode(inode);
21852185

21862186
/* Cheaper version of write_inode. All changes are concealed in

fs/minix/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static int minix_remount (struct super_block * sb, int * flags, char * data);
2626

2727
static void minix_evict_inode(struct inode *inode)
2828
{
29-
truncate_inode_pages(&inode->i_data, 0);
29+
truncate_inode_pages_final(&inode->i_data);
3030
if (!inode->i_nlink) {
3131
inode->i_size = 0;
3232
minix_truncate(inode);

fs/ncpfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ ncp_iget(struct super_block *sb, struct ncp_entry_info *info)
296296
static void
297297
ncp_evict_inode(struct inode *inode)
298298
{
299-
truncate_inode_pages(&inode->i_data, 0);
299+
truncate_inode_pages_final(&inode->i_data);
300300
clear_inode(inode);
301301

302302
if (S_ISDIR(inode->i_mode)) {

fs/nfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ EXPORT_SYMBOL_GPL(nfs_clear_inode);
128128

129129
void nfs_evict_inode(struct inode *inode)
130130
{
131-
truncate_inode_pages(&inode->i_data, 0);
131+
truncate_inode_pages_final(&inode->i_data);
132132
clear_inode(inode);
133133
nfs_clear_inode(inode);
134134
}

fs/nfs/nfs4super.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static int nfs4_write_inode(struct inode *inode, struct writeback_control *wbc)
9090
*/
9191
static void nfs4_evict_inode(struct inode *inode)
9292
{
93-
truncate_inode_pages(&inode->i_data, 0);
93+
truncate_inode_pages_final(&inode->i_data);
9494
clear_inode(inode);
9595
pnfs_return_layout(inode);
9696
pnfs_destroy_layout(NFS_I(inode));

fs/nilfs2/inode.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -783,16 +783,14 @@ void nilfs_evict_inode(struct inode *inode)
783783
int ret;
784784

785785
if (inode->i_nlink || !ii->i_root || unlikely(is_bad_inode(inode))) {
786-
if (inode->i_data.nrpages)
787-
truncate_inode_pages(&inode->i_data, 0);
786+
truncate_inode_pages_final(&inode->i_data);
788787
clear_inode(inode);
789788
nilfs_clear_inode(inode);
790789
return;
791790
}
792791
nilfs_transaction_begin(sb, &ti, 0); /* never fails */
793792

794-
if (inode->i_data.nrpages)
795-
truncate_inode_pages(&inode->i_data, 0);
793+
truncate_inode_pages_final(&inode->i_data);
796794

797795
/* TODO: some of the following operations may fail. */
798796
nilfs_truncate_bmap(ii, 0);

fs/ntfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2259,7 +2259,7 @@ void ntfs_evict_big_inode(struct inode *vi)
22592259
{
22602260
ntfs_inode *ni = NTFS_I(vi);
22612261

2262-
truncate_inode_pages(&vi->i_data, 0);
2262+
truncate_inode_pages_final(&vi->i_data);
22632263
clear_inode(vi);
22642264

22652265
#ifdef NTFS_RW

fs/ocfs2/inode.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -964,7 +964,7 @@ static void ocfs2_cleanup_delete_inode(struct inode *inode,
964964
(unsigned long long)OCFS2_I(inode)->ip_blkno, sync_data);
965965
if (sync_data)
966966
filemap_write_and_wait(inode->i_mapping);
967-
truncate_inode_pages(&inode->i_data, 0);
967+
truncate_inode_pages_final(&inode->i_data);
968968
}
969969

970970
static void ocfs2_delete_inode(struct inode *inode)
@@ -1181,7 +1181,7 @@ void ocfs2_evict_inode(struct inode *inode)
11811181
(OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
11821182
ocfs2_delete_inode(inode);
11831183
} else {
1184-
truncate_inode_pages(&inode->i_data, 0);
1184+
truncate_inode_pages_final(&inode->i_data);
11851185
}
11861186
ocfs2_clear_inode(inode);
11871187
}

fs/omfs/inode.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ int omfs_sync_inode(struct inode *inode)
183183
*/
184184
static void omfs_evict_inode(struct inode *inode)
185185
{
186-
truncate_inode_pages(&inode->i_data, 0);
186+
truncate_inode_pages_final(&inode->i_data);
187187
clear_inode(inode);
188188

189189
if (inode->i_nlink)

0 commit comments

Comments
 (0)