Re: [PATCH] Fix get_unmapped_area and fsync for hugetlb shm segments

From: Eric W. Biederman
Date: Wed Mar 07 2007 - 18:04:06 EST


Bill Irwin <bill.irwin@xxxxxxxxxx> writes:

> On Thu, Mar 01, 2007 at 03:46:08PM -0800, Adam Litke wrote:
>> static inline int is_file_hugepages(struct file *file)
>> {
>> - return file->f_op == &hugetlbfs_file_operations;
>> + if (file->f_op == &hugetlbfs_file_operations)
>> + return 1;
>> + if (is_file_shm_hugepages(file))
>> + return 1;
>> +
>> + return 0;
>> }
> ...
>> +int is_file_shm_hugepages(struct file *file)
>> +{
>> + int ret = 0;
>> +
>> + if (file->f_op == &shm_file_operations) {
>> + struct shm_file_data *sfd;
>> + sfd = shm_file_data(file);
>> + ret = is_file_hugepages(sfd->file);
>> + }
>> + return ret;
>
> A comment to prepare others for the impending doubletake might be nice.
> Or maybe just open-coding the equality check for &huetlbfs_file_operations
> in is_file_shm_hugepages() if others find it as jarring as I. Please
> extend my ack to any follow-up fiddling with that.

You did notice we are testing a different struct file?

> The patch addresses relatively straightforward issues and naturally at
> that.

The whole concept is recursive so I'm not certain being a recursive check
is that bad but I understand the point.

I think the right answer is most likely to add an extra file method or
two so we can remove the need for is_file_hugepages.

There are still 4 calls to is_file_hugepages in ipc/shm.c and
2 calls in mm/mmap.c not counting the one in is_file_shm_hugepages.

The special cases make it difficult to properly wrap hugetlbfs files
with another file, which is why we have the weird special case above.

Eric
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/