file.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/fs/ufs/file.c
  3.  *
  4.  * Copyright (C) 1998
  5.  * Daniel Pirkl <daniel.pirkl@email.cz>
  6.  * Charles University, Faculty of Mathematics and Physics
  7.  *
  8.  *  from
  9.  *
  10.  *  linux/fs/ext2/file.c
  11.  *
  12.  * Copyright (C) 1992, 1993, 1994, 1995
  13.  * Remy Card (card@masi.ibp.fr)
  14.  * Laboratoire MASI - Institut Blaise Pascal
  15.  * Universite Pierre et Marie Curie (Paris VI)
  16.  *
  17.  *  from
  18.  *
  19.  *  linux/fs/minix/file.c
  20.  *
  21.  *  Copyright (C) 1991, 1992  Linus Torvalds
  22.  *
  23.  *  ext2 fs regular file handling primitives
  24.  */
  25. #include <asm/uaccess.h>
  26. #include <asm/system.h>
  27. #include <linux/errno.h>
  28. #include <linux/fs.h>
  29. #include <linux/ufs_fs.h>
  30. #include <linux/fcntl.h>
  31. #include <linux/sched.h>
  32. #include <linux/stat.h>
  33. #include <linux/locks.h>
  34. #include <linux/mm.h>
  35. #include <linux/pagemap.h>
  36. /*
  37.  * Make sure the offset never goes beyond the 32-bit mark..
  38.  */
  39. static long long ufs_file_lseek(
  40. struct file *file,
  41. long long offset,
  42. int origin )
  43. {
  44. long long retval;
  45. struct inode *inode = file->f_dentry->d_inode;
  46. switch (origin) {
  47. case 2:
  48. offset += inode->i_size;
  49. break;
  50. case 1:
  51. offset += file->f_pos;
  52. }
  53. retval = -EINVAL;
  54. /* make sure the offset fits in 32 bits */
  55. if (((unsigned long long) offset >> 32) == 0) {
  56. if (offset != file->f_pos) {
  57. file->f_pos = offset;
  58. file->f_reada = 0;
  59. file->f_version = ++event;
  60. }
  61. retval = offset;
  62. }
  63. return retval;
  64. }
  65. /*
  66.  * We have mostly NULL's here: the current defaults are ok for
  67.  * the ufs filesystem.
  68.  */
  69.  
  70. struct file_operations ufs_file_operations = {
  71. llseek: ufs_file_lseek,
  72. read: generic_file_read,
  73. write: generic_file_write,
  74. mmap: generic_file_mmap,
  75. open:           generic_file_open,
  76. };
  77. struct inode_operations ufs_file_inode_operations = {
  78. truncate: ufs_truncate,
  79. };