|
@@ -515,7 +515,12 @@ static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
|
|
size = SHMEM_NR_DIRECT;
|
|
size = SHMEM_NR_DIRECT;
|
|
nr_swaps_freed = shmem_free_swp(ptr+idx, ptr+size);
|
|
nr_swaps_freed = shmem_free_swp(ptr+idx, ptr+size);
|
|
}
|
|
}
|
|
- if (!topdir)
|
|
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * If there are no indirect blocks or we are punching a hole
|
|
|
|
+ * below indirect blocks, nothing to be done.
|
|
|
|
+ */
|
|
|
|
+ if (!topdir || (punch_hole && (limit <= SHMEM_NR_DIRECT)))
|
|
goto done2;
|
|
goto done2;
|
|
|
|
|
|
BUG_ON(limit <= SHMEM_NR_DIRECT);
|
|
BUG_ON(limit <= SHMEM_NR_DIRECT);
|