diff options
author | Christoph Hellwig <hch@lst.de> | 2008-10-16 01:02:05 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:21:33 -0400 |
commit | f7a5000f7a8924e9c5fad1801616601d6dc65a17 (patch) | |
tree | 82bd7f554378b26fe23707a3755359787b252574 /arch/s390 | |
parent | f7ad160b49c49dc9cd383b9184c6fa4a9b4f7ebb (diff) |
compat: move cp_compat_stat to common code
struct stat / compat_stat is the same on all architectures, so
cp_compat_stat should be, too.
Turns out it is, except that various architectures have slightly and some
high2lowuid/high2lowgid or the direct assignment instead of the
SET_UID/SET_GID that expands to the correct one anyway.
This patch replaces the arch-specific cp_compat_stat implementations with
a common one based on the x86-64 one.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: David S. Miller <davem@davemloft.net> [ sparc bits ]
Acked-by: Kyle McMartin <kyle@mcmartin.ca> [ parisc bits ]
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/kernel/compat_linux.c | 35 |
1 files changed, 0 insertions, 35 deletions
diff --git a/arch/s390/kernel/compat_linux.c b/arch/s390/kernel/compat_linux.c index 98e246dc0233..9b471d785ec1 100644 --- a/arch/s390/kernel/compat_linux.c +++ b/arch/s390/kernel/compat_linux.c | |||
@@ -362,41 +362,6 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned | |||
362 | return sys_ftruncate(fd, (high << 32) | low); | 362 | return sys_ftruncate(fd, (high << 32) | low); |
363 | } | 363 | } |
364 | 364 | ||
365 | int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf) | ||
366 | { | ||
367 | compat_ino_t ino; | ||
368 | int err; | ||
369 | |||
370 | if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev)) | ||
371 | return -EOVERFLOW; | ||
372 | |||
373 | ino = stat->ino; | ||
374 | if (sizeof(ino) < sizeof(stat->ino) && ino != stat->ino) | ||
375 | return -EOVERFLOW; | ||
376 | |||
377 | err = put_user(old_encode_dev(stat->dev), &statbuf->st_dev); | ||
378 | err |= put_user(stat->ino, &statbuf->st_ino); | ||
379 | err |= put_user(stat->mode, &statbuf->st_mode); | ||
380 | err |= put_user(stat->nlink, &statbuf->st_nlink); | ||
381 | err |= put_user(high2lowuid(stat->uid), &statbuf->st_uid); | ||
382 | err |= put_user(high2lowgid(stat->gid), &statbuf->st_gid); | ||
383 | err |= put_user(old_encode_dev(stat->rdev), &statbuf->st_rdev); | ||
384 | err |= put_user(stat->size, &statbuf->st_size); | ||
385 | err |= put_user(stat->atime.tv_sec, &statbuf->st_atime); | ||
386 | err |= put_user(stat->atime.tv_nsec, &statbuf->st_atime_nsec); | ||
387 | err |= put_user(stat->mtime.tv_sec, &statbuf->st_mtime); | ||
388 | err |= put_user(stat->mtime.tv_nsec, &statbuf->st_mtime_nsec); | ||
389 | err |= put_user(stat->ctime.tv_sec, &statbuf->st_ctime); | ||
390 | err |= put_user(stat->ctime.tv_nsec, &statbuf->st_ctime_nsec); | ||
391 | err |= put_user(stat->blksize, &statbuf->st_blksize); | ||
392 | err |= put_user(stat->blocks, &statbuf->st_blocks); | ||
393 | /* fixme | ||
394 | err |= put_user(0, &statbuf->__unused4[0]); | ||
395 | err |= put_user(0, &statbuf->__unused4[1]); | ||
396 | */ | ||
397 | return err; | ||
398 | } | ||
399 | |||
400 | asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid, | 365 | asmlinkage long sys32_sched_rr_get_interval(compat_pid_t pid, |
401 | struct compat_timespec __user *interval) | 366 | struct compat_timespec __user *interval) |
402 | { | 367 | { |