Badari Pulavarty <[email protected]> wrote:
>
> +int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end)
> +{
> + struct address_space *mapping = inode->i_mapping;
> +
> + /*
> + * If the underlying filesystem is not going to provide
> + * a way to truncate a range of blocks (punch a hole) -
> + * we should return failure right now.
> + */
> + if (!inode->i_op || !inode->i_op->truncate_range)
> + return -ENOSYS;
> +
> + /* XXX - Do we need both i_sem and i_allocsem all the way ? */
> + down(&inode->i_sem);
> + down_write(&inode->i_alloc_sem);
> + unmap_mapping_range(mapping, offset, (end - offset), 1);
> + truncate_inode_pages_range(mapping, offset, end);
> + inode->i_op->truncate_range(inode, offset, end);
> + up_write(&inode->i_alloc_sem);
> + up(&inode->i_sem);
> +
> + return 0;
> +}
Yes, we need to take i_alloc_sem for writing. To prevent concurrent
direct-io reads from coming in and instantiated by unwritten blocks.
tmpfs doesn't implements direct-io though.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]