diff options
| author | Chris Mason <chris.mason@fusionio.com> | 2013-11-15 06:14:55 -0500 |
|---|---|---|
| committer | Chris Mason <chris.mason@fusionio.com> | 2013-11-15 09:17:47 -0500 |
| commit | 46e0f66a0cf9e1fe25bfdcf4a60c08aface85998 (patch) | |
| tree | 9b454277530b50f41ac5fbbf5f6d0f64ec2ebc99 | |
| parent | 91aef86f3b8ab0685d930a5468254384513d1c97 (diff) | |
btrfs: fix empty_zero_page misusage
Heiko Carstens noticed that btrfs was using empty_zero_page
incorrectly. He explained:
The definition of empty_zero_page is architecture specific. It
is (currently) either a character array, an unsigned long
containing the address of the empty_zero_page, or even worse
only the address of the struct page belonging to the
empty_zero_page.
This commit changes btrfs to use a for-loop instead. On x86
the resulting .ko is smaller, and we're no longer worrying about
how each arch builds its zeros.
Reported-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
| -rw-r--r-- | fs/btrfs/ioctl.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 1d04b5559e61..64a0876c7872 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
| @@ -368,8 +368,13 @@ static noinline int btrfs_ioctl_fitrim(struct file *file, void __user *arg) | |||
| 368 | 368 | ||
| 369 | int btrfs_is_empty_uuid(u8 *uuid) | 369 | int btrfs_is_empty_uuid(u8 *uuid) |
| 370 | { | 370 | { |
| 371 | BUILD_BUG_ON(BTRFS_UUID_SIZE > PAGE_SIZE); | 371 | int i; |
| 372 | return !memcmp(uuid, empty_zero_page, BTRFS_UUID_SIZE); | 372 | |
| 373 | for (i = 0; i < BTRFS_UUID_SIZE; i++) { | ||
| 374 | if (uuid[i]) | ||
| 375 | return 0; | ||
| 376 | } | ||
| 377 | return 1; | ||
| 373 | } | 378 | } |
| 374 | 379 | ||
| 375 | static noinline int create_subvol(struct inode *dir, | 380 | static noinline int create_subvol(struct inode *dir, |
