Error Trace
[Home]
Bug # 144
Show/hide error trace Error trace
{ 20 typedef unsigned char __u8; 23 typedef unsigned short __u16; 25 typedef int __s32; 26 typedef unsigned int __u32; 30 typedef unsigned long long __u64; 15 typedef signed char s8; 16 typedef unsigned char u8; 19 typedef unsigned short u16; 21 typedef int s32; 22 typedef unsigned int u32; 24 typedef long long s64; 25 typedef unsigned long long u64; 14 typedef long __kernel_long_t; 15 typedef unsigned long __kernel_ulong_t; 27 typedef int __kernel_pid_t; 44 typedef int __kernel_daddr_t; 48 typedef unsigned int __kernel_uid32_t; 49 typedef unsigned int __kernel_gid32_t; 71 typedef __kernel_ulong_t __kernel_size_t; 72 typedef __kernel_long_t __kernel_ssize_t; 87 typedef long long __kernel_loff_t; 88 typedef __kernel_long_t __kernel_time_t; 89 typedef __kernel_long_t __kernel_clock_t; 90 typedef int __kernel_timer_t; 91 typedef int __kernel_clockid_t; 32 typedef __u16 __le16; 33 typedef __u16 __be16; 34 typedef __u32 __le32; 35 typedef __u32 __be32; 36 typedef __u64 __le64; 259 struct kernel_symbol { unsigned long value; const char *name; } ; 33 struct module ; 12 typedef __u32 __kernel_dev_t; 15 typedef __kernel_dev_t dev_t; 18 typedef unsigned short umode_t; 21 typedef __kernel_pid_t pid_t; 26 typedef __kernel_clockid_t clockid_t; 29 typedef _Bool bool; 31 typedef __kernel_uid32_t uid_t; 32 typedef __kernel_gid32_t gid_t; 45 typedef __kernel_loff_t loff_t; 54 typedef __kernel_size_t size_t; 59 typedef __kernel_ssize_t ssize_t; 69 typedef __kernel_time_t time_t; 102 typedef __s32 int32_t; 108 typedef __u32 uint32_t; 133 typedef unsigned long sector_t; 134 typedef unsigned long blkcnt_t; 152 typedef u64 dma_addr_t; 157 typedef unsigned int gfp_t; 158 typedef unsigned int fmode_t; 161 typedef u64 phys_addr_t; 166 typedef phys_addr_t resource_size_t; 176 struct __anonstruct_atomic_t_6 { int counter; } ; 176 typedef struct __anonstruct_atomic_t_6 atomic_t; 181 struct __anonstruct_atomic64_t_7 { long counter; } ; 181 typedef struct __anonstruct_atomic64_t_7 atomic64_t; 182 struct list_head { struct list_head *next; struct list_head *prev; } ; 187 struct hlist_node ; 187 struct hlist_head { struct hlist_node *first; } ; 191 struct hlist_node { struct hlist_node *next; struct hlist_node **pprev; } ; 202 struct callback_head { struct callback_head *next; void (*func)(struct callback_head *); } ; 131 typedef void (*ctor_fn_t)(); 48 struct device ; 432 struct file_operations ; 444 struct completion ; 445 struct pt_regs ; 555 struct bug_entry { int bug_addr_disp; int file_disp; unsigned short line; unsigned short flags; } ; 111 struct timespec ; 112 struct compat_timespec ; 113 struct __anonstruct_futex_25 { u32 *uaddr; u32 val; u32 flags; u32 bitset; u64 time; u32 *uaddr2; } ; 113 struct __anonstruct_nanosleep_26 { clockid_t clockid; struct timespec *rmtp; struct compat_timespec *compat_rmtp; u64 expires; } ; 113 struct pollfd ; 113 struct __anonstruct_poll_27 { struct pollfd *ufds; int nfds; int has_timeout; unsigned long tv_sec; unsigned long tv_nsec; } ; 113 union __anonunion____missing_field_name_24 { struct __anonstruct_futex_25 futex; struct __anonstruct_nanosleep_26 nanosleep; struct __anonstruct_poll_27 poll; } ; 113 struct restart_block { long int (*fn)(struct restart_block *); union __anonunion____missing_field_name_24 __annonCompField4; } ; 39 struct page ; 14 struct __anonstruct_pfn_t_28 { u64 val; } ; 14 typedef struct __anonstruct_pfn_t_28 pfn_t; 26 struct task_struct ; 27 struct mm_struct ; 288 struct pt_regs { unsigned long r15; unsigned long r14; unsigned long r13; unsigned long r12; unsigned long bp; unsigned long bx; unsigned long r11; unsigned long r10; unsigned long r9; unsigned long r8; unsigned long ax; unsigned long cx; unsigned long dx; unsigned long si; unsigned long di; unsigned long orig_ax; unsigned long ip; unsigned long cs; unsigned long flags; unsigned long sp; unsigned long ss; } ; 66 struct __anonstruct____missing_field_name_30 { unsigned int a; unsigned int b; } ; 66 struct __anonstruct____missing_field_name_31 { u16 limit0; u16 base0; unsigned char base1; unsigned char type; unsigned char s; unsigned char dpl; unsigned char p; unsigned char limit; unsigned char avl; unsigned char l; unsigned char d; unsigned char g; unsigned char base2; } ; 66 union __anonunion____missing_field_name_29 { struct __anonstruct____missing_field_name_30 __annonCompField5; struct __anonstruct____missing_field_name_31 __annonCompField6; } ; 66 struct desc_struct { union __anonunion____missing_field_name_29 __annonCompField7; } ; 12 typedef unsigned long pteval_t; 13 typedef unsigned long pmdval_t; 15 typedef unsigned long pgdval_t; 16 typedef unsigned long pgprotval_t; 18 struct __anonstruct_pte_t_32 { pteval_t pte; } ; 18 typedef struct __anonstruct_pte_t_32 pte_t; 20 struct pgprot { pgprotval_t pgprot; } ; 250 typedef struct pgprot pgprot_t; 252 struct __anonstruct_pgd_t_33 { pgdval_t pgd; } ; 252 typedef struct __anonstruct_pgd_t_33 pgd_t; 291 struct __anonstruct_pmd_t_35 { pmdval_t pmd; } ; 291 typedef struct __anonstruct_pmd_t_35 pmd_t; 417 typedef struct page *pgtable_t; 428 struct file ; 441 struct seq_file ; 479 struct thread_struct ; 481 struct cpumask ; 20 struct qspinlock { atomic_t val; } ; 33 typedef struct qspinlock arch_spinlock_t; 34 struct qrwlock { atomic_t cnts; arch_spinlock_t wait_lock; } ; 14 typedef struct qrwlock arch_rwlock_t; 253 struct math_emu_info { long ___orig_eip; struct pt_regs *regs; } ; 338 struct cpumask { unsigned long bits[128U]; } ; 15 typedef struct cpumask cpumask_t; 654 typedef struct cpumask *cpumask_var_t; 23 typedef atomic64_t atomic_long_t; 82 struct static_key { atomic_t enabled; } ; 22 struct tracepoint_func { void *func; void *data; int prio; } ; 28 struct tracepoint { const char *name; struct static_key key; void (*regfunc)(); void (*unregfunc)(); struct tracepoint_func *funcs; } ; 298 struct fregs_state { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20U]; u32 status; } ; 26 struct __anonstruct____missing_field_name_59 { u64 rip; u64 rdp; } ; 26 struct __anonstruct____missing_field_name_60 { u32 fip; u32 fcs; u32 foo; u32 fos; } ; 26 union __anonunion____missing_field_name_58 { struct __anonstruct____missing_field_name_59 __annonCompField13; struct __anonstruct____missing_field_name_60 __annonCompField14; } ; 26 union __anonunion____missing_field_name_61 { u32 padding1[12U]; u32 sw_reserved[12U]; } ; 26 struct fxregs_state { u16 cwd; u16 swd; u16 twd; u16 fop; union __anonunion____missing_field_name_58 __annonCompField15; u32 mxcsr; u32 mxcsr_mask; u32 st_space[32U]; u32 xmm_space[64U]; u32 padding[12U]; union __anonunion____missing_field_name_61 __annonCompField16; } ; 66 struct swregs_state { u32 cwd; u32 swd; u32 twd; u32 fip; u32 fcs; u32 foo; u32 fos; u32 st_space[20U]; u8 ftop; u8 changed; u8 lookahead; u8 no_update; u8 rm; u8 alimit; struct math_emu_info *info; u32 entry_eip; } ; 226 struct xstate_header { u64 xfeatures; u64 xcomp_bv; u64 reserved[6U]; } ; 232 struct xregs_state { struct fxregs_state i387; struct xstate_header header; u8 extended_state_area[0U]; } ; 247 union fpregs_state { struct fregs_state fsave; struct fxregs_state fxsave; struct swregs_state soft; struct xregs_state xsave; u8 __padding[4096U]; } ; 264 struct fpu { unsigned int last_cpu; unsigned char fpstate_active; unsigned char fpregs_active; unsigned char counter; union fpregs_state state; } ; 169 struct seq_operations ; 371 struct perf_event ; 372 struct thread_struct { struct desc_struct tls_array[3U]; unsigned long sp0; unsigned long sp; unsigned short es; unsigned short ds; unsigned short fsindex; unsigned short gsindex; unsigned long fsbase; unsigned long gsbase; struct perf_event *ptrace_bps[4U]; unsigned long debugreg6; unsigned long ptrace_dr7; unsigned long cr2; unsigned long trap_nr; unsigned long error_code; unsigned long *io_bitmap_ptr; unsigned long iopl; unsigned int io_bitmap_max; struct fpu fpu; } ; 33 struct lockdep_map ; 55 struct stack_trace { unsigned int nr_entries; unsigned int max_entries; unsigned long *entries; int skip; } ; 28 struct lockdep_subclass_key { char __one_byte; } ; 53 struct lock_class_key { struct lockdep_subclass_key subkeys[8U]; } ; 59 struct lock_class { struct hlist_node hash_entry; struct list_head lock_entry; struct lockdep_subclass_key *key; unsigned int subclass; unsigned int dep_gen_id; unsigned long usage_mask; struct stack_trace usage_traces[13U]; struct list_head locks_after; struct list_head locks_before; unsigned int version; unsigned long ops; const char *name; int name_version; unsigned long contention_point[4U]; unsigned long contending_point[4U]; } ; 144 struct lockdep_map { struct lock_class_key *key; struct lock_class *class_cache[2U]; const char *name; int cpu; unsigned long ip; } ; 207 struct held_lock { u64 prev_chain_key; unsigned long acquire_ip; struct lockdep_map *instance; struct lockdep_map *nest_lock; u64 waittime_stamp; u64 holdtime_stamp; unsigned short class_idx; unsigned char irq_context; unsigned char trylock; unsigned char read; unsigned char check; unsigned char hardirqs_off; unsigned short references; unsigned int pin_count; } ; 572 struct raw_spinlock { arch_spinlock_t raw_lock; unsigned int magic; unsigned int owner_cpu; void *owner; struct lockdep_map dep_map; } ; 32 typedef struct raw_spinlock raw_spinlock_t; 33 struct __anonstruct____missing_field_name_75 { u8 __padding[24U]; struct lockdep_map dep_map; } ; 33 union __anonunion____missing_field_name_74 { struct raw_spinlock rlock; struct __anonstruct____missing_field_name_75 __annonCompField19; } ; 33 struct spinlock { union __anonunion____missing_field_name_74 __annonCompField20; } ; 76 typedef struct spinlock spinlock_t; 23 struct __anonstruct_rwlock_t_76 { arch_rwlock_t raw_lock; unsigned int magic; unsigned int owner_cpu; void *owner; struct lockdep_map dep_map; } ; 23 typedef struct __anonstruct_rwlock_t_76 rwlock_t; 416 struct seqcount { unsigned int sequence; struct lockdep_map dep_map; } ; 52 typedef struct seqcount seqcount_t; 404 struct __anonstruct_seqlock_t_89 { struct seqcount seqcount; spinlock_t lock; } ; 404 typedef struct __anonstruct_seqlock_t_89 seqlock_t; 598 struct timespec { __kernel_time_t tv_sec; long tv_nsec; } ; 83 struct user_namespace ; 22 struct __anonstruct_kuid_t_90 { uid_t val; } ; 22 typedef struct __anonstruct_kuid_t_90 kuid_t; 27 struct __anonstruct_kgid_t_91 { gid_t val; } ; 27 typedef struct __anonstruct_kgid_t_91 kgid_t; 139 struct kstat { u64 ino; dev_t dev; umode_t mode; unsigned int nlink; kuid_t uid; kgid_t gid; dev_t rdev; loff_t size; struct timespec atime; struct timespec mtime; struct timespec ctime; unsigned long blksize; unsigned long long blocks; } ; 36 struct vm_area_struct ; 38 struct __wait_queue_head { spinlock_t lock; struct list_head task_list; } ; 43 typedef struct __wait_queue_head wait_queue_head_t; 97 struct __anonstruct_nodemask_t_92 { unsigned long bits[16U]; } ; 97 typedef struct __anonstruct_nodemask_t_92 nodemask_t; 13 struct optimistic_spin_queue { atomic_t tail; } ; 39 struct mutex { atomic_t count; spinlock_t wait_lock; struct list_head wait_list; struct task_struct *owner; void *magic; struct lockdep_map dep_map; } ; 67 struct mutex_waiter { struct list_head list; struct task_struct *task; void *magic; } ; 177 struct rw_semaphore ; 178 struct rw_semaphore { long count; struct list_head wait_list; raw_spinlock_t wait_lock; struct optimistic_spin_queue osq; struct task_struct *owner; struct lockdep_map dep_map; } ; 176 struct completion { unsigned int done; wait_queue_head_t wait; } ; 446 union ktime { s64 tv64; } ; 41 typedef union ktime ktime_t; 1129 struct timer_list { struct hlist_node entry; unsigned long expires; void (*function)(unsigned long); unsigned long data; u32 flags; int slack; int start_pid; void *start_site; char start_comm[16U]; struct lockdep_map lockdep_map; } ; 240 struct hrtimer ; 241 enum hrtimer_restart ; 242 struct rb_node { unsigned long __rb_parent_color; struct rb_node *rb_right; struct rb_node *rb_left; } ; 41 struct rb_root { struct rb_node *rb_node; } ; 838 struct nsproxy ; 261 struct workqueue_struct ; 262 struct work_struct ; 54 struct work_struct { atomic_long_t data; struct list_head entry; void (*func)(struct work_struct *); struct lockdep_map lockdep_map; } ; 107 struct delayed_work { struct work_struct work; struct timer_list timer; struct workqueue_struct *wq; int cpu; } ; 217 struct resource ; 64 struct resource { resource_size_t start; resource_size_t end; const char *name; unsigned long flags; unsigned long desc; struct resource *parent; struct resource *sibling; struct resource *child; } ; 217 struct pci_dev ; 58 struct pm_message { int event; } ; 64 typedef struct pm_message pm_message_t; 65 struct dev_pm_ops { int (*prepare)(struct device *); void (*complete)(struct device *); int (*suspend)(struct device *); int (*resume)(struct device *); int (*freeze)(struct device *); int (*thaw)(struct device *); int (*poweroff)(struct device *); int (*restore)(struct device *); int (*suspend_late)(struct device *); int (*resume_early)(struct device *); int (*freeze_late)(struct device *); int (*thaw_early)(struct device *); int (*poweroff_late)(struct device *); int (*restore_early)(struct device *); int (*suspend_noirq)(struct device *); int (*resume_noirq)(struct device *); int (*freeze_noirq)(struct device *); int (*thaw_noirq)(struct device *); int (*poweroff_noirq)(struct device *); int (*restore_noirq)(struct device *); int (*runtime_suspend)(struct device *); int (*runtime_resume)(struct device *); int (*runtime_idle)(struct device *); } ; 320 enum rpm_status { RPM_ACTIVE = 0, RPM_RESUMING = 1, RPM_SUSPENDED = 2, RPM_SUSPENDING = 3 } ; 327 enum rpm_request { RPM_REQ_NONE = 0, RPM_REQ_IDLE = 1, RPM_REQ_SUSPEND = 2, RPM_REQ_AUTOSUSPEND = 3, RPM_REQ_RESUME = 4 } ; 335 struct wakeup_source ; 336 struct wake_irq ; 337 struct pm_domain_data ; 338 struct pm_subsys_data { spinlock_t lock; unsigned int refcount; struct list_head clock_list; struct pm_domain_data *domain_data; } ; 556 struct dev_pm_qos ; 556 struct dev_pm_info { pm_message_t power_state; unsigned char can_wakeup; unsigned char async_suspend; bool is_prepared; bool is_suspended; bool is_noirq_suspended; bool is_late_suspended; bool early_init; bool direct_complete; spinlock_t lock; struct list_head entry; struct completion completion; struct wakeup_source *wakeup; bool wakeup_path; bool syscore; bool no_pm_callbacks; struct timer_list suspend_timer; unsigned long timer_expires; struct work_struct work; wait_queue_head_t wait_queue; struct wake_irq *wakeirq; atomic_t usage_count; atomic_t child_count; unsigned char disable_depth; unsigned char idle_notification; unsigned char request_pending; unsigned char deferred_resume; unsigned char run_wake; unsigned char runtime_auto; bool ignore_children; unsigned char no_callbacks; unsigned char irq_safe; unsigned char use_autosuspend; unsigned char timer_autosuspends; unsigned char memalloc_noio; enum rpm_request request; enum rpm_status runtime_status; int runtime_error; int autosuspend_delay; unsigned long last_busy; unsigned long active_jiffies; unsigned long suspended_jiffies; unsigned long accounting_timestamp; struct pm_subsys_data *subsys_data; void (*set_latency_tolerance)(struct device *, s32 ); struct dev_pm_qos *qos; } ; 616 struct dev_pm_domain { struct dev_pm_ops ops; void (*detach)(struct device *, bool ); int (*activate)(struct device *); void (*sync)(struct device *); void (*dismiss)(struct device *); } ; 144 struct pci_bus ; 26 struct ldt_struct ; 26 struct vdso_image ; 26 struct __anonstruct_mm_context_t_161 { struct ldt_struct *ldt; unsigned short ia32_compat; struct mutex lock; void *vdso; const struct vdso_image *vdso_image; atomic_t perf_rdpmc_allowed; } ; 26 typedef struct __anonstruct_mm_context_t_161 mm_context_t; 22 struct bio_vec ; 1238 struct llist_node ; 64 struct llist_node { struct llist_node *next; } ; 17 struct call_single_data { struct llist_node llist; void (*func)(void *); void *info; unsigned int flags; } ; 37 struct cred ; 19 struct inode ; 58 struct arch_uprobe_task { unsigned long saved_scratch_register; unsigned int saved_trap_nr; unsigned int saved_tf; } ; 66 enum uprobe_task_state { UTASK_RUNNING = 0, UTASK_SSTEP = 1, UTASK_SSTEP_ACK = 2, UTASK_SSTEP_TRAPPED = 3 } ; 73 struct __anonstruct____missing_field_name_197 { struct arch_uprobe_task autask; unsigned long vaddr; } ; 73 struct __anonstruct____missing_field_name_198 { struct callback_head dup_xol_work; unsigned long dup_xol_addr; } ; 73 union __anonunion____missing_field_name_196 { struct __anonstruct____missing_field_name_197 __annonCompField35; struct __anonstruct____missing_field_name_198 __annonCompField36; } ; 73 struct uprobe ; 73 struct return_instance ; 73 struct uprobe_task { enum uprobe_task_state state; union __anonunion____missing_field_name_196 __annonCompField37; struct uprobe *active_uprobe; unsigned long xol_vaddr; struct return_instance *return_instances; unsigned int depth; } ; 94 struct return_instance { struct uprobe *uprobe; unsigned long func; unsigned long stack; unsigned long orig_ret_vaddr; bool chained; struct return_instance *next; } ; 110 struct xol_area ; 111 struct uprobes_state { struct xol_area *xol_area; } ; 150 struct address_space ; 151 struct mem_cgroup ; 152 union __anonunion____missing_field_name_199 { struct address_space *mapping; void *s_mem; atomic_t compound_mapcount; } ; 152 union __anonunion____missing_field_name_201 { unsigned long index; void *freelist; } ; 152 struct __anonstruct____missing_field_name_205 { unsigned short inuse; unsigned short objects; unsigned char frozen; } ; 152 union __anonunion____missing_field_name_204 { atomic_t _mapcount; struct __anonstruct____missing_field_name_205 __annonCompField40; int units; } ; 152 struct __anonstruct____missing_field_name_203 { union __anonunion____missing_field_name_204 __annonCompField41; atomic_t _refcount; } ; 152 union __anonunion____missing_field_name_202 { unsigned long counters; struct __anonstruct____missing_field_name_203 __annonCompField42; unsigned int active; } ; 152 struct __anonstruct____missing_field_name_200 { union __anonunion____missing_field_name_201 __annonCompField39; union __anonunion____missing_field_name_202 __annonCompField43; } ; 152 struct dev_pagemap ; 152 struct __anonstruct____missing_field_name_207 { struct page *next; int pages; int pobjects; } ; 152 struct __anonstruct____missing_field_name_208 { unsigned long compound_head; unsigned int compound_dtor; unsigned int compound_order; } ; 152 struct __anonstruct____missing_field_name_209 { unsigned long __pad; pgtable_t pmd_huge_pte; } ; 152 union __anonunion____missing_field_name_206 { struct list_head lru; struct dev_pagemap *pgmap; struct __anonstruct____missing_field_name_207 __annonCompField45; struct callback_head callback_head; struct __anonstruct____missing_field_name_208 __annonCompField46; struct __anonstruct____missing_field_name_209 __annonCompField47; } ; 152 struct kmem_cache ; 152 union __anonunion____missing_field_name_210 { unsigned long private; spinlock_t *ptl; struct kmem_cache *slab_cache; } ; 152 struct page { unsigned long flags; union __anonunion____missing_field_name_199 __annonCompField38; struct __anonstruct____missing_field_name_200 __annonCompField44; union __anonunion____missing_field_name_206 __annonCompField48; union __anonunion____missing_field_name_210 __annonCompField49; struct mem_cgroup *mem_cgroup; } ; 196 struct page_frag { struct page *page; __u32 offset; __u32 size; } ; 281 struct userfaultfd_ctx ; 281 struct vm_userfaultfd_ctx { struct userfaultfd_ctx *ctx; } ; 288 struct __anonstruct_shared_211 { struct rb_node rb; unsigned long rb_subtree_last; } ; 288 struct anon_vma ; 288 struct vm_operations_struct ; 288 struct mempolicy ; 288 struct vm_area_struct { unsigned long vm_start; unsigned long vm_end; struct vm_area_struct *vm_next; struct vm_area_struct *vm_prev; struct rb_node vm_rb; unsigned long rb_subtree_gap; struct mm_struct *vm_mm; pgprot_t vm_page_prot; unsigned long vm_flags; struct __anonstruct_shared_211 shared; struct list_head anon_vma_chain; struct anon_vma *anon_vma; const struct vm_operations_struct *vm_ops; unsigned long vm_pgoff; struct file *vm_file; void *vm_private_data; struct mempolicy *vm_policy; struct vm_userfaultfd_ctx vm_userfaultfd_ctx; } ; 361 struct core_thread { struct task_struct *task; struct core_thread *next; } ; 366 struct core_state { atomic_t nr_threads; struct core_thread dumper; struct completion startup; } ; 380 struct task_rss_stat { int events; int count[4U]; } ; 388 struct mm_rss_stat { atomic_long_t count[4U]; } ; 393 struct kioctx_table ; 394 struct linux_binfmt ; 394 struct mmu_notifier_mm ; 394 struct mm_struct { struct vm_area_struct *mmap; struct rb_root mm_rb; u32 vmacache_seqnum; unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); unsigned long mmap_base; unsigned long mmap_legacy_base; unsigned long task_size; unsigned long highest_vm_end; pgd_t *pgd; atomic_t mm_users; atomic_t mm_count; atomic_long_t nr_ptes; atomic_long_t nr_pmds; int map_count; spinlock_t page_table_lock; struct rw_semaphore mmap_sem; struct list_head mmlist; unsigned long hiwater_rss; unsigned long hiwater_vm; unsigned long total_vm; unsigned long locked_vm; unsigned long pinned_vm; unsigned long data_vm; unsigned long exec_vm; unsigned long stack_vm; unsigned long def_flags; unsigned long start_code; unsigned long end_code; unsigned long start_data; unsigned long end_data; unsigned long start_brk; unsigned long brk; unsigned long start_stack; unsigned long arg_start; unsigned long arg_end; unsigned long env_start; unsigned long env_end; unsigned long saved_auxv[46U]; struct mm_rss_stat rss_stat; struct linux_binfmt *binfmt; cpumask_var_t cpu_vm_mask_var; mm_context_t context; unsigned long flags; struct core_state *core_state; spinlock_t ioctx_lock; struct kioctx_table *ioctx_table; struct task_struct *owner; struct file *exe_file; struct mmu_notifier_mm *mmu_notifier_mm; struct cpumask cpumask_allocation; unsigned long numa_next_scan; unsigned long numa_scan_offset; int numa_scan_seq; bool tlb_flush_pending; struct uprobes_state uprobes_state; void *bd_addr; atomic_long_t hugetlb_usage; struct work_struct async_put_work; } ; 564 struct vm_fault ; 615 struct vdso_image { void *data; unsigned long size; unsigned long alt; unsigned long alt_len; long sym_vvar_start; long sym_vvar_page; long sym_hpet_page; long sym_pvclock_page; long sym_VDSO32_NOTE_MASK; long sym___kernel_sigreturn; long sym___kernel_rt_sigreturn; long sym___kernel_vsyscall; long sym_int80_landing_pad; } ; 15 typedef __u64 Elf64_Addr; 16 typedef __u16 Elf64_Half; 18 typedef __u64 Elf64_Off; 20 typedef __u32 Elf64_Word; 21 typedef __u64 Elf64_Xword; 190 struct elf64_sym { Elf64_Word st_name; unsigned char st_info; unsigned char st_other; Elf64_Half st_shndx; Elf64_Addr st_value; Elf64_Xword st_size; } ; 198 typedef struct elf64_sym Elf64_Sym; 219 struct elf64_hdr { unsigned char e_ident[16U]; Elf64_Half e_type; Elf64_Half e_machine; Elf64_Word e_version; Elf64_Addr e_entry; Elf64_Off e_phoff; Elf64_Off e_shoff; Elf64_Word e_flags; Elf64_Half e_ehsize; Elf64_Half e_phentsize; Elf64_Half e_phnum; Elf64_Half e_shentsize; Elf64_Half e_shnum; Elf64_Half e_shstrndx; } ; 235 typedef struct elf64_hdr Elf64_Ehdr; 313 struct elf64_shdr { Elf64_Word sh_name; Elf64_Word sh_type; Elf64_Xword sh_flags; Elf64_Addr sh_addr; Elf64_Off sh_offset; Elf64_Xword sh_size; Elf64_Word sh_link; Elf64_Word sh_info; Elf64_Xword sh_addralign; Elf64_Xword sh_entsize; } ; 325 typedef struct elf64_shdr Elf64_Shdr; 53 union __anonunion____missing_field_name_216 { unsigned long bitmap[4U]; struct callback_head callback_head; } ; 53 struct idr_layer { int prefix; int layer; struct idr_layer *ary[256U]; int count; union __anonunion____missing_field_name_216 __annonCompField50; } ; 41 struct idr { struct idr_layer *hint; struct idr_layer *top; int layers; int cur; spinlock_t lock; int id_free_cnt; struct idr_layer *id_free; } ; 124 struct ida_bitmap { long nr_busy; unsigned long bitmap[15U]; } ; 167 struct ida { struct idr idr; struct ida_bitmap *free_bitmap; } ; 199 struct dentry ; 200 struct iattr ; 201 struct super_block ; 202 struct file_system_type ; 203 struct kernfs_open_node ; 204 struct kernfs_iattrs ; 227 struct kernfs_root ; 227 struct kernfs_elem_dir { unsigned long subdirs; struct rb_root children; struct kernfs_root *root; } ; 85 struct kernfs_node ; 85 struct kernfs_elem_symlink { struct kernfs_node *target_kn; } ; 89 struct kernfs_ops ; 89 struct kernfs_elem_attr { const struct kernfs_ops *ops; struct kernfs_open_node *open; loff_t size; struct kernfs_node *notify_next; } ; 96 union __anonunion____missing_field_name_221 { struct kernfs_elem_dir dir; struct kernfs_elem_symlink symlink; struct kernfs_elem_attr attr; } ; 96 struct kernfs_node { atomic_t count; atomic_t active; struct lockdep_map dep_map; struct kernfs_node *parent; const char *name; struct rb_node rb; const void *ns; unsigned int hash; union __anonunion____missing_field_name_221 __annonCompField51; void *priv; unsigned short flags; umode_t mode; unsigned int ino; struct kernfs_iattrs *iattr; } ; 138 struct kernfs_syscall_ops { int (*remount_fs)(struct kernfs_root *, int *, char *); int (*show_options)(struct seq_file *, struct kernfs_root *); int (*mkdir)(struct kernfs_node *, const char *, umode_t ); int (*rmdir)(struct kernfs_node *); int (*rename)(struct kernfs_node *, struct kernfs_node *, const char *); int (*show_path)(struct seq_file *, struct kernfs_node *, struct kernfs_root *); } ; 157 struct kernfs_root { struct kernfs_node *kn; unsigned int flags; struct ida ino_ida; struct kernfs_syscall_ops *syscall_ops; struct list_head supers; wait_queue_head_t deactivate_waitq; } ; 173 struct kernfs_open_file { struct kernfs_node *kn; struct file *file; void *priv; struct mutex mutex; struct mutex prealloc_mutex; int event; struct list_head list; char *prealloc_buf; size_t atomic_write_len; bool mmapped; const struct vm_operations_struct *vm_ops; } ; 191 struct kernfs_ops { int (*seq_show)(struct seq_file *, void *); void * (*seq_start)(struct seq_file *, loff_t *); void * (*seq_next)(struct seq_file *, void *, loff_t *); void (*seq_stop)(struct seq_file *, void *); ssize_t (*read)(struct kernfs_open_file *, char *, size_t , loff_t ); size_t atomic_write_len; bool prealloc; ssize_t (*write)(struct kernfs_open_file *, char *, size_t , loff_t ); int (*mmap)(struct kernfs_open_file *, struct vm_area_struct *); struct lock_class_key lockdep_key; } ; 499 struct sock ; 500 struct kobject ; 501 enum kobj_ns_type { KOBJ_NS_TYPE_NONE = 0, KOBJ_NS_TYPE_NET = 1, KOBJ_NS_TYPES = 2 } ; 507 struct kobj_ns_type_operations { enum kobj_ns_type type; bool (*current_may_mount)(); void * (*grab_current_ns)(); const void * (*netlink_ns)(struct sock *); const void * (*initial_ns)(); void (*drop_ns)(void *); } ; 59 struct bin_attribute ; 60 struct attribute { const char *name; umode_t mode; bool ignore_lockdep; struct lock_class_key *key; struct lock_class_key skey; } ; 37 struct attribute_group { const char *name; umode_t (*is_visible)(struct kobject *, struct attribute *, int); umode_t (*is_bin_visible)(struct kobject *, struct bin_attribute *, int); struct attribute **attrs; struct bin_attribute **bin_attrs; } ; 92 struct bin_attribute { struct attribute attr; size_t size; void *private; ssize_t (*read)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t ); ssize_t (*write)(struct file *, struct kobject *, struct bin_attribute *, char *, loff_t , size_t ); int (*mmap)(struct file *, struct kobject *, struct bin_attribute *, struct vm_area_struct *); } ; 165 struct sysfs_ops { ssize_t (*show)(struct kobject *, struct attribute *, char *); ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t ); } ; 530 struct kref { atomic_t refcount; } ; 52 struct kset ; 52 struct kobj_type ; 52 struct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *ktype; struct kernfs_node *sd; struct kref kref; struct delayed_work release; unsigned char state_initialized; unsigned char state_in_sysfs; unsigned char state_add_uevent_sent; unsigned char state_remove_uevent_sent; unsigned char uevent_suppress; } ; 115 struct kobj_type { void (*release)(struct kobject *); const struct sysfs_ops *sysfs_ops; struct attribute **default_attrs; const struct kobj_ns_type_operations * (*child_ns_type)(struct kobject *); const void * (*namespace)(struct kobject *); } ; 123 struct kobj_uevent_env { char *argv[3U]; char *envp[32U]; int envp_idx; char buf[2048U]; int buflen; } ; 131 struct kset_uevent_ops { const int (*filter)(struct kset *, struct kobject *); const const char * (*name)(struct kset *, struct kobject *); const int (*uevent)(struct kset *, struct kobject *, struct kobj_uevent_env *); } ; 148 struct kset { struct list_head list; spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops; } ; 223 struct kernel_param ; 228 struct kernel_param_ops { unsigned int flags; int (*set)(const char *, const struct kernel_param *); int (*get)(char *, const struct kernel_param *); void (*free)(void *); } ; 62 struct kparam_string ; 62 struct kparam_array ; 62 union __anonunion____missing_field_name_224 { void *arg; const struct kparam_string *str; const struct kparam_array *arr; } ; 62 struct kernel_param { const char *name; struct module *mod; const struct kernel_param_ops *ops; const u16 perm; s8 level; u8 flags; union __anonunion____missing_field_name_224 __annonCompField52; } ; 83 struct kparam_string { unsigned int maxlen; char *string; } ; 89 struct kparam_array { unsigned int max; unsigned int elemsize; unsigned int *num; const struct kernel_param_ops *ops; void *elem; } ; 470 struct latch_tree_node { struct rb_node node[2U]; } ; 211 struct mod_arch_specific { } ; 38 struct module_param_attrs ; 38 struct module_kobject { struct kobject kobj; struct module *mod; struct kobject *drivers_dir; struct module_param_attrs *mp; struct completion *kobj_completion; } ; 48 struct module_attribute { struct attribute attr; ssize_t (*show)(struct module_attribute *, struct module_kobject *, char *); ssize_t (*store)(struct module_attribute *, struct module_kobject *, const char *, size_t ); void (*setup)(struct module *, const char *); int (*test)(struct module *); void (*free)(struct module *); } ; 74 struct exception_table_entry ; 290 enum module_state { MODULE_STATE_LIVE = 0, MODULE_STATE_COMING = 1, MODULE_STATE_GOING = 2, MODULE_STATE_UNFORMED = 3 } ; 297 struct mod_tree_node { struct module *mod; struct latch_tree_node node; } ; 304 struct module_layout { void *base; unsigned int size; unsigned int text_size; unsigned int ro_size; struct mod_tree_node mtn; } ; 318 struct mod_kallsyms { Elf64_Sym *symtab; unsigned int num_symtab; char *strtab; } ; 332 struct klp_modinfo { Elf64_Ehdr hdr; Elf64_Shdr *sechdrs; char *secstrings; unsigned int symndx; } ; 340 struct module_sect_attrs ; 340 struct module_notes_attrs ; 340 struct trace_event_call ; 340 struct trace_enum_map ; 340 struct module { enum module_state state; struct list_head list; char name[56U]; struct module_kobject mkobj; struct module_attribute *modinfo_attrs; const char *version; const char *srcversion; struct kobject *holders_dir; const struct kernel_symbol *syms; const unsigned long *crcs; unsigned int num_syms; struct mutex param_lock; struct kernel_param *kp; unsigned int num_kp; unsigned int num_gpl_syms; const struct kernel_symbol *gpl_syms; const unsigned long *gpl_crcs; const struct kernel_symbol *unused_syms; const unsigned long *unused_crcs; unsigned int num_unused_syms; unsigned int num_unused_gpl_syms; const struct kernel_symbol *unused_gpl_syms; const unsigned long *unused_gpl_crcs; bool sig_ok; bool async_probe_requested; const struct kernel_symbol *gpl_future_syms; const unsigned long *gpl_future_crcs; unsigned int num_gpl_future_syms; unsigned int num_exentries; struct exception_table_entry *extable; int (*init)(); struct module_layout core_layout; struct module_layout init_layout; struct mod_arch_specific arch; unsigned int taints; unsigned int num_bugs; struct list_head bug_list; struct bug_entry *bug_table; struct mod_kallsyms *kallsyms; struct mod_kallsyms core_kallsyms; struct module_sect_attrs *sect_attrs; struct module_notes_attrs *notes_attrs; char *args; void *percpu; unsigned int percpu_size; unsigned int num_tracepoints; const struct tracepoint **tracepoints_ptrs; unsigned int num_trace_bprintk_fmt; const char **trace_bprintk_fmt_start; struct trace_event_call **trace_events; unsigned int num_trace_events; struct trace_enum_map **trace_enums; unsigned int num_trace_enums; bool klp; bool klp_alive; struct klp_modinfo *klp_info; struct list_head source_list; struct list_head target_list; void (*exit)(); atomic_t refcnt; ctor_fn_t (**ctors)(); unsigned int num_ctors; } ; 54 struct percpu_ref ; 55 typedef void percpu_ref_func_t(struct percpu_ref *); 68 struct percpu_ref { atomic_long_t count; unsigned long percpu_count_ptr; percpu_ref_func_t *release; percpu_ref_func_t *confirm_switch; bool force_atomic; struct callback_head rcu; } ; 93 struct shrink_control { gfp_t gfp_mask; unsigned long nr_to_scan; int nid; struct mem_cgroup *memcg; } ; 27 struct shrinker { unsigned long int (*count_objects)(struct shrinker *, struct shrink_control *); unsigned long int (*scan_objects)(struct shrinker *, struct shrink_control *); int seeks; long batch; unsigned long flags; struct list_head list; atomic_long_t *nr_deferred; } ; 41 struct rlimit { __kernel_ulong_t rlim_cur; __kernel_ulong_t rlim_max; } ; 173 struct file_ra_state ; 174 struct user_struct ; 175 struct writeback_control ; 176 struct bdi_writeback ; 273 struct vm_fault { unsigned int flags; gfp_t gfp_mask; unsigned long pgoff; void *virtual_address; struct page *cow_page; struct page *page; void *entry; unsigned long max_pgoff; pte_t *pte; } ; 317 struct vm_operations_struct { void (*open)(struct vm_area_struct *); void (*close)(struct vm_area_struct *); int (*mremap)(struct vm_area_struct *); int (*fault)(struct vm_area_struct *, struct vm_fault *); int (*pmd_fault)(struct vm_area_struct *, unsigned long, pmd_t *, unsigned int); void (*map_pages)(struct vm_area_struct *, struct vm_fault *); int (*page_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*pfn_mkwrite)(struct vm_area_struct *, struct vm_fault *); int (*access)(struct vm_area_struct *, unsigned long, void *, int, int); const char * (*name)(struct vm_area_struct *); int (*set_policy)(struct vm_area_struct *, struct mempolicy *); struct mempolicy * (*get_policy)(struct vm_area_struct *, unsigned long); struct page * (*find_special_page)(struct vm_area_struct *, unsigned long); } ; 2409 enum irqreturn { IRQ_NONE = 0, IRQ_HANDLED = 1, IRQ_WAKE_THREAD = 2 } ; 16 typedef enum irqreturn irqreturn_t; 64 struct irq_domain ; 414 struct proc_dir_entry ; 63 struct exception_table_entry { int insn; int fixup; int handler; } ; 61 struct timerqueue_node { struct rb_node node; ktime_t expires; } ; 12 struct timerqueue_head { struct rb_root head; struct timerqueue_node *next; } ; 50 struct hrtimer_clock_base ; 51 struct hrtimer_cpu_base ; 60 enum hrtimer_restart { HRTIMER_NORESTART = 0, HRTIMER_RESTART = 1 } ; 65 struct hrtimer { struct timerqueue_node node; ktime_t _softexpires; enum hrtimer_restart (*function)(struct hrtimer *); struct hrtimer_clock_base *base; u8 state; u8 is_rel; int start_pid; void *start_site; char start_comm[16U]; } ; 125 struct hrtimer_clock_base { struct hrtimer_cpu_base *cpu_base; int index; clockid_t clockid; struct timerqueue_head active; ktime_t (*get_time)(); ktime_t offset; } ; 158 struct hrtimer_cpu_base { raw_spinlock_t lock; seqcount_t seq; struct hrtimer *running; unsigned int cpu; unsigned int active_bases; unsigned int clock_was_set_seq; bool migration_enabled; bool nohz_active; unsigned char in_hrtirq; unsigned char hres_active; unsigned char hang_detected; ktime_t expires_next; struct hrtimer *next_timer; unsigned int nr_events; unsigned int nr_retries; unsigned int nr_hangs; unsigned int max_hang_time; struct hrtimer_clock_base clock_base[4U]; } ; 22 struct kernel_cap_struct { __u32 cap[2U]; } ; 25 typedef struct kernel_cap_struct kernel_cap_t; 84 struct plist_node { int prio; struct list_head prio_list; struct list_head node_list; } ; 4 typedef unsigned long cputime_t; 25 struct sem_undo_list ; 25 struct sysv_sem { struct sem_undo_list *undo_list; } ; 26 struct sysv_shm { struct list_head shm_clist; } ; 24 struct __anonstruct_sigset_t_251 { unsigned long sig[1U]; } ; 24 typedef struct __anonstruct_sigset_t_251 sigset_t; 25 struct siginfo ; 17 typedef void __signalfn_t(int); 18 typedef __signalfn_t *__sighandler_t; 20 typedef void __restorefn_t(); 21 typedef __restorefn_t *__sigrestore_t; 34 union sigval { int sival_int; void *sival_ptr; } ; 10 typedef union sigval sigval_t; 11 struct __anonstruct__kill_253 { __kernel_pid_t _pid; __kernel_uid32_t _uid; } ; 11 struct __anonstruct__timer_254 { __kernel_timer_t _tid; int _overrun; char _pad[0U]; sigval_t _sigval; int _sys_private; } ; 11 struct __anonstruct__rt_255 { __kernel_pid_t _pid; __kernel_uid32_t _uid; sigval_t _sigval; } ; 11 struct __anonstruct__sigchld_256 { __kernel_pid_t _pid; __kernel_uid32_t _uid; int _status; __kernel_clock_t _utime; __kernel_clock_t _stime; } ; 11 struct __anonstruct__addr_bnd_259 { void *_lower; void *_upper; } ; 11 union __anonunion____missing_field_name_258 { struct __anonstruct__addr_bnd_259 _addr_bnd; __u32 _pkey; } ; 11 struct __anonstruct__sigfault_257 { void *_addr; short _addr_lsb; union __anonunion____missing_field_name_258 __annonCompField61; } ; 11 struct __anonstruct__sigpoll_260 { long _band; int _fd; } ; 11 struct __anonstruct__sigsys_261 { void *_call_addr; int _syscall; unsigned int _arch; } ; 11 union __anonunion__sifields_252 { int _pad[28U]; struct __anonstruct__kill_253 _kill; struct __anonstruct__timer_254 _timer; struct __anonstruct__rt_255 _rt; struct __anonstruct__sigchld_256 _sigchld; struct __anonstruct__sigfault_257 _sigfault; struct __anonstruct__sigpoll_260 _sigpoll; struct __anonstruct__sigsys_261 _sigsys; } ; 11 struct siginfo { int si_signo; int si_errno; int si_code; union __anonunion__sifields_252 _sifields; } ; 118 typedef struct siginfo siginfo_t; 22 struct sigpending { struct list_head list; sigset_t signal; } ; 257 struct sigaction { __sighandler_t sa_handler; unsigned long sa_flags; __sigrestore_t sa_restorer; sigset_t sa_mask; } ; 271 struct k_sigaction { struct sigaction sa; } ; 457 enum pid_type { PIDTYPE_PID = 0, PIDTYPE_PGID = 1, PIDTYPE_SID = 2, PIDTYPE_MAX = 3 } ; 464 struct pid_namespace ; 464 struct upid { int nr; struct pid_namespace *ns; struct hlist_node pid_chain; } ; 56 struct pid { atomic_t count; unsigned int level; struct hlist_head tasks[3U]; struct callback_head rcu; struct upid numbers[1U]; } ; 68 struct pid_link { struct hlist_node node; struct pid *pid; } ; 43 struct seccomp_filter ; 44 struct seccomp { int mode; struct seccomp_filter *filter; } ; 40 struct rt_mutex_waiter ; 12 enum kcov_mode { KCOV_MODE_DISABLED = 0, KCOV_MODE_TRACE = 1 } ; 17 struct task_io_accounting { u64 rchar; u64 wchar; u64 syscr; u64 syscw; u64 read_bytes; u64 write_bytes; u64 cancelled_write_bytes; } ; 45 struct latency_record { unsigned long backtrace[12U]; unsigned int count; unsigned long time; unsigned long max; } ; 41 struct assoc_array_ptr ; 41 struct assoc_array { struct assoc_array_ptr *root; unsigned long nr_leaves_on_tree; } ; 31 typedef int32_t key_serial_t; 34 typedef uint32_t key_perm_t; 35 struct key ; 36 struct signal_struct ; 37 struct key_type ; 41 struct keyring_index_key { struct key_type *type; const char *description; size_t desc_len; } ; 91 union key_payload { void *rcu_data0; void *data[4U]; } ; 128 union __anonunion____missing_field_name_282 { struct list_head graveyard_link; struct rb_node serial_node; } ; 128 struct key_user ; 128 union __anonunion____missing_field_name_283 { time_t expiry; time_t revoked_at; } ; 128 struct __anonstruct____missing_field_name_285 { struct key_type *type; char *description; } ; 128 union __anonunion____missing_field_name_284 { struct keyring_index_key index_key; struct __anonstruct____missing_field_name_285 __annonCompField64; } ; 128 struct __anonstruct____missing_field_name_287 { struct list_head name_link; struct assoc_array keys; } ; 128 union __anonunion____missing_field_name_286 { union key_payload payload; struct __anonstruct____missing_field_name_287 __annonCompField66; int reject_error; } ; 128 struct key { atomic_t usage; key_serial_t serial; union __anonunion____missing_field_name_282 __annonCompField62; struct rw_semaphore sem; struct key_user *user; void *security; union __anonunion____missing_field_name_283 __annonCompField63; time_t last_used_at; kuid_t uid; kgid_t gid; key_perm_t perm; unsigned short quotalen; unsigned short datalen; unsigned long flags; union __anonunion____missing_field_name_284 __annonCompField65; union __anonunion____missing_field_name_286 __annonCompField67; int (*restrict_link)(struct key *, const struct key_type *, const union key_payload *); } ; 377 struct audit_context ; 27 struct group_info { atomic_t usage; int ngroups; int nblocks; kgid_t small_block[32U]; kgid_t *blocks[0U]; } ; 90 struct cred { atomic_t usage; atomic_t subscribers; void *put_addr; unsigned int magic; kuid_t uid; kgid_t gid; kuid_t suid; kgid_t sgid; kuid_t euid; kgid_t egid; kuid_t fsuid; kgid_t fsgid; unsigned int securebits; kernel_cap_t cap_inheritable; kernel_cap_t cap_permitted; kernel_cap_t cap_effective; kernel_cap_t cap_bset; kernel_cap_t cap_ambient; unsigned char jit_keyring; struct key *session_keyring; struct key *process_keyring; struct key *thread_keyring; struct key *request_key_auth; void *security; struct user_struct *user; struct user_namespace *user_ns; struct group_info *group_info; struct callback_head rcu; } ; 377 enum rcu_sync_type { RCU_SYNC = 0, RCU_SCHED_SYNC = 1, RCU_BH_SYNC = 2 } ; 383 struct rcu_sync { int gp_state; int gp_count; wait_queue_head_t gp_wait; int cb_state; struct callback_head cb_head; enum rcu_sync_type gp_type; } ; 65 struct percpu_rw_semaphore { struct rcu_sync rss; unsigned int *fast_read_ctr; struct rw_semaphore rw_sem; atomic_t slow_read_ctr; wait_queue_head_t write_waitq; } ; 54 struct cgroup ; 55 struct cgroup_root ; 56 struct cgroup_subsys ; 57 struct cgroup_taskset ; 101 struct cgroup_file { struct kernfs_node *kn; } ; 90 struct cgroup_subsys_state { struct cgroup *cgroup; struct cgroup_subsys *ss; struct percpu_ref refcnt; struct cgroup_subsys_state *parent; struct list_head sibling; struct list_head children; int id; unsigned int flags; u64 serial_nr; atomic_t online_cnt; struct callback_head callback_head; struct work_struct destroy_work; } ; 141 struct css_set { atomic_t refcount; struct hlist_node hlist; struct list_head tasks; struct list_head mg_tasks; struct list_head cgrp_links; struct cgroup *dfl_cgrp; struct cgroup_subsys_state *subsys[13U]; struct list_head mg_preload_node; struct list_head mg_node; struct cgroup *mg_src_cgrp; struct cgroup *mg_dst_cgrp; struct css_set *mg_dst_cset; struct list_head e_cset_node[13U]; struct list_head task_iters; bool dead; struct callback_head callback_head; } ; 221 struct cgroup { struct cgroup_subsys_state self; unsigned long flags; int id; int level; int populated_cnt; struct kernfs_node *kn; struct cgroup_file procs_file; struct cgroup_file events_file; u16 subtree_control; u16 subtree_ss_mask; u16 old_subtree_control; u16 old_subtree_ss_mask; struct cgroup_subsys_state *subsys[13U]; struct cgroup_root *root; struct list_head cset_links; struct list_head e_csets[13U]; struct list_head pidlists; struct mutex pidlist_mutex; wait_queue_head_t offline_waitq; struct work_struct release_agent_work; int ancestor_ids[]; } ; 306 struct cgroup_root { struct kernfs_root *kf_root; unsigned int subsys_mask; int hierarchy_id; struct cgroup cgrp; int cgrp_ancestor_id_storage; atomic_t nr_cgrps; struct list_head root_list; unsigned int flags; struct idr cgroup_idr; char release_agent_path[4096U]; char name[64U]; } ; 345 struct cftype { char name[64U]; unsigned long private; size_t max_write_len; unsigned int flags; unsigned int file_offset; struct cgroup_subsys *ss; struct list_head node; struct kernfs_ops *kf_ops; u64 (*read_u64)(struct cgroup_subsys_state *, struct cftype *); s64 (*read_s64)(struct cgroup_subsys_state *, struct cftype *); int (*seq_show)(struct seq_file *, void *); void * (*seq_start)(struct seq_file *, loff_t *); void * (*seq_next)(struct seq_file *, void *, loff_t *); void (*seq_stop)(struct seq_file *, void *); int (*write_u64)(struct cgroup_subsys_state *, struct cftype *, u64 ); int (*write_s64)(struct cgroup_subsys_state *, struct cftype *, s64 ); ssize_t (*write)(struct kernfs_open_file *, char *, size_t , loff_t ); struct lock_class_key lockdep_key; } ; 430 struct cgroup_subsys { struct cgroup_subsys_state * (*css_alloc)(struct cgroup_subsys_state *); int (*css_online)(struct cgroup_subsys_state *); void (*css_offline)(struct cgroup_subsys_state *); void (*css_released)(struct cgroup_subsys_state *); void (*css_free)(struct cgroup_subsys_state *); void (*css_reset)(struct cgroup_subsys_state *); int (*can_attach)(struct cgroup_taskset *); void (*cancel_attach)(struct cgroup_taskset *); void (*attach)(struct cgroup_taskset *); void (*post_attach)(); int (*can_fork)(struct task_struct *); void (*cancel_fork)(struct task_struct *); void (*fork)(struct task_struct *); void (*exit)(struct task_struct *); void (*free)(struct task_struct *); void (*bind)(struct cgroup_subsys_state *); bool early_init; bool implicit_on_dfl; bool broken_hierarchy; bool warned_broken_hierarchy; int id; const char *name; const char *legacy_name; struct cgroup_root *root; struct idr css_idr; struct list_head cfts; struct cftype *dfl_cftypes; struct cftype *legacy_cftypes; unsigned int depends_on; } ; 128 struct futex_pi_state ; 129 struct robust_list_head ; 130 struct bio_list ; 131 struct fs_struct ; 132 struct perf_event_context ; 133 struct blk_plug ; 135 struct nameidata ; 188 struct cfs_rq ; 189 struct task_group ; 492 struct sighand_struct { atomic_t count; struct k_sigaction action[64U]; spinlock_t siglock; wait_queue_head_t signalfd_wqh; } ; 534 struct pacct_struct { int ac_flag; long ac_exitcode; unsigned long ac_mem; cputime_t ac_utime; cputime_t ac_stime; unsigned long ac_minflt; unsigned long ac_majflt; } ; 542 struct cpu_itimer { cputime_t expires; cputime_t incr; u32 error; u32 incr_error; } ; 549 struct prev_cputime { cputime_t utime; cputime_t stime; raw_spinlock_t lock; } ; 574 struct task_cputime { cputime_t utime; cputime_t stime; unsigned long long sum_exec_runtime; } ; 590 struct task_cputime_atomic { atomic64_t utime; atomic64_t stime; atomic64_t sum_exec_runtime; } ; 612 struct thread_group_cputimer { struct task_cputime_atomic cputime_atomic; bool running; bool checking_timer; } ; 657 struct autogroup ; 658 struct tty_struct ; 658 struct taskstats ; 658 struct tty_audit_buf ; 658 struct signal_struct { atomic_t sigcnt; atomic_t live; int nr_threads; atomic_t oom_victims; struct list_head thread_head; wait_queue_head_t wait_chldexit; struct task_struct *curr_target; struct sigpending shared_pending; int group_exit_code; int notify_count; struct task_struct *group_exit_task; int group_stop_count; unsigned int flags; unsigned char is_child_subreaper; unsigned char has_child_subreaper; int posix_timer_id; struct list_head posix_timers; struct hrtimer real_timer; struct pid *leader_pid; ktime_t it_real_incr; struct cpu_itimer it[2U]; struct thread_group_cputimer cputimer; struct task_cputime cputime_expires; struct list_head cpu_timers[3U]; struct pid *tty_old_pgrp; int leader; struct tty_struct *tty; struct autogroup *autogroup; seqlock_t stats_lock; cputime_t utime; cputime_t stime; cputime_t cutime; cputime_t cstime; cputime_t gtime; cputime_t cgtime; struct prev_cputime prev_cputime; unsigned long nvcsw; unsigned long nivcsw; unsigned long cnvcsw; unsigned long cnivcsw; unsigned long min_flt; unsigned long maj_flt; unsigned long cmin_flt; unsigned long cmaj_flt; unsigned long inblock; unsigned long oublock; unsigned long cinblock; unsigned long coublock; unsigned long maxrss; unsigned long cmaxrss; struct task_io_accounting ioac; unsigned long long sum_sched_runtime; struct rlimit rlim[16U]; struct pacct_struct pacct; struct taskstats *stats; unsigned int audit_tty; struct tty_audit_buf *tty_audit_buf; bool oom_flag_origin; short oom_score_adj; short oom_score_adj_min; struct mutex cred_guard_mutex; } ; 833 struct user_struct { atomic_t __count; atomic_t processes; atomic_t sigpending; atomic_t inotify_watches; atomic_t inotify_devs; atomic_t fanotify_listeners; atomic_long_t epoll_watches; unsigned long mq_bytes; unsigned long locked_shm; unsigned long unix_inflight; atomic_long_t pipe_bufs; struct key *uid_keyring; struct key *session_keyring; struct hlist_node uidhash_node; kuid_t uid; atomic_long_t locked_vm; } ; 878 struct backing_dev_info ; 879 struct reclaim_state ; 880 struct sched_info { unsigned long pcount; unsigned long long run_delay; unsigned long long last_arrival; unsigned long long last_queued; } ; 894 struct task_delay_info { spinlock_t lock; unsigned int flags; u64 blkio_start; u64 blkio_delay; u64 swapin_delay; u32 blkio_count; u32 swapin_count; u64 freepages_start; u64 freepages_delay; u32 freepages_count; } ; 951 struct wake_q_node { struct wake_q_node *next; } ; 1183 struct io_context ; 1217 struct pipe_inode_info ; 1219 struct load_weight { unsigned long weight; u32 inv_weight; } ; 1226 struct sched_avg { u64 last_update_time; u64 load_sum; u32 util_sum; u32 period_contrib; unsigned long load_avg; unsigned long util_avg; } ; 1284 struct sched_statistics { u64 wait_start; u64 wait_max; u64 wait_count; u64 wait_sum; u64 iowait_count; u64 iowait_sum; u64 sleep_start; u64 sleep_max; s64 sum_sleep_runtime; u64 block_start; u64 block_max; u64 exec_max; u64 slice_max; u64 nr_migrations_cold; u64 nr_failed_migrations_affine; u64 nr_failed_migrations_running; u64 nr_failed_migrations_hot; u64 nr_forced_migrations; u64 nr_wakeups; u64 nr_wakeups_sync; u64 nr_wakeups_migrate; u64 nr_wakeups_local; u64 nr_wakeups_remote; u64 nr_wakeups_affine; u64 nr_wakeups_affine_attempts; u64 nr_wakeups_passive; u64 nr_wakeups_idle; } ; 1319 struct sched_entity { struct load_weight load; struct rb_node run_node; struct list_head group_node; unsigned int on_rq; u64 exec_start; u64 sum_exec_runtime; u64 vruntime; u64 prev_sum_exec_runtime; u64 nr_migrations; struct sched_statistics statistics; int depth; struct sched_entity *parent; struct cfs_rq *cfs_rq; struct cfs_rq *my_q; struct sched_avg avg; } ; 1356 struct rt_rq ; 1356 struct sched_rt_entity { struct list_head run_list; unsigned long timeout; unsigned long watchdog_stamp; unsigned int time_slice; unsigned short on_rq; unsigned short on_list; struct sched_rt_entity *back; struct sched_rt_entity *parent; struct rt_rq *rt_rq; struct rt_rq *my_q; } ; 1374 struct sched_dl_entity { struct rb_node rb_node; u64 dl_runtime; u64 dl_deadline; u64 dl_period; u64 dl_bw; s64 runtime; u64 deadline; unsigned int flags; int dl_throttled; int dl_boosted; int dl_yielded; struct hrtimer dl_timer; } ; 1438 struct tlbflush_unmap_batch { struct cpumask cpumask; bool flush_required; bool writable; } ; 1457 struct sched_class ; 1457 struct files_struct ; 1457 struct compat_robust_list_head ; 1457 struct numa_group ; 1457 struct kcov ; 1457 struct task_struct { volatile long state; void *stack; atomic_t usage; unsigned int flags; unsigned int ptrace; struct llist_node wake_entry; int on_cpu; unsigned int wakee_flips; unsigned long wakee_flip_decay_ts; struct task_struct *last_wakee; int wake_cpu; int on_rq; int prio; int static_prio; int normal_prio; unsigned int rt_priority; const struct sched_class *sched_class; struct sched_entity se; struct sched_rt_entity rt; struct task_group *sched_task_group; struct sched_dl_entity dl; struct hlist_head preempt_notifiers; unsigned int policy; int nr_cpus_allowed; cpumask_t cpus_allowed; unsigned long rcu_tasks_nvcsw; bool rcu_tasks_holdout; struct list_head rcu_tasks_holdout_list; int rcu_tasks_idle_cpu; struct sched_info sched_info; struct list_head tasks; struct plist_node pushable_tasks; struct rb_node pushable_dl_tasks; struct mm_struct *mm; struct mm_struct *active_mm; u32 vmacache_seqnum; struct vm_area_struct *vmacache[4U]; struct task_rss_stat rss_stat; int exit_state; int exit_code; int exit_signal; int pdeath_signal; unsigned long jobctl; unsigned int personality; unsigned char sched_reset_on_fork; unsigned char sched_contributes_to_load; unsigned char sched_migrated; unsigned char sched_remote_wakeup; unsigned char; unsigned char in_execve; unsigned char in_iowait; unsigned char memcg_may_oom; unsigned char memcg_kmem_skip_account; unsigned char brk_randomized; unsigned long atomic_flags; struct restart_block restart_block; pid_t pid; pid_t tgid; struct task_struct *real_parent; struct task_struct *parent; struct list_head children; struct list_head sibling; struct task_struct *group_leader; struct list_head ptraced; struct list_head ptrace_entry; struct pid_link pids[3U]; struct list_head thread_group; struct list_head thread_node; struct completion *vfork_done; int *set_child_tid; int *clear_child_tid; cputime_t utime; cputime_t stime; cputime_t utimescaled; cputime_t stimescaled; cputime_t gtime; struct prev_cputime prev_cputime; unsigned long nvcsw; unsigned long nivcsw; u64 start_time; u64 real_start_time; unsigned long min_flt; unsigned long maj_flt; struct task_cputime cputime_expires; struct list_head cpu_timers[3U]; const struct cred *real_cred; const struct cred *cred; char comm[16U]; struct nameidata *nameidata; struct sysv_sem sysvsem; struct sysv_shm sysvshm; unsigned long last_switch_count; struct fs_struct *fs; struct files_struct *files; struct nsproxy *nsproxy; struct signal_struct *signal; struct sighand_struct *sighand; sigset_t blocked; sigset_t real_blocked; sigset_t saved_sigmask; struct sigpending pending; unsigned long sas_ss_sp; size_t sas_ss_size; unsigned int sas_ss_flags; struct callback_head *task_works; struct audit_context *audit_context; kuid_t loginuid; unsigned int sessionid; struct seccomp seccomp; u32 parent_exec_id; u32 self_exec_id; spinlock_t alloc_lock; raw_spinlock_t pi_lock; struct wake_q_node wake_q; struct rb_root pi_waiters; struct rb_node *pi_waiters_leftmost; struct rt_mutex_waiter *pi_blocked_on; struct mutex_waiter *blocked_on; unsigned int irq_events; unsigned long hardirq_enable_ip; unsigned long hardirq_disable_ip; unsigned int hardirq_enable_event; unsigned int hardirq_disable_event; int hardirqs_enabled; int hardirq_context; unsigned long softirq_disable_ip; unsigned long softirq_enable_ip; unsigned int softirq_disable_event; unsigned int softirq_enable_event; int softirqs_enabled; int softirq_context; u64 curr_chain_key; int lockdep_depth; unsigned int lockdep_recursion; struct held_lock held_locks[48U]; gfp_t lockdep_reclaim_gfp; unsigned int in_ubsan; void *journal_info; struct bio_list *bio_list; struct blk_plug *plug; struct reclaim_state *reclaim_state; struct backing_dev_info *backing_dev_info; struct io_context *io_context; unsigned long ptrace_message; siginfo_t *last_siginfo; struct task_io_accounting ioac; u64 acct_rss_mem1; u64 acct_vm_mem1; cputime_t acct_timexpd; nodemask_t mems_allowed; seqcount_t mems_allowed_seq; int cpuset_mem_spread_rotor; int cpuset_slab_spread_rotor; struct css_set *cgroups; struct list_head cg_list; struct robust_list_head *robust_list; struct compat_robust_list_head *compat_robust_list; struct list_head pi_state_list; struct futex_pi_state *pi_state_cache; struct perf_event_context *perf_event_ctxp[2U]; struct mutex perf_event_mutex; struct list_head perf_event_list; struct mempolicy *mempolicy; short il_next; short pref_node_fork; int numa_scan_seq; unsigned int numa_scan_period; unsigned int numa_scan_period_max; int numa_preferred_nid; unsigned long numa_migrate_retry; u64 node_stamp; u64 last_task_numa_placement; u64 last_sum_exec_runtime; struct callback_head numa_work; struct list_head numa_entry; struct numa_group *numa_group; unsigned long *numa_faults; unsigned long total_numa_faults; unsigned long numa_faults_locality[3U]; unsigned long numa_pages_migrated; struct tlbflush_unmap_batch tlb_ubc; struct callback_head rcu; struct pipe_inode_info *splice_pipe; struct page_frag task_frag; struct task_delay_info *delays; int make_it_fail; int nr_dirtied; int nr_dirtied_pause; unsigned long dirty_paused_when; int latency_record_count; struct latency_record latency_record[32U]; u64 timer_slack_ns; u64 default_timer_slack_ns; unsigned int kasan_depth; unsigned long trace; unsigned long trace_recursion; enum kcov_mode kcov_mode; unsigned int kcov_size; void *kcov_area; struct kcov *kcov; struct mem_cgroup *memcg_in_oom; gfp_t memcg_oom_gfp_mask; int memcg_oom_order; unsigned int memcg_nr_pages_over_high; struct uprobe_task *utask; unsigned int sequential_io; unsigned int sequential_io_avg; unsigned long task_state_change; int pagefault_disabled; struct task_struct *oom_reaper_list; struct thread_struct thread; } ; 26 struct device_type ; 28 struct class ; 52 struct klist_node ; 37 struct klist_node { void *n_klist; struct list_head n_node; struct kref n_ref; } ; 68 struct hlist_bl_node ; 68 struct hlist_bl_head { struct hlist_bl_node *first; } ; 36 struct hlist_bl_node { struct hlist_bl_node *next; struct hlist_bl_node **pprev; } ; 114 struct __anonstruct____missing_field_name_321 { spinlock_t lock; int count; } ; 114 union __anonunion____missing_field_name_320 { struct __anonstruct____missing_field_name_321 __annonCompField73; } ; 114 struct lockref { union __anonunion____missing_field_name_320 __annonCompField74; } ; 75 struct path ; 76 struct vfsmount ; 77 struct __anonstruct____missing_field_name_323 { u32 hash; u32 len; } ; 77 union __anonunion____missing_field_name_322 { struct __anonstruct____missing_field_name_323 __annonCompField75; u64 hash_len; } ; 77 struct qstr { union __anonunion____missing_field_name_322 __annonCompField76; const unsigned char *name; } ; 65 struct dentry_operations ; 65 union __anonunion____missing_field_name_324 { struct list_head d_lru; wait_queue_head_t *d_wait; } ; 65 union __anonunion_d_u_325 { struct hlist_node d_alias; struct hlist_bl_node d_in_lookup_hash; struct callback_head d_rcu; } ; 65 struct dentry { unsigned int d_flags; seqcount_t d_seq; struct hlist_bl_node d_hash; struct dentry *d_parent; struct qstr d_name; struct inode *d_inode; unsigned char d_iname[32U]; struct lockref d_lockref; const struct dentry_operations *d_op; struct super_block *d_sb; unsigned long d_time; void *d_fsdata; union __anonunion____missing_field_name_324 __annonCompField77; struct list_head d_child; struct list_head d_subdirs; union __anonunion_d_u_325 d_u; } ; 121 struct dentry_operations { int (*d_revalidate)(struct dentry *, unsigned int); int (*d_weak_revalidate)(struct dentry *, unsigned int); int (*d_hash)(const struct dentry *, struct qstr *); int (*d_compare)(const struct dentry *, const struct dentry *, unsigned int, const char *, const struct qstr *); int (*d_delete)(const struct dentry *); void (*d_release)(struct dentry *); void (*d_prune)(struct dentry *); void (*d_iput)(struct dentry *, struct inode *); char * (*d_dname)(struct dentry *, char *, int); struct vfsmount * (*d_automount)(struct path *); int (*d_manage)(struct dentry *, bool ); struct inode * (*d_select_inode)(struct dentry *, unsigned int); struct dentry * (*d_real)(struct dentry *, struct inode *); } ; 577 struct path { struct vfsmount *mnt; struct dentry *dentry; } ; 27 struct list_lru_one { struct list_head list; long nr_items; } ; 32 struct list_lru_memcg { struct list_lru_one *lru[0U]; } ; 37 struct list_lru_node { spinlock_t lock; struct list_lru_one lru; struct list_lru_memcg *memcg_lrus; } ; 47 struct list_lru { struct list_lru_node *node; struct list_head list; } ; 63 struct __anonstruct____missing_field_name_327 { struct radix_tree_node *parent; void *private_data; } ; 63 union __anonunion____missing_field_name_326 { struct __anonstruct____missing_field_name_327 __annonCompField78; struct callback_head callback_head; } ; 63 struct radix_tree_node { unsigned char shift; unsigned char offset; unsigned int count; union __anonunion____missing_field_name_326 __annonCompField79; struct list_head private_list; void *slots[64U]; unsigned long tags[3U][1U]; } ; 106 struct radix_tree_root { gfp_t gfp_mask; struct radix_tree_node *rnode; } ; 45 struct fiemap_extent { __u64 fe_logical; __u64 fe_physical; __u64 fe_length; __u64 fe_reserved64[2U]; __u32 fe_flags; __u32 fe_reserved[3U]; } ; 38 enum migrate_mode { MIGRATE_ASYNC = 0, MIGRATE_SYNC_LIGHT = 1, MIGRATE_SYNC = 2 } ; 44 struct bio_set ; 45 struct bio ; 46 struct bio_integrity_payload ; 47 struct block_device ; 17 typedef void bio_end_io_t(struct bio *); 19 struct bio_vec { struct page *bv_page; unsigned int bv_len; unsigned int bv_offset; } ; 28 struct bvec_iter { sector_t bi_sector; unsigned int bi_size; unsigned int bi_idx; unsigned int bi_bvec_done; } ; 40 union __anonunion____missing_field_name_332 { struct bio_integrity_payload *bi_integrity; } ; 40 struct bio { struct bio *bi_next; struct block_device *bi_bdev; unsigned int bi_flags; int bi_error; unsigned long bi_rw; struct bvec_iter bi_iter; unsigned int bi_phys_segments; unsigned int bi_seg_front_size; unsigned int bi_seg_back_size; atomic_t __bi_remaining; bio_end_io_t *bi_end_io; void *bi_private; struct io_context *bi_ioc; struct cgroup_subsys_state *bi_css; union __anonunion____missing_field_name_332 __annonCompField80; unsigned short bi_vcnt; unsigned short bi_max_vecs; atomic_t __bi_cnt; struct bio_vec *bi_io_vec; struct bio_set *bi_pool; struct bio_vec bi_inline_vecs[0U]; } ; 245 typedef unsigned int blk_qc_t; 268 struct delayed_call { void (*fn)(void *); void *arg; } ; 261 struct export_operations ; 262 struct hd_geometry ; 264 struct kiocb ; 265 struct poll_table_struct ; 266 struct kstatfs ; 267 struct swap_info_struct ; 268 struct iov_iter ; 269 struct fscrypt_info ; 270 struct fscrypt_operations ; 76 struct iattr { unsigned int ia_valid; umode_t ia_mode; kuid_t ia_uid; kgid_t ia_gid; loff_t ia_size; struct timespec ia_atime; struct timespec ia_mtime; struct timespec ia_ctime; struct file *ia_file; } ; 265 struct percpu_counter { raw_spinlock_t lock; s64 count; struct list_head list; s32 *counters; } ; 213 struct dquot ; 214 struct kqid ; 19 typedef __kernel_uid32_t projid_t; 23 struct __anonstruct_kprojid_t_333 { projid_t val; } ; 23 typedef struct __anonstruct_kprojid_t_333 kprojid_t; 181 enum quota_type { USRQUOTA = 0, GRPQUOTA = 1, PRJQUOTA = 2 } ; 66 typedef long long qsize_t; 67 union __anonunion____missing_field_name_334 { kuid_t uid; kgid_t gid; kprojid_t projid; } ; 67 struct kqid { union __anonunion____missing_field_name_334 __annonCompField81; enum quota_type type; } ; 184 struct mem_dqblk { qsize_t dqb_bhardlimit; qsize_t dqb_bsoftlimit; qsize_t dqb_curspace; qsize_t dqb_rsvspace; qsize_t dqb_ihardlimit; qsize_t dqb_isoftlimit; qsize_t dqb_curinodes; time_t dqb_btime; time_t dqb_itime; } ; 206 struct quota_format_type ; 207 struct mem_dqinfo { struct quota_format_type *dqi_format; int dqi_fmt_id; struct list_head dqi_dirty_list; unsigned long dqi_flags; unsigned int dqi_bgrace; unsigned int dqi_igrace; qsize_t dqi_max_spc_limit; qsize_t dqi_max_ino_limit; void *dqi_priv; } ; 272 struct dquot { struct hlist_node dq_hash; struct list_head dq_inuse; struct list_head dq_free; struct list_head dq_dirty; struct mutex dq_lock; atomic_t dq_count; wait_queue_head_t dq_wait_unused; struct super_block *dq_sb; struct kqid dq_id; loff_t dq_off; unsigned long dq_flags; struct mem_dqblk dq_dqb; } ; 299 struct quota_format_ops { int (*check_quota_file)(struct super_block *, int); int (*read_file_info)(struct super_block *, int); int (*write_file_info)(struct super_block *, int); int (*free_file_info)(struct super_block *, int); int (*read_dqblk)(struct dquot *); int (*commit_dqblk)(struct dquot *); int (*release_dqblk)(struct dquot *); int (*get_next_id)(struct super_block *, struct kqid *); } ; 311 struct dquot_operations { int (*write_dquot)(struct dquot *); struct dquot * (*alloc_dquot)(struct super_block *, int); void (*destroy_dquot)(struct dquot *); int (*acquire_dquot)(struct dquot *); int (*release_dquot)(struct dquot *); int (*mark_dirty)(struct dquot *); int (*write_info)(struct super_block *, int); qsize_t * (*get_reserved_space)(struct inode *); int (*get_projid)(struct inode *, kprojid_t *); int (*get_next_id)(struct super_block *, struct kqid *); } ; 328 struct qc_dqblk { int d_fieldmask; u64 d_spc_hardlimit; u64 d_spc_softlimit; u64 d_ino_hardlimit; u64 d_ino_softlimit; u64 d_space; u64 d_ino_count; s64 d_ino_timer; s64 d_spc_timer; int d_ino_warns; int d_spc_warns; u64 d_rt_spc_hardlimit; u64 d_rt_spc_softlimit; u64 d_rt_space; s64 d_rt_spc_timer; int d_rt_spc_warns; } ; 351 struct qc_type_state { unsigned int flags; unsigned int spc_timelimit; unsigned int ino_timelimit; unsigned int rt_spc_timelimit; unsigned int spc_warnlimit; unsigned int ino_warnlimit; unsigned int rt_spc_warnlimit; unsigned long long ino; blkcnt_t blocks; blkcnt_t nextents; } ; 397 struct qc_state { unsigned int s_incoredqs; struct qc_type_state s_state[3U]; } ; 408 struct qc_info { int i_fieldmask; unsigned int i_flags; unsigned int i_spc_timelimit; unsigned int i_ino_timelimit; unsigned int i_rt_spc_timelimit; unsigned int i_spc_warnlimit; unsigned int i_ino_warnlimit; unsigned int i_rt_spc_warnlimit; } ; 421 struct quotactl_ops { int (*quota_on)(struct super_block *, int, int, struct path *); int (*quota_off)(struct super_block *, int); int (*quota_enable)(struct super_block *, unsigned int); int (*quota_disable)(struct super_block *, unsigned int); int (*quota_sync)(struct super_block *, int); int (*set_info)(struct super_block *, int, struct qc_info *); int (*get_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *); int (*get_nextdqblk)(struct super_block *, struct kqid *, struct qc_dqblk *); int (*set_dqblk)(struct super_block *, struct kqid , struct qc_dqblk *); int (*get_state)(struct super_block *, struct qc_state *); int (*rm_xquota)(struct super_block *, unsigned int); } ; 437 struct quota_format_type { int qf_fmt_id; const struct quota_format_ops *qf_ops; struct module *qf_owner; struct quota_format_type *qf_next; } ; 501 struct quota_info { unsigned int flags; struct mutex dqio_mutex; struct mutex dqonoff_mutex; struct inode *files[3U]; struct mem_dqinfo info[3U]; const struct quota_format_ops *ops[3U]; } ; 531 struct kiocb { struct file *ki_filp; loff_t ki_pos; void (*ki_complete)(struct kiocb *, long, long); void *private; int ki_flags; } ; 371 struct address_space_operations { int (*writepage)(struct page *, struct writeback_control *); int (*readpage)(struct file *, struct page *); int (*writepages)(struct address_space *, struct writeback_control *); int (*set_page_dirty)(struct page *); int (*readpages)(struct file *, struct address_space *, struct list_head *, unsigned int); int (*write_begin)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page **, void **); int (*write_end)(struct file *, struct address_space *, loff_t , unsigned int, unsigned int, struct page *, void *); sector_t (*bmap)(struct address_space *, sector_t ); void (*invalidatepage)(struct page *, unsigned int, unsigned int); int (*releasepage)(struct page *, gfp_t ); void (*freepage)(struct page *); ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *); int (*migratepage)(struct address_space *, struct page *, struct page *, enum migrate_mode ); int (*launder_page)(struct page *); int (*is_partially_uptodate)(struct page *, unsigned long, unsigned long); void (*is_dirty_writeback)(struct page *, bool *, bool *); int (*error_remove_page)(struct address_space *, struct page *); int (*swap_activate)(struct swap_info_struct *, struct file *, sector_t *); void (*swap_deactivate)(struct file *); } ; 428 struct address_space { struct inode *host; struct radix_tree_root page_tree; spinlock_t tree_lock; atomic_t i_mmap_writable; struct rb_root i_mmap; struct rw_semaphore i_mmap_rwsem; unsigned long nrpages; unsigned long nrexceptional; unsigned long writeback_index; const struct address_space_operations *a_ops; unsigned long flags; spinlock_t private_lock; struct list_head private_list; void *private_data; } ; 449 struct request_queue ; 450 struct hd_struct ; 450 struct gendisk ; 450 struct block_device { dev_t bd_dev; int bd_openers; struct inode *bd_inode; struct super_block *bd_super; struct mutex bd_mutex; struct list_head bd_inodes; void *bd_claiming; void *bd_holder; int bd_holders; bool bd_write_holder; struct list_head bd_holder_disks; struct block_device *bd_contains; unsigned int bd_block_size; struct hd_struct *bd_part; unsigned int bd_part_count; int bd_invalidated; struct gendisk *bd_disk; struct request_queue *bd_queue; struct list_head bd_list; unsigned long bd_private; int bd_fsfreeze_count; struct mutex bd_fsfreeze_mutex; } ; 566 struct posix_acl ; 592 struct inode_operations ; 592 union __anonunion____missing_field_name_339 { const unsigned int i_nlink; unsigned int __i_nlink; } ; 592 union __anonunion____missing_field_name_340 { struct hlist_head i_dentry; struct callback_head i_rcu; } ; 592 struct file_lock_context ; 592 struct cdev ; 592 union __anonunion____missing_field_name_341 { struct pipe_inode_info *i_pipe; struct block_device *i_bdev; struct cdev *i_cdev; char *i_link; unsigned int i_dir_seq; } ; 592 struct inode { umode_t i_mode; unsigned short i_opflags; kuid_t i_uid; kgid_t i_gid; unsigned int i_flags; struct posix_acl *i_acl; struct posix_acl *i_default_acl; const struct inode_operations *i_op; struct super_block *i_sb; struct address_space *i_mapping; void *i_security; unsigned long i_ino; union __anonunion____missing_field_name_339 __annonCompField82; dev_t i_rdev; loff_t i_size; struct timespec i_atime; struct timespec i_mtime; struct timespec i_ctime; spinlock_t i_lock; unsigned short i_bytes; unsigned int i_blkbits; blkcnt_t i_blocks; unsigned long i_state; struct rw_semaphore i_rwsem; unsigned long dirtied_when; unsigned long dirtied_time_when; struct hlist_node i_hash; struct list_head i_io_list; struct bdi_writeback *i_wb; int i_wb_frn_winner; u16 i_wb_frn_avg_time; u16 i_wb_frn_history; struct list_head i_lru; struct list_head i_sb_list; union __anonunion____missing_field_name_340 __annonCompField83; u64 i_version; atomic_t i_count; atomic_t i_dio_count; atomic_t i_writecount; atomic_t i_readcount; const struct file_operations *i_fop; struct file_lock_context *i_flctx; struct address_space i_data; struct list_head i_devices; union __anonunion____missing_field_name_341 __annonCompField84; __u32 i_generation; __u32 i_fsnotify_mask; struct hlist_head i_fsnotify_marks; struct fscrypt_info *i_crypt_info; void *i_private; } ; 870 struct fown_struct { rwlock_t lock; struct pid *pid; enum pid_type pid_type; kuid_t uid; kuid_t euid; int signum; } ; 878 struct file_ra_state { unsigned long start; unsigned int size; unsigned int async_size; unsigned int ra_pages; unsigned int mmap_miss; loff_t prev_pos; } ; 901 union __anonunion_f_u_342 { struct llist_node fu_llist; struct callback_head fu_rcuhead; } ; 901 struct file { union __anonunion_f_u_342 f_u; struct path f_path; struct inode *f_inode; const struct file_operations *f_op; spinlock_t f_lock; atomic_long_t f_count; unsigned int f_flags; fmode_t f_mode; struct mutex f_pos_lock; loff_t f_pos; struct fown_struct f_owner; const struct cred *f_cred; struct file_ra_state f_ra; u64 f_version; void *f_security; void *private_data; struct list_head f_ep_links; struct list_head f_tfile_llink; struct address_space *f_mapping; } ; 986 typedef void *fl_owner_t; 987 struct file_lock ; 988 struct file_lock_operations { void (*fl_copy_lock)(struct file_lock *, struct file_lock *); void (*fl_release_private)(struct file_lock *); } ; 994 struct lock_manager_operations { int (*lm_compare_owner)(struct file_lock *, struct file_lock *); unsigned long int (*lm_owner_key)(struct file_lock *); fl_owner_t (*lm_get_owner)(fl_owner_t ); void (*lm_put_owner)(fl_owner_t ); void (*lm_notify)(struct file_lock *); int (*lm_grant)(struct file_lock *, int); bool (*lm_break)(struct file_lock *); int (*lm_change)(struct file_lock *, int, struct list_head *); void (*lm_setup)(struct file_lock *, void **); } ; 1021 struct nlm_lockowner ; 1022 struct nfs_lock_info { u32 state; struct nlm_lockowner *owner; struct list_head list; } ; 14 struct nfs4_lock_state ; 15 struct nfs4_lock_info { struct nfs4_lock_state *owner; } ; 19 struct fasync_struct ; 19 struct __anonstruct_afs_344 { struct list_head link; int state; } ; 19 union __anonunion_fl_u_343 { struct nfs_lock_info nfs_fl; struct nfs4_lock_info nfs4_fl; struct __anonstruct_afs_344 afs; } ; 19 struct file_lock { struct file_lock *fl_next; struct list_head fl_list; struct hlist_node fl_link; struct list_head fl_block; fl_owner_t fl_owner; unsigned int fl_flags; unsigned char fl_type; unsigned int fl_pid; int fl_link_cpu; struct pid *fl_nspid; wait_queue_head_t fl_wait; struct file *fl_file; loff_t fl_start; loff_t fl_end; struct fasync_struct *fl_fasync; unsigned long fl_break_time; unsigned long fl_downgrade_time; const struct file_lock_operations *fl_ops; const struct lock_manager_operations *fl_lmops; union __anonunion_fl_u_343 fl_u; } ; 1074 struct file_lock_context { spinlock_t flc_lock; struct list_head flc_flock; struct list_head flc_posix; struct list_head flc_lease; } ; 1287 struct fasync_struct { spinlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next; struct file *fa_file; struct callback_head fa_rcu; } ; 1322 struct sb_writers { int frozen; wait_queue_head_t wait_unfrozen; struct percpu_rw_semaphore rw_sem[3U]; } ; 1348 struct super_operations ; 1348 struct xattr_handler ; 1348 struct mtd_info ; 1348 struct super_block { struct list_head s_list; dev_t s_dev; unsigned char s_blocksize_bits; unsigned long s_blocksize; loff_t s_maxbytes; struct file_system_type *s_type; const struct super_operations *s_op; const struct dquot_operations *dq_op; const struct quotactl_ops *s_qcop; const struct export_operations *s_export_op; unsigned long s_flags; unsigned long s_iflags; unsigned long s_magic; struct dentry *s_root; struct rw_semaphore s_umount; int s_count; atomic_t s_active; void *s_security; const struct xattr_handler **s_xattr; const struct fscrypt_operations *s_cop; struct hlist_bl_head s_anon; struct list_head s_mounts; struct block_device *s_bdev; struct backing_dev_info *s_bdi; struct mtd_info *s_mtd; struct hlist_node s_instances; unsigned int s_quota_types; struct quota_info s_dquot; struct sb_writers s_writers; char s_id[32U]; u8 s_uuid[16U]; void *s_fs_info; unsigned int s_max_links; fmode_t s_mode; u32 s_time_gran; struct mutex s_vfs_rename_mutex; char *s_subtype; char *s_options; const struct dentry_operations *s_d_op; int cleancache_poolid; struct shrinker s_shrink; atomic_long_t s_remove_count; int s_readonly_remount; struct workqueue_struct *s_dio_done_wq; struct hlist_head s_pins; struct list_lru s_dentry_lru; struct list_lru s_inode_lru; struct callback_head rcu; struct work_struct destroy_work; struct mutex s_sync_lock; int s_stack_depth; spinlock_t s_inode_list_lock; struct list_head s_inodes; } ; 1594 struct fiemap_extent_info { unsigned int fi_flags; unsigned int fi_extents_mapped; unsigned int fi_extents_max; struct fiemap_extent *fi_extents_start; } ; 1608 struct dir_context ; 1633 struct dir_context { int (*actor)(struct dir_context *, const char *, int, loff_t , u64 , unsigned int); loff_t pos; } ; 1639 struct block_device_operations ; 1640 struct file_operations { struct module *owner; loff_t (*llseek)(struct file *, loff_t , int); ssize_t (*read)(struct file *, char *, size_t , loff_t *); ssize_t (*write)(struct file *, const char *, size_t , loff_t *); ssize_t (*read_iter)(struct kiocb *, struct iov_iter *); ssize_t (*write_iter)(struct kiocb *, struct iov_iter *); int (*iterate)(struct file *, struct dir_context *); int (*iterate_shared)(struct file *, struct dir_context *); unsigned int (*poll)(struct file *, struct poll_table_struct *); long int (*unlocked_ioctl)(struct file *, unsigned int, unsigned long); long int (*compat_ioctl)(struct file *, unsigned int, unsigned long); int (*mmap)(struct file *, struct vm_area_struct *); int (*open)(struct inode *, struct file *); int (*flush)(struct file *, fl_owner_t ); int (*release)(struct inode *, struct file *); int (*fsync)(struct file *, loff_t , loff_t , int); int (*aio_fsync)(struct kiocb *, int); int (*fasync)(int, struct file *, int); int (*lock)(struct file *, int, struct file_lock *); ssize_t (*sendpage)(struct file *, struct page *, int, size_t , loff_t *, int); unsigned long int (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long); int (*check_flags)(int); int (*flock)(struct file *, int, struct file_lock *); ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t , unsigned int); ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t , unsigned int); int (*setlease)(struct file *, long, struct file_lock **, void **); long int (*fallocate)(struct file *, int, loff_t , loff_t ); void (*show_fdinfo)(struct seq_file *, struct file *); ssize_t (*copy_file_range)(struct file *, loff_t , struct file *, loff_t , size_t , unsigned int); int (*clone_file_range)(struct file *, loff_t , struct file *, loff_t , u64 ); ssize_t (*dedupe_file_range)(struct file *, u64 , u64 , struct file *, u64 ); } ; 1709 struct inode_operations { struct dentry * (*lookup)(struct inode *, struct dentry *, unsigned int); const char * (*get_link)(struct dentry *, struct inode *, struct delayed_call *); int (*permission)(struct inode *, int); struct posix_acl * (*get_acl)(struct inode *, int); int (*readlink)(struct dentry *, char *, int); int (*create)(struct inode *, struct dentry *, umode_t , bool ); int (*link)(struct dentry *, struct inode *, struct dentry *); int (*unlink)(struct inode *, struct dentry *); int (*symlink)(struct inode *, struct dentry *, const char *); int (*mkdir)(struct inode *, struct dentry *, umode_t ); int (*rmdir)(struct inode *, struct dentry *); int (*mknod)(struct inode *, struct dentry *, umode_t , dev_t ); int (*rename)(struct inode *, struct dentry *, struct inode *, struct dentry *); int (*rename2)(struct inode *, struct dentry *, struct inode *, struct dentry *, unsigned int); int (*setattr)(struct dentry *, struct iattr *); int (*getattr)(struct vfsmount *, struct dentry *, struct kstat *); int (*setxattr)(struct dentry *, struct inode *, const char *, const void *, size_t , int); ssize_t (*getxattr)(struct dentry *, struct inode *, const char *, void *, size_t ); ssize_t (*listxattr)(struct dentry *, char *, size_t ); int (*removexattr)(struct dentry *, const char *); int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 , u64 ); int (*update_time)(struct inode *, struct timespec *, int); int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned int, umode_t , int *); int (*tmpfile)(struct inode *, struct dentry *, umode_t ); int (*set_acl)(struct inode *, struct posix_acl *, int); } ; 1766 struct super_operations { struct inode * (*alloc_inode)(struct super_block *); void (*destroy_inode)(struct inode *); void (*dirty_inode)(struct inode *, int); int (*write_inode)(struct inode *, struct writeback_control *); int (*drop_inode)(struct inode *); void (*evict_inode)(struct inode *); void (*put_super)(struct super_block *); int (*sync_fs)(struct super_block *, int); int (*freeze_super)(struct super_block *); int (*freeze_fs)(struct super_block *); int (*thaw_super)(struct super_block *); int (*unfreeze_fs)(struct super_block *); int (*statfs)(struct dentry *, struct kstatfs *); int (*remount_fs)(struct super_block *, int *, char *); void (*umount_begin)(struct super_block *); int (*show_options)(struct seq_file *, struct dentry *); int (*show_devname)(struct seq_file *, struct dentry *); int (*show_path)(struct seq_file *, struct dentry *); int (*show_stats)(struct seq_file *, struct dentry *); ssize_t (*quota_read)(struct super_block *, int, char *, size_t , loff_t ); ssize_t (*quota_write)(struct super_block *, int, const char *, size_t , loff_t ); struct dquot ** (*get_dquots)(struct inode *); int (*bdev_try_to_free_page)(struct super_block *, struct page *, gfp_t ); long int (*nr_cached_objects)(struct super_block *, struct shrink_control *); long int (*free_cached_objects)(struct super_block *, struct shrink_control *); } ; 2005 struct file_system_type { const char *name; int fs_flags; struct dentry * (*mount)(struct file_system_type *, int, const char *, void *); void (*kill_sb)(struct super_block *); struct module *owner; struct file_system_type *next; struct hlist_head fs_supers; struct lock_class_key s_lock_key; struct lock_class_key s_umount_key; struct lock_class_key s_vfs_rename_key; struct lock_class_key s_writers_key[3U]; struct lock_class_key i_lock_key; struct lock_class_key i_mutex_key; struct lock_class_key i_mutex_dir_key; } ; 3176 struct seq_file { char *buf; size_t size; size_t from; size_t count; size_t pad_until; loff_t index; loff_t read_pos; u64 version; struct mutex lock; const struct seq_operations *op; int poll_event; const struct file *file; void *private; } ; 30 struct seq_operations { void * (*start)(struct seq_file *, loff_t *); void (*stop)(struct seq_file *, void *); void * (*next)(struct seq_file *, void *, loff_t *); int (*show)(struct seq_file *, void *); } ; 222 struct pinctrl ; 223 struct pinctrl_state ; 194 struct dev_pin_info { struct pinctrl *p; struct pinctrl_state *default_state; struct pinctrl_state *init_state; struct pinctrl_state *sleep_state; struct pinctrl_state *idle_state; } ; 48 struct dma_map_ops ; 48 struct dev_archdata { struct dma_map_ops *dma_ops; void *iommu; } ; 24 struct device_private ; 25 struct device_driver ; 26 struct driver_private ; 27 struct subsys_private ; 28 struct bus_type ; 29 struct device_node ; 30 struct fwnode_handle ; 31 struct iommu_ops ; 32 struct iommu_group ; 61 struct device_attribute ; 61 struct bus_type { const char *name; const char *dev_name; struct device *dev_root; struct device_attribute *dev_attrs; const struct attribute_group **bus_groups; const struct attribute_group **dev_groups; const struct attribute_group **drv_groups; int (*match)(struct device *, struct device_driver *); int (*uevent)(struct device *, struct kobj_uevent_env *); int (*probe)(struct device *); int (*remove)(struct device *); void (*shutdown)(struct device *); int (*online)(struct device *); int (*offline)(struct device *); int (*suspend)(struct device *, pm_message_t ); int (*resume)(struct device *); const struct dev_pm_ops *pm; const struct iommu_ops *iommu_ops; struct subsys_private *p; struct lock_class_key lock_key; } ; 201 enum probe_type { PROBE_DEFAULT_STRATEGY = 0, PROBE_PREFER_ASYNCHRONOUS = 1, PROBE_FORCE_SYNCHRONOUS = 2 } ; 207 struct of_device_id ; 207 struct acpi_device_id ; 207 struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; bool suppress_bind_attrs; enum probe_type probe_type; const struct of_device_id *of_match_table; const struct acpi_device_id *acpi_match_table; int (*probe)(struct device *); int (*remove)(struct device *); void (*shutdown)(struct device *); int (*suspend)(struct device *, pm_message_t ); int (*resume)(struct device *); const struct attribute_group **groups; const struct dev_pm_ops *pm; struct driver_private *p; } ; 357 struct class_attribute ; 357 struct class { const char *name; struct module *owner; struct class_attribute *class_attrs; const struct attribute_group **dev_groups; struct kobject *dev_kobj; int (*dev_uevent)(struct device *, struct kobj_uevent_env *); char * (*devnode)(struct device *, umode_t *); void (*class_release)(struct class *); void (*dev_release)(struct device *); int (*suspend)(struct device *, pm_message_t ); int (*resume)(struct device *); const struct kobj_ns_type_operations *ns_type; const void * (*namespace)(struct device *); const struct dev_pm_ops *pm; struct subsys_private *p; } ; 450 struct class_attribute { struct attribute attr; ssize_t (*show)(struct class *, struct class_attribute *, char *); ssize_t (*store)(struct class *, struct class_attribute *, const char *, size_t ); } ; 525 struct device_type { const char *name; const struct attribute_group **groups; int (*uevent)(struct device *, struct kobj_uevent_env *); char * (*devnode)(struct device *, umode_t *, kuid_t *, kgid_t *); void (*release)(struct device *); const struct dev_pm_ops *pm; } ; 546 struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *, struct device_attribute *, char *); ssize_t (*store)(struct device *, struct device_attribute *, const char *, size_t ); } ; 699 struct device_dma_parameters { unsigned int max_segment_size; unsigned long segment_boundary_mask; } ; 708 struct dma_coherent_mem ; 708 struct cma ; 708 struct device { struct device *parent; struct device_private *p; struct kobject kobj; const char *init_name; const struct device_type *type; struct mutex mutex; struct bus_type *bus; struct device_driver *driver; void *platform_data; void *driver_data; struct dev_pm_info power; struct dev_pm_domain *pm_domain; struct irq_domain *msi_domain; struct dev_pin_info *pins; struct list_head msi_list; int numa_node; u64 *dma_mask; u64 coherent_dma_mask; unsigned long dma_pfn_offset; struct device_dma_parameters *dma_parms; struct list_head dma_pools; struct dma_coherent_mem *dma_mem; struct cma *cma_area; struct dev_archdata archdata; struct device_node *of_node; struct fwnode_handle *fwnode; dev_t devt; u32 id; spinlock_t devres_lock; struct list_head devres_head; struct klist_node knode_class; struct class *class; const struct attribute_group **groups; void (*release)(struct device *); struct iommu_group *iommu_group; bool offline_disabled; bool offline; } ; 862 struct wakeup_source { const char *name; struct list_head entry; spinlock_t lock; struct wake_irq *wakeirq; struct timer_list timer; unsigned long timer_expires; ktime_t total_time; ktime_t max_time; ktime_t last_time; ktime_t start_prevent_time; ktime_t prevent_sleep_time; unsigned long event_count; unsigned long active_count; unsigned long relax_count; unsigned long expire_count; unsigned long wakeup_count; bool active; bool autosleep_enabled; } ; 82 struct disk_stats { unsigned long sectors[2U]; unsigned long ios[2U]; unsigned long merges[2U]; unsigned long ticks[2U]; unsigned long io_ticks; unsigned long time_in_queue; } ; 91 struct partition_meta_info { char uuid[37U]; u8 volname[64U]; } ; 103 struct hd_struct { sector_t start_sect; sector_t nr_sects; seqcount_t nr_sects_seq; sector_t alignment_offset; unsigned int discard_alignment; struct device __dev; struct kobject *holder_dir; int policy; int partno; struct partition_meta_info *info; int make_it_fail; unsigned long stamp; atomic_t in_flight[2U]; struct disk_stats *dkstats; struct percpu_ref ref; struct callback_head callback_head; } ; 157 struct disk_part_tbl { struct callback_head callback_head; int len; struct hd_struct *last_lookup; struct hd_struct *part[]; } ; 164 struct disk_events ; 165 struct badblocks ; 166 struct blk_integrity_profile ; 166 struct blk_integrity { struct blk_integrity_profile *profile; unsigned char flags; unsigned char tuple_size; unsigned char interval_exp; unsigned char tag_size; } ; 177 struct timer_rand_state ; 177 struct gendisk { int major; int first_minor; int minors; char disk_name[32U]; char * (*devnode)(struct gendisk *, umode_t *); unsigned int events; unsigned int async_events; struct disk_part_tbl *part_tbl; struct hd_struct part0; const struct block_device_operations *fops; struct request_queue *queue; void *private_data; int flags; struct device *driverfs_dev; struct kobject *slave_dir; struct timer_rand_state *random; atomic_t sync_io; struct disk_events *ev; struct kobject integrity_kobj; int node_id; struct badblocks *bb; } ; 13 typedef unsigned long kernel_ulong_t; 14 struct pci_device_id { __u32 vendor; __u32 device; __u32 subvendor; __u32 subdevice; __u32 class; __u32 class_mask; kernel_ulong_t driver_data; } ; 186 struct acpi_device_id { __u8 id[9U]; kernel_ulong_t driver_data; __u32 cls; __u32 cls_msk; } ; 229 struct of_device_id { char name[32U]; char type[32U]; char compatible[128U]; const void *data; } ; 70 struct hotplug_slot ; 70 struct pci_slot { struct pci_bus *bus; struct list_head list; struct hotplug_slot *hotplug; unsigned char number; struct kobject kobj; } ; 104 typedef int pci_power_t; 131 typedef unsigned int pci_channel_state_t; 132 enum pci_channel_state { pci_channel_io_normal = 1, pci_channel_io_frozen = 2, pci_channel_io_perm_failure = 3 } ; 157 typedef unsigned short pci_dev_flags_t; 184 typedef unsigned short pci_bus_flags_t; 241 struct pcie_link_state ; 242 struct pci_vpd ; 243 struct pci_sriov ; 245 struct pci_driver ; 245 union __anonunion____missing_field_name_346 { struct pci_sriov *sriov; struct pci_dev *physfn; } ; 245 struct pci_dev { struct list_head bus_list; struct pci_bus *bus; struct pci_bus *subordinate; void *sysdata; struct proc_dir_entry *procent; struct pci_slot *slot; unsigned int devfn; unsigned short vendor; unsigned short device; unsigned short subsystem_vendor; unsigned short subsystem_device; unsigned int class; u8 revision; u8 hdr_type; u8 pcie_cap; u8 msi_cap; u8 msix_cap; unsigned char pcie_mpss; u8 rom_base_reg; u8 pin; u16 pcie_flags_reg; unsigned long *dma_alias_mask; struct pci_driver *driver; u64 dma_mask; struct device_dma_parameters dma_parms; pci_power_t current_state; u8 pm_cap; unsigned char pme_support; unsigned char pme_interrupt; unsigned char pme_poll; unsigned char d1_support; unsigned char d2_support; unsigned char no_d1d2; unsigned char no_d3cold; unsigned char d3cold_allowed; unsigned char mmio_always_on; unsigned char wakeup_prepared; unsigned char runtime_d3cold; unsigned char ignore_hotplug; unsigned int d3_delay; unsigned int d3cold_delay; struct pcie_link_state *link_state; pci_channel_state_t error_state; struct device dev; int cfg_size; unsigned int irq; struct resource resource[17U]; bool match_driver; unsigned char transparent; unsigned char multifunction; unsigned char is_added; unsigned char is_busmaster; unsigned char no_msi; unsigned char no_64bit_msi; unsigned char block_cfg_access; unsigned char broken_parity_status; unsigned char irq_reroute_variant; unsigned char msi_enabled; unsigned char msix_enabled; unsigned char ari_enabled; unsigned char ats_enabled; unsigned char is_managed; unsigned char needs_freset; unsigned char state_saved; unsigned char is_physfn; unsigned char is_virtfn; unsigned char reset_fn; unsigned char is_hotplug_bridge; unsigned char __aer_firmware_first_valid; unsigned char __aer_firmware_first; unsigned char broken_intx_masking; unsigned char io_window_1k; unsigned char irq_managed; unsigned char has_secondary_link; unsigned char non_compliant_bars; pci_dev_flags_t dev_flags; atomic_t enable_cnt; u32 saved_config_space[16U]; struct hlist_head saved_cap_space; struct bin_attribute *rom_attr; int rom_attr_enabled; struct bin_attribute *res_attr[17U]; struct bin_attribute *res_attr_wc[17U]; const struct attribute_group **msi_irq_groups; struct pci_vpd *vpd; union __anonunion____missing_field_name_346 __annonCompField85; u16 ats_cap; u8 ats_stu; atomic_t ats_ref_cnt; phys_addr_t rom; size_t romlen; char *driver_override; } ; 446 struct pci_ops ; 446 struct msi_controller ; 446 struct pci_bus { struct list_head node; struct pci_bus *parent; struct list_head children; struct list_head devices; struct pci_dev *self; struct list_head slots; struct resource *resource[4U]; struct list_head resources; struct resource busn_res; struct pci_ops *ops; struct msi_controller *msi; void *sysdata; struct proc_dir_entry *procdir; unsigned char number; unsigned char primary; unsigned char max_bus_speed; unsigned char cur_bus_speed; char name[48U]; unsigned short bridge_ctl; pci_bus_flags_t bus_flags; struct device *bridge; struct device dev; struct bin_attribute *legacy_io; struct bin_attribute *legacy_mem; unsigned char is_added; } ; 570 struct pci_ops { int (*add_bus)(struct pci_bus *); void (*remove_bus)(struct pci_bus *); void * (*map_bus)(struct pci_bus *, unsigned int, int); int (*read)(struct pci_bus *, unsigned int, int, int, u32 *); int (*write)(struct pci_bus *, unsigned int, int, int, u32 ); } ; 600 struct pci_dynids { spinlock_t lock; struct list_head list; } ; 614 typedef unsigned int pci_ers_result_t; 624 struct pci_error_handlers { pci_ers_result_t (*error_detected)(struct pci_dev *, enum pci_channel_state ); pci_ers_result_t (*mmio_enabled)(struct pci_dev *); pci_ers_result_t (*link_reset)(struct pci_dev *); pci_ers_result_t (*slot_reset)(struct pci_dev *); void (*reset_notify)(struct pci_dev *, bool ); void (*resume)(struct pci_dev *); } ; 657 struct pci_driver { struct list_head node; const char *name; const struct pci_device_id *id_table; int (*probe)(struct pci_dev *, const struct pci_device_id *); void (*remove)(struct pci_dev *); int (*suspend)(struct pci_dev *, pm_message_t ); int (*suspend_late)(struct pci_dev *, pm_message_t ); int (*resume_early)(struct pci_dev *); int (*resume)(struct pci_dev *); void (*shutdown)(struct pci_dev *); int (*sriov_configure)(struct pci_dev *, int); const struct pci_error_handlers *err_handler; struct device_driver driver; struct pci_dynids dynids; } ; 1238 struct scatterlist { unsigned long sg_magic; unsigned long page_link; unsigned int offset; unsigned int length; dma_addr_t dma_address; unsigned int dma_length; } ; 21 struct sg_table { struct scatterlist *sgl; unsigned int nents; unsigned int orig_nents; } ; 2040 struct dma_attrs { unsigned long flags[1U]; } ; 89 enum dma_data_direction { DMA_BIDIRECTIONAL = 0, DMA_TO_DEVICE = 1, DMA_FROM_DEVICE = 2, DMA_NONE = 3 } ; 158 struct dma_map_ops { void * (*alloc)(struct device *, size_t , dma_addr_t *, gfp_t , struct dma_attrs *); void (*free)(struct device *, size_t , void *, dma_addr_t , struct dma_attrs *); int (*mmap)(struct device *, struct vm_area_struct *, void *, dma_addr_t , size_t , struct dma_attrs *); int (*get_sgtable)(struct device *, struct sg_table *, void *, dma_addr_t , size_t , struct dma_attrs *); dma_addr_t (*map_page)(struct device *, struct page *, unsigned long, size_t , enum dma_data_direction , struct dma_attrs *); void (*unmap_page)(struct device *, dma_addr_t , size_t , enum dma_data_direction , struct dma_attrs *); int (*map_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *); void (*unmap_sg)(struct device *, struct scatterlist *, int, enum dma_data_direction , struct dma_attrs *); void (*sync_single_for_cpu)(struct device *, dma_addr_t , size_t , enum dma_data_direction ); void (*sync_single_for_device)(struct device *, dma_addr_t , size_t , enum dma_data_direction ); void (*sync_sg_for_cpu)(struct device *, struct scatterlist *, int, enum dma_data_direction ); void (*sync_sg_for_device)(struct device *, struct scatterlist *, int, enum dma_data_direction ); int (*mapping_error)(struct device *, dma_addr_t ); int (*dma_supported)(struct device *, u64 ); int (*set_dma_mask)(struct device *, u64 ); int is_phys; } ; 72 struct fprop_local_percpu { struct percpu_counter events; unsigned int period; raw_spinlock_t lock; } ; 32 typedef int congested_fn(void *, int); 41 struct bdi_writeback_congested { unsigned long state; atomic_t refcnt; struct backing_dev_info *bdi; int blkcg_id; struct rb_node rb_node; } ; 60 union __anonunion____missing_field_name_347 { struct work_struct release_work; struct callback_head rcu; } ; 60 struct bdi_writeback { struct backing_dev_info *bdi; unsigned long state; unsigned long last_old_flush; struct list_head b_dirty; struct list_head b_io; struct list_head b_more_io; struct list_head b_dirty_time; spinlock_t list_lock; struct percpu_counter stat[4U]; struct bdi_writeback_congested *congested; unsigned long bw_time_stamp; unsigned long dirtied_stamp; unsigned long written_stamp; unsigned long write_bandwidth; unsigned long avg_write_bandwidth; unsigned long dirty_ratelimit; unsigned long balanced_dirty_ratelimit; struct fprop_local_percpu completions; int dirty_exceeded; spinlock_t work_lock; struct list_head work_list; struct delayed_work dwork; struct list_head bdi_node; struct percpu_ref refcnt; struct fprop_local_percpu memcg_completions; struct cgroup_subsys_state *memcg_css; struct cgroup_subsys_state *blkcg_css; struct list_head memcg_node; struct list_head blkcg_node; union __anonunion____missing_field_name_347 __annonCompField86; } ; 134 struct backing_dev_info { struct list_head bdi_list; unsigned long ra_pages; unsigned int capabilities; congested_fn *congested_fn; void *congested_data; char *name; unsigned int min_ratio; unsigned int max_ratio; unsigned int max_prop_frac; atomic_long_t tot_write_bandwidth; struct bdi_writeback wb; struct list_head wb_list; struct radix_tree_root cgwb_tree; struct rb_root cgwb_congested_tree; atomic_t usage_cnt; wait_queue_head_t wb_waitq; struct device *dev; struct timer_list laptop_mode_wb_timer; struct dentry *debug_dir; struct dentry *debug_stats; } ; 12 typedef void * mempool_alloc_t(gfp_t , void *); 13 typedef void mempool_free_t(void *, void *); 14 struct mempool_s { spinlock_t lock; int min_nr; int curr_nr; void **elements; void *pool_data; mempool_alloc_t *alloc; mempool_free_t *free; wait_queue_head_t wait; } ; 25 typedef struct mempool_s mempool_t; 79 union __anonunion____missing_field_name_348 { struct list_head q_node; struct kmem_cache *__rcu_icq_cache; } ; 79 union __anonunion____missing_field_name_349 { struct hlist_node ioc_node; struct callback_head __rcu_head; } ; 79 struct io_cq { struct request_queue *q; struct io_context *ioc; union __anonunion____missing_field_name_348 __annonCompField87; union __anonunion____missing_field_name_349 __annonCompField88; unsigned int flags; } ; 92 struct io_context { atomic_long_t refcount; atomic_t active_ref; atomic_t nr_tasks; spinlock_t lock; unsigned short ioprio; int nr_batch_requests; unsigned long last_waited; struct radix_tree_root icq_tree; struct io_cq *icq_hint; struct hlist_head icq_list; struct work_struct release_work; } ; 352 struct bio_integrity_payload { struct bio *bip_bio; struct bvec_iter bip_iter; bio_end_io_t *bip_end_io; unsigned short bip_slab; unsigned short bip_vcnt; unsigned short bip_max_vcnt; unsigned short bip_flags; struct work_struct bip_work; struct bio_vec *bip_vec; struct bio_vec bip_inline_vecs[0U]; } ; 583 struct bio_list { struct bio *head; struct bio *tail; } ; 715 struct bio_set { struct kmem_cache *bio_slab; unsigned int front_pad; mempool_t *bio_pool; mempool_t *bvec_pool; mempool_t *bio_integrity_pool; mempool_t *bvec_integrity_pool; spinlock_t rescue_lock; struct bio_list rescue_list; struct work_struct rescue_work; struct workqueue_struct *rescue_workqueue; } ; 64 struct bsg_class_device { struct device *class_dev; struct device *parent; int minor; struct request_queue *queue; struct kref ref; void (*release)(struct device *); } ; 22 struct elevator_queue ; 24 struct request ; 26 struct bsg_job ; 27 struct blkcg_gq ; 28 struct blk_flush_queue ; 29 struct pr_ops ; 51 typedef void rq_end_io_fn(struct request *, int); 52 struct request_list { struct request_queue *q; struct blkcg_gq *blkg; int count[2U]; int starved[2U]; mempool_t *rq_pool; wait_queue_head_t wait[2U]; unsigned int flags; } ; 77 union __anonunion____missing_field_name_350 { struct call_single_data csd; unsigned long fifo_time; } ; 77 struct blk_mq_ctx ; 77 union __anonunion____missing_field_name_351 { struct hlist_node hash; struct list_head ipi_list; } ; 77 union __anonunion____missing_field_name_352 { struct rb_node rb_node; void *completion_data; } ; 77 struct __anonstruct_elv_354 { struct io_cq *icq; void *priv[2U]; } ; 77 struct __anonstruct_flush_355 { unsigned int seq; struct list_head list; rq_end_io_fn *saved_end_io; } ; 77 union __anonunion____missing_field_name_353 { struct __anonstruct_elv_354 elv; struct __anonstruct_flush_355 flush; } ; 77 struct request { struct list_head queuelist; union __anonunion____missing_field_name_350 __annonCompField89; struct request_queue *q; struct blk_mq_ctx *mq_ctx; u64 cmd_flags; unsigned int cmd_type; unsigned long atomic_flags; int cpu; unsigned int __data_len; sector_t __sector; struct bio *bio; struct bio *biotail; union __anonunion____missing_field_name_351 __annonCompField90; union __anonunion____missing_field_name_352 __annonCompField91; union __anonunion____missing_field_name_353 __annonCompField92; struct gendisk *rq_disk; struct hd_struct *part; unsigned long start_time; struct request_list *rl; unsigned long long start_time_ns; unsigned long long io_start_time_ns; unsigned short nr_phys_segments; unsigned short nr_integrity_segments; unsigned short ioprio; void *special; int tag; int errors; unsigned char __cmd[16U]; unsigned char *cmd; unsigned short cmd_len; unsigned int extra_len; unsigned int sense_len; unsigned int resid_len; void *sense; unsigned long deadline; struct list_head timeout_list; unsigned int timeout; int retries; rq_end_io_fn *end_io; void *end_io_data; struct request *next_rq; } ; 117 struct elevator_type ; 12 typedef int elevator_merge_fn(struct request_queue *, struct request **, struct bio *); 15 typedef void elevator_merge_req_fn(struct request_queue *, struct request *, struct request *); 17 typedef void elevator_merged_fn(struct request_queue *, struct request *, int); 19 typedef int elevator_allow_merge_fn(struct request_queue *, struct request *, struct bio *); 21 typedef void elevator_bio_merged_fn(struct request_queue *, struct request *, struct bio *); 24 typedef int elevator_dispatch_fn(struct request_queue *, int); 26 typedef void elevator_add_req_fn(struct request_queue *, struct request *); 27 typedef struct request * elevator_request_list_fn(struct request_queue *, struct request *); 28 typedef void elevator_completed_req_fn(struct request_queue *, struct request *); 29 typedef int elevator_may_queue_fn(struct request_queue *, int); 31 typedef void elevator_init_icq_fn(struct io_cq *); 32 typedef void elevator_exit_icq_fn(struct io_cq *); 33 typedef int elevator_set_req_fn(struct request_queue *, struct request *, struct bio *, gfp_t ); 35 typedef void elevator_put_req_fn(struct request *); 36 typedef void elevator_activate_req_fn(struct request_queue *, struct request *); 37 typedef void elevator_deactivate_req_fn(struct request_queue *, struct request *); 39 typedef int elevator_init_fn(struct request_queue *, struct elevator_type *); 41 typedef void elevator_exit_fn(struct elevator_queue *); 42 typedef void elevator_registered_fn(struct request_queue *); 43 struct elevator_ops { elevator_merge_fn *elevator_merge_fn; elevator_merged_fn *elevator_merged_fn; elevator_merge_req_fn *elevator_merge_req_fn; elevator_allow_merge_fn *elevator_allow_merge_fn; elevator_bio_merged_fn *elevator_bio_merged_fn; elevator_dispatch_fn *elevator_dispatch_fn; elevator_add_req_fn *elevator_add_req_fn; elevator_activate_req_fn *elevator_activate_req_fn; elevator_deactivate_req_fn *elevator_deactivate_req_fn; elevator_completed_req_fn *elevator_completed_req_fn; elevator_request_list_fn *elevator_former_req_fn; elevator_request_list_fn *elevator_latter_req_fn; elevator_init_icq_fn *elevator_init_icq_fn; elevator_exit_icq_fn *elevator_exit_icq_fn; elevator_set_req_fn *elevator_set_req_fn; elevator_put_req_fn *elevator_put_req_fn; elevator_may_queue_fn *elevator_may_queue_fn; elevator_init_fn *elevator_init_fn; elevator_exit_fn *elevator_exit_fn; elevator_registered_fn *elevator_registered_fn; } ; 74 struct elv_fs_entry { struct attribute attr; ssize_t (*show)(struct elevator_queue *, char *); ssize_t (*store)(struct elevator_queue *, const char *, size_t ); } ; 82 struct elevator_type { struct kmem_cache *icq_cache; struct elevator_ops ops; size_t icq_size; size_t icq_align; struct elv_fs_entry *elevator_attrs; char elevator_name[16U]; struct module *elevator_owner; char icq_cache_name[21U]; struct list_head list; } ; 103 struct elevator_queue { struct elevator_type *type; void *elevator_data; struct kobject kobj; struct mutex sysfs_lock; unsigned char registered; struct hlist_head hash[64U]; } ; 212 typedef void request_fn_proc(struct request_queue *); 213 typedef blk_qc_t make_request_fn(struct request_queue *, struct bio *); 214 typedef int prep_rq_fn(struct request_queue *, struct request *); 215 typedef void unprep_rq_fn(struct request_queue *, struct request *); 218 typedef void softirq_done_fn(struct request *); 219 typedef int dma_drain_needed_fn(struct request *); 220 typedef int lld_busy_fn(struct request_queue *); 221 typedef int bsg_job_fn(struct bsg_job *); 222 enum blk_eh_timer_return { BLK_EH_NOT_HANDLED = 0, BLK_EH_HANDLED = 1, BLK_EH_RESET_TIMER = 2 } ; 229 typedef enum blk_eh_timer_return rq_timed_out_fn(struct request *); 235 struct blk_queue_tag { struct request **tag_index; unsigned long *tag_map; int busy; int max_depth; int real_max_depth; atomic_t refcnt; int alloc_policy; int next_tag; } ; 246 struct queue_limits { unsigned long bounce_pfn; unsigned long seg_boundary_mask; unsigned long virt_boundary_mask; unsigned int max_hw_sectors; unsigned int max_dev_sectors; unsigned int chunk_sectors; unsigned int max_sectors; unsigned int max_segment_size; unsigned int physical_block_size; unsigned int alignment_offset; unsigned int io_min; unsigned int io_opt; unsigned int max_discard_sectors; unsigned int max_hw_discard_sectors; unsigned int max_write_same_sectors; unsigned int discard_granularity; unsigned int discard_alignment; unsigned short logical_block_size; unsigned short max_segments; unsigned short max_integrity_segments; unsigned char misaligned; unsigned char discard_misaligned; unsigned char cluster; unsigned char discard_zeroes_data; unsigned char raid_partial_stripes_expensive; } ; 282 struct blk_mq_ops ; 282 struct blk_mq_hw_ctx ; 282 struct throtl_data ; 282 struct blk_mq_tag_set ; 282 struct request_queue { struct list_head queue_head; struct request *last_merge; struct elevator_queue *elevator; int nr_rqs[2U]; int nr_rqs_elvpriv; struct request_list root_rl; request_fn_proc *request_fn; make_request_fn *make_request_fn; prep_rq_fn *prep_rq_fn; unprep_rq_fn *unprep_rq_fn; softirq_done_fn *softirq_done_fn; rq_timed_out_fn *rq_timed_out_fn; dma_drain_needed_fn *dma_drain_needed; lld_busy_fn *lld_busy_fn; struct blk_mq_ops *mq_ops; unsigned int *mq_map; struct blk_mq_ctx *queue_ctx; unsigned int nr_queues; struct blk_mq_hw_ctx **queue_hw_ctx; unsigned int nr_hw_queues; sector_t end_sector; struct request *boundary_rq; struct delayed_work delay_work; struct backing_dev_info backing_dev_info; void *queuedata; unsigned long queue_flags; int id; gfp_t bounce_gfp; spinlock_t __queue_lock; spinlock_t *queue_lock; struct kobject kobj; struct kobject mq_kobj; struct blk_integrity integrity; struct device *dev; int rpm_status; unsigned int nr_pending; unsigned long nr_requests; unsigned int nr_congestion_on; unsigned int nr_congestion_off; unsigned int nr_batching; unsigned int dma_drain_size; void *dma_drain_buffer; unsigned int dma_pad_mask; unsigned int dma_alignment; struct blk_queue_tag *queue_tags; struct list_head tag_busy_list; unsigned int nr_sorted; unsigned int in_flight[2U]; unsigned int request_fn_active; unsigned int rq_timeout; struct timer_list timeout; struct work_struct timeout_work; struct list_head timeout_list; struct list_head icq_list; unsigned long blkcg_pols[1U]; struct blkcg_gq *root_blkg; struct list_head blkg_list; struct queue_limits limits; unsigned int sg_timeout; unsigned int sg_reserved_size; int node; struct blk_flush_queue *fq; struct list_head requeue_list; spinlock_t requeue_lock; struct work_struct requeue_work; struct mutex sysfs_lock; int bypass_depth; atomic_t mq_freeze_depth; bsg_job_fn *bsg_job_fn; int bsg_job_size; struct bsg_class_device bsg_dev; struct throtl_data *td; struct callback_head callback_head; wait_queue_head_t mq_freeze_wq; struct percpu_ref q_usage_counter; struct list_head all_q_node; struct blk_mq_tag_set *tag_set; struct list_head tag_set_list; struct bio_set *bio_split; bool mq_sysfs_init_done; } ; 1046 struct blk_plug { struct list_head list; struct list_head mq_list; struct list_head cb_list; } ; 1477 struct blk_integrity_iter { void *prot_buf; void *data_buf; sector_t seed; unsigned int data_size; unsigned short interval; const char *disk_name; } ; 1506 typedef int integrity_processing_fn(struct blk_integrity_iter *); 1507 struct blk_integrity_profile { integrity_processing_fn *generate_fn; integrity_processing_fn *verify_fn; const char *name; } ; 1666 struct block_device_operations { int (*open)(struct block_device *, fmode_t ); void (*release)(struct gendisk *, fmode_t ); int (*rw_page)(struct block_device *, sector_t , struct page *, int); int (*ioctl)(struct block_device *, fmode_t , unsigned int, unsigned long); int (*compat_ioctl)(struct block_device *, fmode_t , unsigned int, unsigned long); long int (*direct_access)(struct block_device *, sector_t , void **, pfn_t *, long); unsigned int (*check_events)(struct gendisk *, unsigned int); int (*media_changed)(struct gendisk *); void (*unlock_native_capacity)(struct gendisk *); int (*revalidate_disk)(struct gendisk *); int (*getgeo)(struct block_device *, struct hd_geometry *); void (*swap_slot_free_notify)(struct block_device *, unsigned long); struct module *owner; const struct pr_ops *pr_ops; } ; 272 struct request_sense ; 696 struct request_sense { unsigned char error_code; unsigned char valid; __u8 segment_number; unsigned char sense_key; unsigned char reserved2; unsigned char ili; unsigned char reserved1; __u8 information[4U]; __u8 add_sense_len; __u8 command_info[4U]; __u8 asc; __u8 ascq; __u8 fruc; __u8 sks[3U]; __u8 asb[46U]; } ; 328 union __anonunion____missing_field_name_364 { unsigned long error_addr; unsigned long feature_addr; } ; 328 union __anonunion____missing_field_name_365 { unsigned long status_addr; unsigned long command_addr; } ; 328 struct ide_io_ports { unsigned long data_addr; union __anonunion____missing_field_name_364 __annonCompField93; unsigned long nsect_addr; unsigned long lbal_addr; unsigned long lbam_addr; unsigned long lbah_addr; unsigned long device_addr; union __anonunion____missing_field_name_365 __annonCompField94; unsigned long ctl_addr; unsigned long irq_addr; } ; 179 typedef u8 hwif_chipset_t; 212 enum ldv_29544 { ide_stopped = 0, ide_started = 1 } ; 235 typedef enum ldv_29544 ide_startstop_t; 270 union __anonunion____missing_field_name_367 { u8 error; u8 feature; } ; 270 union __anonunion____missing_field_name_368 { u8 status; u8 command; } ; 270 struct ide_taskfile { u8 data; union __anonunion____missing_field_name_367 __annonCompField96; u8 nsect; u8 lbal; u8 lbam; u8 lbah; u8 device; union __anonunion____missing_field_name_368 __annonCompField97; } ; 296 struct __anonstruct_out_370 { u8 tf; u8 hob; } ; 296 struct __anonstruct_in_371 { u8 tf; u8 hob; } ; 296 struct __anonstruct_valid_369 { struct __anonstruct_out_370 out; struct __anonstruct_in_371 in; } ; 296 struct ide_cmd { struct ide_taskfile tf; struct ide_taskfile hob; struct __anonstruct_valid_369 valid; u16 tf_flags; u8 ftf_flags; int protocol; int sg_nents; int orig_sg_nents; int sg_dma_direction; unsigned int nbytes; unsigned int nleft; unsigned int last_xfer_len; struct scatterlist *cursg; unsigned int cursg_ofs; struct request *rq; } ; 334 struct ide_atapi_pc { u8 c[12U]; int retries; int error; int req_xfer; struct request *rq; unsigned long flags; unsigned long timeout; } ; 360 struct ide_devset ; 361 struct ide_driver ; 362 struct ide_acpi_drive_link ; 363 struct ide_acpi_hwif_link ; 364 struct ide_drive_s ; 365 struct ide_disk_ops { int (*check)(struct ide_drive_s *, const char *); int (*get_capacity)(struct ide_drive_s *); void (*unlock_native_capacity)(struct ide_drive_s *); void (*setup)(struct ide_drive_s *); void (*flush)(struct ide_drive_s *); int (*init_media)(struct ide_drive_s *, struct gendisk *); int (*set_doorlock)(struct ide_drive_s *, struct gendisk *, int); ide_startstop_t (*do_request)(struct ide_drive_s *, struct request *, sector_t ); int (*ioctl)(struct ide_drive_s *, struct block_device *, fmode_t , unsigned int, unsigned long); } ; 446 struct ide_proc_devset ; 446 struct hwif_s ; 446 struct ide_drive_s { char name[4U]; char driver_req[10U]; struct request_queue *queue; struct request *rq; void *driver_data; u16 *id; struct proc_dir_entry *proc; const struct ide_proc_devset *settings; struct hwif_s *hwif; const struct ide_disk_ops *disk_ops; unsigned long dev_flags; unsigned long sleep; unsigned long timeout; u8 special_flags; u8 select; u8 retry_pio; u8 waiting_for_dma; u8 dma; u8 init_speed; u8 current_speed; u8 desired_speed; u8 pio_mode; u8 dma_mode; u8 dn; u8 acoustic; u8 media; u8 ready_stat; u8 mult_count; u8 mult_req; u8 io_32bit; u8 bad_wstat; u8 head; u8 sect; u8 bios_head; u8 bios_sect; u8 pc_delay; unsigned int bios_cyl; unsigned int cyl; void *drive_data; unsigned int failures; unsigned int max_failures; u64 probed_capacity; u64 capacity64; int lun; int crc_count; unsigned long debug_mask; struct ide_acpi_drive_link *acpidata; struct list_head list; struct device gendev; struct completion gendev_rel_comp; struct ide_atapi_pc *pc; struct ide_atapi_pc *failed_pc; int (*pc_callback)(struct ide_drive_s *, int); ide_startstop_t (*irq_handler)(struct ide_drive_s *); unsigned long atapi_flags; struct ide_atapi_pc request_sense_pc; bool sense_rq_armed; struct request sense_rq; struct request_sense sense_data; } ; 586 typedef struct ide_drive_s ide_drive_t; 588 struct ide_tp_ops { void (*exec_command)(struct hwif_s *, u8 ); u8 (*read_status)(struct hwif_s *); u8 (*read_altstatus)(struct hwif_s *); void (*write_devctl)(struct hwif_s *, u8 ); void (*dev_select)(ide_drive_t *); void (*tf_load)(ide_drive_t *, struct ide_taskfile *, u8 ); void (*tf_read)(ide_drive_t *, struct ide_taskfile *, u8 ); void (*input_data)(ide_drive_t *, struct ide_cmd *, void *, unsigned int); void (*output_data)(ide_drive_t *, struct ide_cmd *, void *, unsigned int); } ; 615 struct ide_port_ops { void (*init_dev)(ide_drive_t *); void (*set_pio_mode)(struct hwif_s *, ide_drive_t *); void (*set_dma_mode)(struct hwif_s *, ide_drive_t *); int (*reset_poll)(ide_drive_t *); void (*pre_reset)(ide_drive_t *); void (*resetproc)(ide_drive_t *); void (*maskproc)(ide_drive_t *, int); void (*quirkproc)(ide_drive_t *); void (*clear_irq)(ide_drive_t *); int (*test_irq)(struct hwif_s *); u8 (*mdma_filter)(ide_drive_t *); u8 (*udma_filter)(ide_drive_t *); u8 (*cable_detect)(struct hwif_s *); } ; 651 struct ide_dma_ops { void (*dma_host_set)(struct ide_drive_s *, int); int (*dma_setup)(struct ide_drive_s *, struct ide_cmd *); void (*dma_start)(struct ide_drive_s *); int (*dma_end)(struct ide_drive_s *); int (*dma_test_irq)(struct ide_drive_s *); void (*dma_lost_irq)(struct ide_drive_s *); int (*dma_check)(struct ide_drive_s *, struct ide_cmd *); int (*dma_timer_expiry)(struct ide_drive_s *); void (*dma_clear)(struct ide_drive_s *); u8 (*dma_sff_read_status)(struct hwif_s *); } ; 673 struct ide_host ; 674 struct hwif_s { struct hwif_s *mate; struct proc_dir_entry *proc; struct ide_host *host; char name[6U]; struct ide_io_ports io_ports; unsigned long sata_scr[3U]; ide_drive_t *devices[3U]; unsigned long port_flags; u8 major; u8 index; u8 channel; u32 host_flags; u8 pio_mask; u8 ultra_mask; u8 mwdma_mask; u8 swdma_mask; u8 cbl; hwif_chipset_t chipset; struct device *dev; void (*rw_disk)(ide_drive_t *, struct request *); const struct ide_tp_ops *tp_ops; const struct ide_port_ops *port_ops; const struct ide_dma_ops *dma_ops; unsigned int *dmatable_cpu; dma_addr_t dmatable_dma; int prd_max_nents; int prd_ent_size; struct scatterlist *sg_table; int sg_max_nents; struct ide_cmd cmd; int rqsize; int irq; unsigned long dma_base; unsigned long config_data; unsigned long select_data; unsigned long extra_base; unsigned int extra_ports; unsigned char present; unsigned char busy; struct device gendev; struct device *portdev; struct completion gendev_rel_comp; void *hwif_data; struct ide_acpi_hwif_link *acpidata; ide_startstop_t (*handler)(ide_drive_t *); unsigned char polling; ide_drive_t *cur_dev; struct request *rq; struct timer_list timer; unsigned long poll_timeout; int (*expiry)(ide_drive_t *); int req_gen; int req_gen_timer; spinlock_t lock; } ; 780 typedef struct hwif_s ide_hwif_t; 781 struct ide_host { ide_hwif_t *ports[5U]; unsigned int n_ports; struct device *dev[2U]; int (*init_chipset)(struct pci_dev *); void (*get_lock)(irqreturn_t (*)(int, void *), void *); void (*release_lock)(); irqreturn_t (*irq_handler)(int, void *); unsigned long host_flags; int irq_flags; void *host_priv; ide_hwif_t *cur_port; volatile unsigned long host_busy; } ; 819 struct ide_devset { int (*get)(ide_drive_t *); int (*set)(ide_drive_t *, int); unsigned int flags; } ; 894 struct ide_proc_devset { const char *name; const struct ide_devset *setting; int min; int max; int (*mulf)(ide_drive_t *); int (*divf)(ide_drive_t *); } ; 934 struct __anonstruct_ide_proc_entry_t_372 { const char *name; umode_t mode; const struct file_operations *proc_fops; } ; 934 typedef struct __anonstruct_ide_proc_entry_t_372 ide_proc_entry_t; 1019 struct ide_driver { const char *version; ide_startstop_t (*do_request)(ide_drive_t *, struct request *, sector_t ); struct device_driver gen_driver; int (*probe)(ide_drive_t *); void (*remove)(ide_drive_t *); void (*resume)(ide_drive_t *); void (*shutdown)(ide_drive_t *); ide_proc_entry_t * (*proc_entries)(ide_drive_t *); const struct ide_proc_devset * (*proc_devsets)(ide_drive_t *); } ; 9 struct mtop { short mt_op; int mt_count; } ; 23 struct mtget { long mt_type; long mt_resid; long mt_dsreg; long mt_gstat; long mt_erreg; __kernel_daddr_t mt_fileno; __kernel_daddr_t mt_blkno; } ; 85 struct mtpos { long mt_blkno; } ; 131 struct ide_tape_obj { ide_drive_t *drive; struct ide_driver *driver; struct gendisk *disk; struct device dev; struct ide_atapi_pc queued_pc; bool postponed_rq; unsigned long dsc_polling_start; struct timer_list dsc_timer; unsigned long best_dsc_rw_freq; unsigned long dsc_poll_freq; unsigned long dsc_timeout; u8 partition; unsigned int first_frame; u8 sense_key; u8 asc; u8 ascq; unsigned int minor; char name[4U]; u8 chrdev_dir; unsigned short blk_size; int user_bs_factor; u8 caps[20U]; int buffer_size; void *buf; void *cur; size_t valid; unsigned long avg_time; int avg_size; int avg_speed; int door_locked; char drv_write_prot; char write_prot; } ; 219 typedef struct ide_tape_obj idetape_tape_t; 1034 struct idetape_config { int dsc_rw_frequency; int dsc_media_access_frequency; int nr_stages; } ; 48 typedef int ldv_func_ret_type; 1 unsigned long int __builtin_object_size(void *, int); 1 long int __builtin_expect(long, long); 33 extern struct module __this_module; 72 void set_bit(long nr, volatile unsigned long *addr); 110 void clear_bit(long nr, volatile unsigned long *addr); 204 int test_and_set_bit(long nr, volatile unsigned long *addr); 250 int test_and_clear_bit(long nr, volatile unsigned long *addr); 308 int constant_test_bit(long nr, const volatile unsigned long *addr); 7 __u32 __arch_swab32(__u32 val); 46 __u16 __fswab16(__u16 val); 55 __u32 __fswab32(__u32 val); 160 __u16 __swab16p(const __u16 *p); 173 __u32 __swab32p(const __u32 *p); 79 __u32 __be32_to_cpup(const __be32 *p); 87 __u16 __be16_to_cpup(const __be16 *p); 154 int printk(const char *, ...); 255 void __might_fault(const char *, int); 3 bool ldv_is_err(const void *ptr); 11 void * ldv_create_class(); 13 void ldv_unregister_class(); 15 int ldv_register_chrdev(int major); 17 void ldv_unregister_chrdev_region(); 31 void * __memcpy(void *, const void *, size_t ); 56 void * __memset(void *, int, size_t ); 75 char * strstr(const char *, const char *); 41 bool IS_ERR(const void *ptr); 138 void mutex_lock_nested(struct mutex *, unsigned int); 174 void mutex_unlock(struct mutex *); 78 extern volatile unsigned long jiffies; 284 unsigned int jiffies_to_msecs(const unsigned long); 87 const char * kobject_name(const struct kobject *kobj); 46 void msleep(unsigned int); 964 void * lowmem_page_address(const struct page *page); 5 void kasan_check_read(const void *, unsigned int); 6 void kasan_check_write(const void *, unsigned int); 676 unsigned long int _copy_from_user(void *, const void *, unsigned int); 678 unsigned long int _copy_to_user(void *, const void *, unsigned int); 698 void __copy_from_user_overflow(); 703 void __copy_to_user_overflow(); 719 unsigned long int copy_from_user(void *to, const void *from, unsigned long n); 756 unsigned long int copy_to_user(void *to, const void *from, unsigned long n); 154 void kfree(const void *); 318 void * __kmalloc(size_t , gfp_t ); 466 void * kmalloc(size_t size, gfp_t flags); 620 void * kzalloc(size_t size, gfp_t flags); 859 unsigned int iminor(const struct inode *inode); 2426 int __register_chrdev(unsigned int, unsigned int, unsigned int, const char *, const struct file_operations *); 2429 void __unregister_chrdev(unsigned int, unsigned int, unsigned int, const char *); 2434 int ldv_register_chrdev_5(unsigned int major, const char *name, const struct file_operations *fops); 2434 int register_chrdev(unsigned int major, const char *name, const struct file_operations *fops); 2444 void ldv_unregister_chrdev_6(unsigned int major, const char *name); 2444 void unregister_chrdev(unsigned int major, const char *name); 2791 loff_t noop_llseek(struct file *, loff_t , int); 109 ssize_t seq_read(struct file *, char *, size_t , loff_t *); 110 loff_t seq_lseek(struct file *, loff_t , int); 117 void seq_printf(struct seq_file *, const char *, ...); 135 int single_open(struct file *, int (*)(struct seq_file *, void *), void *); 137 int single_release(struct inode *, struct file *); 289 int driver_register(struct device_driver *); 290 void driver_unregister(struct device_driver *); 517 void class_destroy(struct class *); 520 void ldv_class_destroy_7(struct class *ldv_func_arg1); 524 void ldv_class_destroy_8(struct class *ldv_func_arg1); 865 const char * dev_name(const struct device *dev); 875 int dev_set_name(struct device *, const char *, ...); 1003 int device_register(struct device *); 1007 void device_del(struct device *); 1072 struct device * device_create(struct class *, struct device *, dev_t , void *, const char *, ...); 1080 void device_destroy(struct class *, dev_t ); 1097 struct device * get_device(struct device *); 1098 void put_device(struct device *); 617 struct gendisk * alloc_disk(int); 619 void put_disk(struct gendisk *); 105 bool bio_has_data(struct bio *bio); 142 void * bio_data(struct bio *bio); 786 void blk_put_request(struct request *); 788 struct request * blk_get_request(struct request_queue *, int, gfp_t ); 830 int blk_rq_map_kern(struct request_queue *, struct request *, void *, unsigned int, gfp_t ); 834 int blk_execute_rq(struct request_queue *, struct gendisk *, struct request *, int); 859 unsigned int blk_rq_bytes(const struct request *rq); 871 unsigned int blk_rq_sectors(const struct request *rq); 39 void * PDE_DATA(const struct inode *); 942 void ide_proc_register_driver(ide_drive_t *, struct ide_driver *); 943 void ide_proc_unregister_driver(ide_drive_t *, struct ide_driver *); 945 extern const struct file_operations ide_capacity_proc_fops; 1042 int ide_device_get(ide_drive_t *); 1043 void ide_device_put(ide_drive_t *); 1054 int generic_ide_ioctl(ide_drive_t *, struct block_device *, unsigned int, unsigned long); 1074 void ide_fixstring(u8 *, const int, const int); 1084 ide_startstop_t ide_do_reset(ide_drive_t *); 1090 int ide_complete_rq(ide_drive_t *, int, unsigned int); 1114 int ide_check_atapi_device(ide_drive_t *, const char *); 1116 void ide_init_pc(struct ide_atapi_pc *); 1138 int ide_queue_pc_tail(ide_drive_t *, struct gendisk *, struct ide_atapi_pc *, void *, unsigned int); 1141 int ide_do_test_unit_ready(ide_drive_t *, struct gendisk *); 1142 int ide_do_start_stop(ide_drive_t *, struct gendisk *, int); 1143 int ide_set_media_lock(ide_drive_t *, struct gendisk *, int); 1145 void ide_retry_pc(ide_drive_t *); 1147 void ide_prep_sense(ide_drive_t *, struct request *); 1154 ide_startstop_t ide_issue_pc(ide_drive_t *, struct ide_cmd *); 1176 void ide_stall_queue(ide_drive_t *, unsigned long); 1183 void ide_init_disk(struct gendisk *, ide_drive_t *); 1356 void ide_map_sg(ide_drive_t *, struct ide_cmd *); 1357 void ide_init_sg_cmd(struct ide_cmd *, unsigned int); 1449 void ide_register_region(struct gendisk *); 1450 void ide_unregister_region(struct gendisk *); 1540 extern struct bus_type ide_bus_type; 27 u32 get_unaligned_be32(const void *p); 37 void put_unaligned_le16(u16 val, void *p); 42 void put_unaligned_le32(u32 val, void *p); 47 void put_unaligned_le64(u64 val, void *p); 8 void __bad_unaligned_access_size(); 221 struct mutex ide_tape_mutex = { { 1 }, { { { { { 0 } }, 3735899821U, 4294967295U, (void *)-1, { 0, { 0, 0 }, "ide_tape_mutex.wait_lock", 0, 0UL } } } }, { &(ide_tape_mutex.wait_list), &(ide_tape_mutex.wait_list) }, 0, (void *)(&ide_tape_mutex), { 0, { 0, 0 }, "ide_tape_mutex", 0, 0UL } }; 222 struct mutex idetape_ref_mutex = { { 1 }, { { { { { 0 } }, 3735899821U, 4294967295U, (void *)-1, { 0, { 0, 0 }, "idetape_ref_mutex.wait_lock", 0, 0UL } } } }, { &(idetape_ref_mutex.wait_list), &(idetape_ref_mutex.wait_list) }, 0, (void *)(&idetape_ref_mutex), { 0, { 0, 0 }, "idetape_ref_mutex", 0, 0UL } }; 224 struct mutex idetape_chrdev_mutex = { { 1 }, { { { { { 0 } }, 3735899821U, 4294967295U, (void *)-1, { 0, { 0, 0 }, "idetape_chrdev_mutex.wait_lock", 0, 0UL } } } }, { &(idetape_chrdev_mutex.wait_list), &(idetape_chrdev_mutex.wait_list) }, 0, (void *)(&idetape_chrdev_mutex), { 0, { 0, 0 }, "idetape_chrdev_mutex", 0, 0UL } }; 226 struct class *idetape_sysfs_class = 0; 228 void ide_tape_release(struct device *dev); 230 struct ide_tape_obj *idetape_devs[20U] = { }; 232 struct ide_tape_obj * ide_tape_get(struct gendisk *disk, bool cdev, unsigned int i); 255 void ide_tape_put(struct ide_tape_obj *tape); 269 void idetape_analyze_error(ide_drive_t *drive); 325 void ide_tape_handle_dsc(ide_drive_t *drive); 327 int ide_tape_callback(ide_drive_t *drive, int dsc); 379 void ide_tape_stall_queue(ide_drive_t *drive); 440 ide_startstop_t ide_tape_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd, struct ide_atapi_pc *pc); 490 void idetape_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code); 516 ide_startstop_t idetape_media_access_finished(ide_drive_t *drive); 544 void ide_tape_create_rw_cmd(idetape_tape_t *tape, struct ide_atapi_pc *pc, struct request *rq, u8 opcode); 567 ide_startstop_t idetape_do_request(ide_drive_t *drive, struct request *rq, sector_t block); 673 void idetape_create_write_filemark_cmd(ide_drive_t *drive, struct ide_atapi_pc *pc, int write_filemark); 682 int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout); 710 int idetape_flush_tape_buffers(ide_drive_t *drive); 724 int ide_tape_read_position(ide_drive_t *drive); 766 void idetape_create_locate_cmd(ide_drive_t *drive, struct ide_atapi_pc *pc, unsigned int block, u8 partition, int skip); 778 void __ide_tape_discard_merge_buffer(ide_drive_t *drive); 801 int idetape_position_tape(ide_drive_t *drive, unsigned int block, u8 partition, int skip); 823 void ide_tape_discard_merge_buffer(ide_drive_t *drive, int restore_position); 845 int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int size); 887 void idetape_create_inquiry_cmd(struct ide_atapi_pc *pc); 895 void idetape_create_rewind_cmd(ide_drive_t *drive, struct ide_atapi_pc *pc); 903 void idetape_create_erase_cmd(struct ide_atapi_pc *pc); 911 void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd); 920 void ide_tape_flush_merge_buffer(ide_drive_t *drive); 940 int idetape_init_rw(ide_drive_t *drive, int dir); 990 void idetape_pad_zeros(ide_drive_t *drive, int bcount); 1008 int idetape_rewind_tape(ide_drive_t *drive); 1029 int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd, unsigned long arg); 1062 int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op, int mt_count); 1128 ssize_t idetape_chrdev_read(struct file *file, char *buf, size_t count, loff_t *ppos); 1183 ssize_t idetape_chrdev_write(struct file *file, const char *buf, size_t count, loff_t *ppos); 1226 int idetape_write_filemark(ide_drive_t *drive); 1253 int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count); 1369 long int do_idetape_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 1424 long int idetape_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 1438 void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive); 1463 int idetape_chrdev_open(struct inode *inode, struct file *filp); 1548 void idetape_write_release(ide_drive_t *drive, unsigned int minor); 1565 int idetape_chrdev_release(struct inode *inode, struct file *filp); 1602 void idetape_get_inquiry_results(ide_drive_t *drive); 1631 void idetape_get_mode_sense_results(ide_drive_t *drive); 1707 int mulf_tdsc(ide_drive_t *drive); 1708 int divf_tdsc(ide_drive_t *drive); 1709 int divf_buffer(ide_drive_t *drive); 1710 int divf_buffer_size(ide_drive_t *drive); 1712 int get_dsc_overlap(ide_drive_t *drive); 1712 int set_dsc_overlap(ide_drive_t *drive, int arg); 1712 const struct ide_devset ide_devset_dsc_overlap = { &get_dsc_overlap, &set_dsc_overlap, 1U }; 1714 int get_tdsc(ide_drive_t *drive); 1714 int set_tdsc(ide_drive_t *drive, int arg); 1714 const struct ide_devset ide_devset_tdsc = { &get_tdsc, &set_tdsc, 1U }; 1716 int get_avg_speed(ide_drive_t *drive); 1716 const struct ide_devset ide_devset_avg_speed = { &get_avg_speed, (int (*)(ide_drive_t *, int))0, 0U }; 1717 int get_speed(ide_drive_t *drive); 1717 const struct ide_devset ide_devset_speed = { &get_speed, (int (*)(ide_drive_t *, int))0, 0U }; 1718 int get_buffer(ide_drive_t *drive); 1718 const struct ide_devset ide_devset_buffer = { &get_buffer, (int (*)(ide_drive_t *, int))0, 0U }; 1719 int get_buffer_size(ide_drive_t *drive); 1719 const struct ide_devset ide_devset_buffer_size = { &get_buffer_size, (int (*)(ide_drive_t *, int))0, 0U }; 1721 const struct ide_proc_devset idetape_settings[7U] = { { "avg_speed", &ide_devset_avg_speed, 0, 65535, (int (*)(ide_drive_t *))0, (int (*)(ide_drive_t *))0 }, { "buffer", &ide_devset_buffer, 0, 65535, (int (*)(ide_drive_t *))0, &divf_buffer }, { "buffer_size", &ide_devset_buffer_size, 0, 65535, (int (*)(ide_drive_t *))0, &divf_buffer_size }, { "dsc_overlap", &ide_devset_dsc_overlap, 0, 1, (int (*)(ide_drive_t *))0, (int (*)(ide_drive_t *))0 }, { "speed", &ide_devset_speed, 0, 65535, (int (*)(ide_drive_t *))0, (int (*)(ide_drive_t *))0 }, { "tdsc", &ide_devset_tdsc, 12, 100, &mulf_tdsc, &divf_tdsc }, { (const char *)0, 0, 0, 0, 0, 0 } }; 1744 void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor); 1807 void ide_tape_remove(ide_drive_t *drive); 1840 int idetape_name_proc_show(struct seq_file *m, void *v); 1849 int idetape_name_proc_open(struct inode *inode, struct file *file); 1854 const struct file_operations idetape_name_proc_fops = { &__this_module, &seq_lseek, &seq_read, 0, 0, 0, 0, 0, 0, 0, 0, 0, &idetape_name_proc_open, 0, &single_release, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 1862 ide_proc_entry_t idetape_proc[3U] = { { "capacity", 33060U, &ide_capacity_proc_fops }, { "name", 33060U, &idetape_name_proc_fops } }; 1868 ide_proc_entry_t * ide_tape_proc_entries(ide_drive_t *drive); 1873 const struct ide_proc_devset * ide_tape_proc_devsets(ide_drive_t *drive); 1879 int ide_tape_probe(ide_drive_t *drive); 1881 struct ide_driver idetape_driver = { "1.20", &idetape_do_request, { "ide-tape", &ide_bus_type, &__this_module, 0, (_Bool)0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, &ide_tape_probe, &ide_tape_remove, 0, 0, &ide_tape_proc_entries, &ide_tape_proc_devsets }; 1898 const struct file_operations idetape_fops = { &__this_module, &noop_llseek, &idetape_chrdev_read, &idetape_chrdev_write, 0, 0, 0, 0, 0, &idetape_chrdev_ioctl, 0, 0, &idetape_chrdev_open, 0, &idetape_chrdev_release, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 1908 int idetape_open(struct block_device *bdev, fmode_t mode); 1922 void idetape_release(struct gendisk *disk, fmode_t mode); 1931 int idetape_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg); 1947 const struct block_device_operations idetape_block_ops = { &idetape_open, &idetape_release, 0, &idetape_ioctl, 0, 0, 0, 0, 0, 0, 0, 0, &__this_module, 0 }; 2029 void idetape_exit(); 2036 int idetape_init(); 2091 void ldv_check_final_state(); 2094 void ldv_check_return_value(int); 2097 void ldv_check_return_value_probe(int); 2100 void ldv_initialize(); 2103 void ldv_handler_precall(); 2106 int nondet_int(); 2109 int LDV_IN_INTERRUPT = 0; 2112 void ldv_main0_sequence_infinite_withcheck_stateful(); 10 void ldv_error(); 20 void ldv_stop(); 25 int ldv_undef_int(); 26 void * ldv_undef_ptr(); 39 int ldv_undef_int_nonpositive(); 14 void * ldv_err_ptr(long error); 21 long int ldv_ptr_err(const void *ptr); 28 bool ldv_is_err_or_null(const void *ptr); 28 int ldv_usb_gadget_class = 0; 31 int ldv_usb_gadget_chrdev = 0; 34 int ldv_usb_gadget = 0; 61 int ldv_register_class(); 124 int ldv_register_chrdev_region(); 158 int ldv_register_usb_gadget(); 179 void ldv_unregister_usb_gadget(); return ; } { 2114 struct inode *var_group1; 2115 struct file *var_group2; 2116 int res_idetape_name_proc_open_50; 2117 ide_drive_t *var_ide_tape_probe_56_p0; 2118 int res_ide_tape_probe_56; 2119 ide_drive_t *var_ide_tape_remove_47_p0; 2120 ide_drive_t *var_idetape_do_request_10_p0; 2121 struct request *var_group3; 2122 unsigned long var_idetape_do_request_10_p2; 2123 ide_drive_t *var_ide_tape_proc_entries_51_p0; 2124 ide_drive_t *var_ide_tape_proc_devsets_52_p0; 2125 char *var_idetape_chrdev_read_30_p1; 2126 unsigned long var_idetape_chrdev_read_30_p2; 2127 loff_t *var_idetape_chrdev_read_30_p3; 2128 long res_idetape_chrdev_read_30; 2129 const char *var_idetape_chrdev_write_31_p1; 2130 unsigned long var_idetape_chrdev_write_31_p2; 2131 loff_t *var_idetape_chrdev_write_31_p3; 2132 long res_idetape_chrdev_write_31; 2133 unsigned int var_idetape_chrdev_ioctl_35_p1; 2134 unsigned long var_idetape_chrdev_ioctl_35_p2; 2135 int res_idetape_chrdev_open_37; 2136 struct block_device *var_group4; 2137 unsigned int var_idetape_open_53_p1; 2138 int res_idetape_open_53; 2139 struct gendisk *var_group5; 2140 unsigned int var_idetape_release_54_p1; 2141 unsigned int var_idetape_ioctl_55_p1; 2142 unsigned int var_idetape_ioctl_55_p2; 2143 unsigned long var_idetape_ioctl_55_p3; 2144 int ldv_s_idetape_name_proc_fops_file_operations; 2145 int ldv_s_idetape_driver_ide_driver; 2146 int ldv_s_idetape_fops_file_operations; 2147 int ldv_s_idetape_block_ops_block_device_operations; 2148 int tmp; 2149 int tmp___0; 2150 int tmp___1; 3068 ldv_s_idetape_name_proc_fops_file_operations = 0; 3070 ldv_s_idetape_driver_ide_driver = 0; 3073 ldv_s_idetape_fops_file_operations = 0; 3076 ldv_s_idetape_block_ops_block_device_operations = 0; 2996 LDV_IN_INTERRUPT = 1; 3005 ldv_initialize() { /* Function call is skipped due to function is undefined */} 3065 ldv_handler_precall() { /* Function call is skipped due to function is undefined */} { 2038 int error; 2039 void *tmp; 2040 _Bool tmp___0; 2041 int tmp___1; 2038 error = 1; { 40 void *is_got; 43 is_got = ldv_undef_ptr() { /* Function call is skipped due to function is undefined */} 53 ldv_usb_gadget_class = 1; } 2039 idetape_sysfs_class = (struct class *)tmp; { 48 int ldv_func_res; 49 int tmp; 50 int tmp___0; { 2437 int tmp; 2437 tmp = __register_chrdev(major, 0U, 256U, name, fops) { /* Function call is skipped due to function is undefined */} } 50 ldv_func_res = tmp; { } 97 int is_reg; { 41 int ret; 42 int tmp; 41 tmp = ldv_undef_int() { /* Function call is skipped due to function is undefined */} 41 ret = tmp; } 110 ldv_usb_gadget_chrdev = 1; } 2054 error = driver_register(&(idetape_driver.gen_driver)) { /* Function call is skipped due to function is undefined */} 2056 goto out_free_driver; 2059 out_free_driver:; 2061 driver_unregister(&(idetape_driver.gen_driver)) { /* Function call is skipped due to function is undefined */} 2062 out_free_class:; { 76 class_destroy(ldv_func_arg1) { /* Function call is skipped due to function is undefined */} } 2064 out:; } 3067 goto ldv_final; { }} | Source code 1
2 /*
3 * IDE ATAPI streaming tape driver.
4 *
5 * Copyright (C) 1995-1999 Gadi Oxman <gadio@netvision.net.il>
6 * Copyright (C) 2003-2005 Bartlomiej Zolnierkiewicz
7 *
8 * This driver was constructed as a student project in the software laboratory
9 * of the faculty of electrical engineering in the Technion - Israel's
10 * Institute Of Technology, with the guide of Avner Lottem and Dr. Ilana David.
11 *
12 * It is hereby placed under the terms of the GNU general public license.
13 * (See linux/COPYING).
14 *
15 * For a historical changelog see
16 * Documentation/ide/ChangeLog.ide-tape.1995-2002
17 */
18
19 #define DRV_NAME "ide-tape"
20
21 #define IDETAPE_VERSION "1.20"
22
23 #include <linux/module.h>
24 #include <linux/types.h>
25 #include <linux/string.h>
26 #include <linux/kernel.h>
27 #include <linux/delay.h>
28 #include <linux/timer.h>
29 #include <linux/mm.h>
30 #include <linux/interrupt.h>
31 #include <linux/jiffies.h>
32 #include <linux/major.h>
33 #include <linux/errno.h>
34 #include <linux/genhd.h>
35 #include <linux/seq_file.h>
36 #include <linux/slab.h>
37 #include <linux/pci.h>
38 #include <linux/ide.h>
39 #include <linux/completion.h>
40 #include <linux/bitops.h>
41 #include <linux/mutex.h>
42 #include <scsi/scsi.h>
43
44 #include <asm/byteorder.h>
45 #include <linux/uaccess.h>
46 #include <linux/io.h>
47 #include <asm/unaligned.h>
48 #include <linux/mtio.h>
49
50 /* define to see debug info */
51 #undef IDETAPE_DEBUG_LOG
52
53 #ifdef IDETAPE_DEBUG_LOG
54 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
55 #else
56 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
57 #endif
58
59 /**************************** Tunable parameters *****************************/
60 /*
61 * After each failed packet command we issue a request sense command and retry
62 * the packet command IDETAPE_MAX_PC_RETRIES times.
63 *
64 * Setting IDETAPE_MAX_PC_RETRIES to 0 will disable retries.
65 */
66 #define IDETAPE_MAX_PC_RETRIES 3
67
68 /*
69 * The following parameter is used to select the point in the internal tape fifo
70 * in which we will start to refill the buffer. Decreasing the following
71 * parameter will improve the system's latency and interactive response, while
72 * using a high value might improve system throughput.
73 */
74 #define IDETAPE_FIFO_THRESHOLD 2
75
76 /*
77 * DSC polling parameters.
78 *
79 * Polling for DSC (a single bit in the status register) is a very important
80 * function in ide-tape. There are two cases in which we poll for DSC:
81 *
82 * 1. Before a read/write packet command, to ensure that we can transfer data
83 * from/to the tape's data buffers, without causing an actual media access.
84 * In case the tape is not ready yet, we take out our request from the device
85 * request queue, so that ide.c could service requests from the other device
86 * on the same interface in the meantime.
87 *
88 * 2. After the successful initialization of a "media access packet command",
89 * which is a command that can take a long time to complete (the interval can
90 * range from several seconds to even an hour). Again, we postpone our request
91 * in the middle to free the bus for the other device. The polling frequency
92 * here should be lower than the read/write frequency since those media access
93 * commands are slow. We start from a "fast" frequency - IDETAPE_DSC_MA_FAST
94 * (1 second), and if we don't receive DSC after IDETAPE_DSC_MA_THRESHOLD
95 * (5 min), we switch it to a lower frequency - IDETAPE_DSC_MA_SLOW (1 min).
96 *
97 * We also set a timeout for the timer, in case something goes wrong. The
98 * timeout should be longer then the maximum execution time of a tape operation.
99 */
100
101 /* DSC timings. */
102 #define IDETAPE_DSC_RW_MIN 5*HZ/100 /* 50 msec */
103 #define IDETAPE_DSC_RW_MAX 40*HZ/100 /* 400 msec */
104 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ /* 2 minutes */
105 #define IDETAPE_DSC_MA_FAST 2*HZ /* 2 seconds */
106 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ /* 5 minutes */
107 #define IDETAPE_DSC_MA_SLOW 30*HZ /* 30 seconds */
108 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ /* 2 hours */
109
110 /*************************** End of tunable parameters ***********************/
111
112 /* tape directions */
113 enum {
114 IDETAPE_DIR_NONE = (1 << 0),
115 IDETAPE_DIR_READ = (1 << 1),
116 IDETAPE_DIR_WRITE = (1 << 2),
117 };
118
119 /* Tape door status */
120 #define DOOR_UNLOCKED 0
121 #define DOOR_LOCKED 1
122 #define DOOR_EXPLICITLY_LOCKED 2
123
124 /* Some defines for the SPACE command */
125 #define IDETAPE_SPACE_OVER_FILEMARK 1
126 #define IDETAPE_SPACE_TO_EOD 3
127
128 /* Some defines for the LOAD UNLOAD command */
129 #define IDETAPE_LU_LOAD_MASK 1
130 #define IDETAPE_LU_RETENSION_MASK 2
131 #define IDETAPE_LU_EOT_MASK 4
132
133 /* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
134 #define IDETAPE_BLOCK_DESCRIPTOR 0
135 #define IDETAPE_CAPABILITIES_PAGE 0x2a
136
137 /*
138 * Most of our global data which we need to save even as we leave the driver due
139 * to an interrupt or a timer event is stored in the struct defined below.
140 */
141 typedef struct ide_tape_obj {
142 ide_drive_t *drive;
143 struct ide_driver *driver;
144 struct gendisk *disk;
145 struct device dev;
146
147 /* used by REQ_IDETAPE_{READ,WRITE} requests */
148 struct ide_atapi_pc queued_pc;
149
150 /*
151 * DSC polling variables.
152 *
153 * While polling for DSC we use postponed_rq to postpone the current
154 * request so that ide.c will be able to service pending requests on the
155 * other device. Note that at most we will have only one DSC (usually
156 * data transfer) request in the device request queue.
157 */
158 bool postponed_rq;
159
160 /* The time in which we started polling for DSC */
161 unsigned long dsc_polling_start;
162 /* Timer used to poll for dsc */
163 struct timer_list dsc_timer;
164 /* Read/Write dsc polling frequency */
165 unsigned long best_dsc_rw_freq;
166 unsigned long dsc_poll_freq;
167 unsigned long dsc_timeout;
168
169 /* Read position information */
170 u8 partition;
171 /* Current block */
172 unsigned int first_frame;
173
174 /* Last error information */
175 u8 sense_key, asc, ascq;
176
177 /* Character device operation */
178 unsigned int minor;
179 /* device name */
180 char name[4];
181 /* Current character device data transfer direction */
182 u8 chrdev_dir;
183
184 /* tape block size, usually 512 or 1024 bytes */
185 unsigned short blk_size;
186 int user_bs_factor;
187
188 /* Copy of the tape's Capabilities and Mechanical Page */
189 u8 caps[20];
190
191 /*
192 * Active data transfer request parameters.
193 *
194 * At most, there is only one ide-tape originated data transfer request
195 * in the device request queue. This allows ide.c to easily service
196 * requests from the other device when we postpone our active request.
197 */
198
199 /* Data buffer size chosen based on the tape's recommendation */
200 int buffer_size;
201 /* Staging buffer of buffer_size bytes */
202 void *buf;
203 /* The read/write cursor */
204 void *cur;
205 /* The number of valid bytes in buf */
206 size_t valid;
207
208 /* Measures average tape speed */
209 unsigned long avg_time;
210 int avg_size;
211 int avg_speed;
212
213 /* the door is currently locked */
214 int door_locked;
215 /* the tape hardware is write protected */
216 char drv_write_prot;
217 /* the tape is write protected (hardware or opened as read-only) */
218 char write_prot;
219 } idetape_tape_t;
220
221 static DEFINE_MUTEX(ide_tape_mutex);
222 static DEFINE_MUTEX(idetape_ref_mutex);
223
224 static DEFINE_MUTEX(idetape_chrdev_mutex);
225
226 static struct class *idetape_sysfs_class;
227
228 static void ide_tape_release(struct device *);
229
230 static struct ide_tape_obj *idetape_devs[MAX_HWIFS * MAX_DRIVES];
231
232 static struct ide_tape_obj *ide_tape_get(struct gendisk *disk, bool cdev,
233 unsigned int i)
234 {
235 struct ide_tape_obj *tape = NULL;
236
237 mutex_lock(&idetape_ref_mutex);
238
239 if (cdev)
240 tape = idetape_devs[i];
241 else
242 tape = ide_drv_g(disk, ide_tape_obj);
243
244 if (tape) {
245 if (ide_device_get(tape->drive))
246 tape = NULL;
247 else
248 get_device(&tape->dev);
249 }
250
251 mutex_unlock(&idetape_ref_mutex);
252 return tape;
253 }
254
255 static void ide_tape_put(struct ide_tape_obj *tape)
256 {
257 ide_drive_t *drive = tape->drive;
258
259 mutex_lock(&idetape_ref_mutex);
260 put_device(&tape->dev);
261 ide_device_put(drive);
262 mutex_unlock(&idetape_ref_mutex);
263 }
264
265 /*
266 * called on each failed packet command retry to analyze the request sense. We
267 * currently do not utilize this information.
268 */
269 static void idetape_analyze_error(ide_drive_t *drive)
270 {
271 idetape_tape_t *tape = drive->driver_data;
272 struct ide_atapi_pc *pc = drive->failed_pc;
273 struct request *rq = drive->hwif->rq;
274 u8 *sense = bio_data(rq->bio);
275
276 tape->sense_key = sense[2] & 0xF;
277 tape->asc = sense[12];
278 tape->ascq = sense[13];
279
280 ide_debug_log(IDE_DBG_FUNC,
281 "cmd: 0x%x, sense key = %x, asc = %x, ascq = %x",
282 rq->cmd[0], tape->sense_key, tape->asc, tape->ascq);
283
284 /* correct remaining bytes to transfer */
285 if (pc->flags & PC_FLAG_DMA_ERROR)
286 rq->resid_len = tape->blk_size * get_unaligned_be32(&sense[3]);
287
288 /*
289 * If error was the result of a zero-length read or write command,
290 * with sense key=5, asc=0x22, ascq=0, let it slide. Some drives
291 * (i.e. Seagate STT3401A Travan) don't support 0-length read/writes.
292 */
293 if ((pc->c[0] == READ_6 || pc->c[0] == WRITE_6)
294 /* length == 0 */
295 && pc->c[4] == 0 && pc->c[3] == 0 && pc->c[2] == 0) {
296 if (tape->sense_key == 5) {
297 /* don't report an error, everything's ok */
298 pc->error = 0;
299 /* don't retry read/write */
300 pc->flags |= PC_FLAG_ABORT;
301 }
302 }
303 if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
304 pc->error = IDE_DRV_ERROR_FILEMARK;
305 pc->flags |= PC_FLAG_ABORT;
306 }
307 if (pc->c[0] == WRITE_6) {
308 if ((sense[2] & 0x40) || (tape->sense_key == 0xd
309 && tape->asc == 0x0 && tape->ascq == 0x2)) {
310 pc->error = IDE_DRV_ERROR_EOD;
311 pc->flags |= PC_FLAG_ABORT;
312 }
313 }
314 if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
315 if (tape->sense_key == 8) {
316 pc->error = IDE_DRV_ERROR_EOD;
317 pc->flags |= PC_FLAG_ABORT;
318 }
319 if (!(pc->flags & PC_FLAG_ABORT) &&
320 (blk_rq_bytes(rq) - rq->resid_len))
321 pc->retries = IDETAPE_MAX_PC_RETRIES + 1;
322 }
323 }
324
325 static void ide_tape_handle_dsc(ide_drive_t *);
326
327 static int ide_tape_callback(ide_drive_t *drive, int dsc)
328 {
329 idetape_tape_t *tape = drive->driver_data;
330 struct ide_atapi_pc *pc = drive->pc;
331 struct request *rq = drive->hwif->rq;
332 int uptodate = pc->error ? 0 : 1;
333 int err = uptodate ? 0 : IDE_DRV_ERROR_GENERAL;
334
335 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x, dsc: %d, err: %d", rq->cmd[0],
336 dsc, err);
337
338 if (dsc)
339 ide_tape_handle_dsc(drive);
340
341 if (drive->failed_pc == pc)
342 drive->failed_pc = NULL;
343
344 if (pc->c[0] == REQUEST_SENSE) {
345 if (uptodate)
346 idetape_analyze_error(drive);
347 else
348 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE "
349 "itself - Aborting request!\n");
350 } else if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
351 unsigned int blocks =
352 (blk_rq_bytes(rq) - rq->resid_len) / tape->blk_size;
353
354 tape->avg_size += blocks * tape->blk_size;
355
356 if (time_after_eq(jiffies, tape->avg_time + HZ)) {
357 tape->avg_speed = tape->avg_size * HZ /
358 (jiffies - tape->avg_time) / 1024;
359 tape->avg_size = 0;
360 tape->avg_time = jiffies;
361 }
362
363 tape->first_frame += blocks;
364
365 if (pc->error) {
366 uptodate = 0;
367 err = pc->error;
368 }
369 }
370 rq->errors = err;
371
372 return uptodate;
373 }
374
375 /*
376 * Postpone the current request so that ide.c will be able to service requests
377 * from another device on the same port while we are polling for DSC.
378 */
379 static void ide_tape_stall_queue(ide_drive_t *drive)
380 {
381 idetape_tape_t *tape = drive->driver_data;
382
383 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x, dsc_poll_freq: %lu",
384 drive->hwif->rq->cmd[0], tape->dsc_poll_freq);
385
386 tape->postponed_rq = true;
387
388 ide_stall_queue(drive, tape->dsc_poll_freq);
389 }
390
391 static void ide_tape_handle_dsc(ide_drive_t *drive)
392 {
393 idetape_tape_t *tape = drive->driver_data;
394
395 /* Media access command */
396 tape->dsc_polling_start = jiffies;
397 tape->dsc_poll_freq = IDETAPE_DSC_MA_FAST;
398 tape->dsc_timeout = jiffies + IDETAPE_DSC_MA_TIMEOUT;
399 /* Allow ide.c to handle other requests */
400 ide_tape_stall_queue(drive);
401 }
402
403 /*
404 * Packet Command Interface
405 *
406 * The current Packet Command is available in drive->pc, and will not change
407 * until we finish handling it. Each packet command is associated with a
408 * callback function that will be called when the command is finished.
409 *
410 * The handling will be done in three stages:
411 *
412 * 1. ide_tape_issue_pc will send the packet command to the drive, and will set
413 * the interrupt handler to ide_pc_intr.
414 *
415 * 2. On each interrupt, ide_pc_intr will be called. This step will be
416 * repeated until the device signals us that no more interrupts will be issued.
417 *
418 * 3. ATAPI Tape media access commands have immediate status with a delayed
419 * process. In case of a successful initiation of a media access packet command,
420 * the DSC bit will be set when the actual execution of the command is finished.
421 * Since the tape drive will not issue an interrupt, we have to poll for this
422 * event. In this case, we define the request as "low priority request" by
423 * setting rq_status to IDETAPE_RQ_POSTPONED, set a timer to poll for DSC and
424 * exit the driver.
425 *
426 * ide.c will then give higher priority to requests which originate from the
427 * other device, until will change rq_status to RQ_ACTIVE.
428 *
429 * 4. When the packet command is finished, it will be checked for errors.
430 *
431 * 5. In case an error was found, we queue a request sense packet command in
432 * front of the request queue and retry the operation up to
433 * IDETAPE_MAX_PC_RETRIES times.
434 *
435 * 6. In case no error was found, or we decided to give up and not to retry
436 * again, the callback function will be called and then we will handle the next
437 * request.
438 */
439
440 static ide_startstop_t ide_tape_issue_pc(ide_drive_t *drive,
441 struct ide_cmd *cmd,
442 struct ide_atapi_pc *pc)
443 {
444 idetape_tape_t *tape = drive->driver_data;
445 struct request *rq = drive->hwif->rq;
446
447 if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
448 drive->failed_pc = pc;
449
450 /* Set the current packet command */
451 drive->pc = pc;
452
453 if (pc->retries > IDETAPE_MAX_PC_RETRIES ||
454 (pc->flags & PC_FLAG_ABORT)) {
455
456 /*
457 * We will "abort" retrying a packet command in case legitimate
458 * error code was received (crossing a filemark, or end of the
459 * media, for example).
460 */
461 if (!(pc->flags & PC_FLAG_ABORT)) {
462 if (!(pc->c[0] == TEST_UNIT_READY &&
463 tape->sense_key == 2 && tape->asc == 4 &&
464 (tape->ascq == 1 || tape->ascq == 8))) {
465 printk(KERN_ERR "ide-tape: %s: I/O error, "
466 "pc = %2x, key = %2x, "
467 "asc = %2x, ascq = %2x\n",
468 tape->name, pc->c[0],
469 tape->sense_key, tape->asc,
470 tape->ascq);
471 }
472 /* Giving up */
473 pc->error = IDE_DRV_ERROR_GENERAL;
474 }
475
476 drive->failed_pc = NULL;
477 drive->pc_callback(drive, 0);
478 ide_complete_rq(drive, -EIO, blk_rq_bytes(rq));
479 return ide_stopped;
480 }
481 ide_debug_log(IDE_DBG_SENSE, "retry #%d, cmd: 0x%02x", pc->retries,
482 pc->c[0]);
483
484 pc->retries++;
485
486 return ide_issue_pc(drive, cmd);
487 }
488
489 /* A mode sense command is used to "sense" tape parameters. */
490 static void idetape_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
491 {
492 ide_init_pc(pc);
493 pc->c[0] = MODE_SENSE;
494 if (page_code != IDETAPE_BLOCK_DESCRIPTOR)
495 /* DBD = 1 - Don't return block descriptors */
496 pc->c[1] = 8;
497 pc->c[2] = page_code;
498 /*
499 * Changed pc->c[3] to 0 (255 will at best return unused info).
500 *
501 * For SCSI this byte is defined as subpage instead of high byte
502 * of length and some IDE drives seem to interpret it this way
503 * and return an error when 255 is used.
504 */
505 pc->c[3] = 0;
506 /* We will just discard data in that case */
507 pc->c[4] = 255;
508 if (page_code == IDETAPE_BLOCK_DESCRIPTOR)
509 pc->req_xfer = 12;
510 else if (page_code == IDETAPE_CAPABILITIES_PAGE)
511 pc->req_xfer = 24;
512 else
513 pc->req_xfer = 50;
514 }
515
516 static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
517 {
518 ide_hwif_t *hwif = drive->hwif;
519 idetape_tape_t *tape = drive->driver_data;
520 struct ide_atapi_pc *pc = drive->pc;
521 u8 stat;
522
523 stat = hwif->tp_ops->read_status(hwif);
524
525 if (stat & ATA_DSC) {
526 if (stat & ATA_ERR) {
527 /* Error detected */
528 if (pc->c[0] != TEST_UNIT_READY)
529 printk(KERN_ERR "ide-tape: %s: I/O error, ",
530 tape->name);
531 /* Retry operation */
532 ide_retry_pc(drive);
533 return ide_stopped;
534 }
535 pc->error = 0;
536 } else {
537 pc->error = IDE_DRV_ERROR_GENERAL;
538 drive->failed_pc = NULL;
539 }
540 drive->pc_callback(drive, 0);
541 return ide_stopped;
542 }
543
544 static void ide_tape_create_rw_cmd(idetape_tape_t *tape,
545 struct ide_atapi_pc *pc, struct request *rq,
546 u8 opcode)
547 {
548 unsigned int length = blk_rq_sectors(rq) / (tape->blk_size >> 9);
549
550 ide_init_pc(pc);
551 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
552 pc->c[1] = 1;
553
554 if (blk_rq_bytes(rq) == tape->buffer_size)
555 pc->flags |= PC_FLAG_DMA_OK;
556
557 if (opcode == READ_6)
558 pc->c[0] = READ_6;
559 else if (opcode == WRITE_6) {
560 pc->c[0] = WRITE_6;
561 pc->flags |= PC_FLAG_WRITING;
562 }
563
564 memcpy(rq->cmd, pc->c, 12);
565 }
566
567 static ide_startstop_t idetape_do_request(ide_drive_t *drive,
568 struct request *rq, sector_t block)
569 {
570 ide_hwif_t *hwif = drive->hwif;
571 idetape_tape_t *tape = drive->driver_data;
572 struct ide_atapi_pc *pc = NULL;
573 struct ide_cmd cmd;
574 u8 stat;
575
576 ide_debug_log(IDE_DBG_RQ, "cmd: 0x%x, sector: %llu, nr_sectors: %u",
577 rq->cmd[0], (unsigned long long)blk_rq_pos(rq),
578 blk_rq_sectors(rq));
579
580 BUG_ON(!(rq->cmd_type == REQ_TYPE_DRV_PRIV ||
581 rq->cmd_type == REQ_TYPE_ATA_SENSE));
582
583 /* Retry a failed packet command */
584 if (drive->failed_pc && drive->pc->c[0] == REQUEST_SENSE) {
585 pc = drive->failed_pc;
586 goto out;
587 }
588
589 /*
590 * If the tape is still busy, postpone our request and service
591 * the other device meanwhile.
592 */
593 stat = hwif->tp_ops->read_status(hwif);
594
595 if ((drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) == 0 &&
596 (rq->cmd[13] & REQ_IDETAPE_PC2) == 0)
597 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
598
599 if (drive->dev_flags & IDE_DFLAG_POST_RESET) {
600 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
601 drive->dev_flags &= ~IDE_DFLAG_POST_RESET;
602 }
603
604 if (!(drive->atapi_flags & IDE_AFLAG_IGNORE_DSC) &&
605 !(stat & ATA_DSC)) {
606 if (!tape->postponed_rq) {
607 tape->dsc_polling_start = jiffies;
608 tape->dsc_poll_freq = tape->best_dsc_rw_freq;
609 tape->dsc_timeout = jiffies + IDETAPE_DSC_RW_TIMEOUT;
610 } else if (time_after(jiffies, tape->dsc_timeout)) {
611 printk(KERN_ERR "ide-tape: %s: DSC timeout\n",
612 tape->name);
613 if (rq->cmd[13] & REQ_IDETAPE_PC2) {
614 idetape_media_access_finished(drive);
615 return ide_stopped;
616 } else {
617 return ide_do_reset(drive);
618 }
619 } else if (time_after(jiffies,
620 tape->dsc_polling_start +
621 IDETAPE_DSC_MA_THRESHOLD))
622 tape->dsc_poll_freq = IDETAPE_DSC_MA_SLOW;
623 ide_tape_stall_queue(drive);
624 return ide_stopped;
625 } else {
626 drive->atapi_flags &= ~IDE_AFLAG_IGNORE_DSC;
627 tape->postponed_rq = false;
628 }
629
630 if (rq->cmd[13] & REQ_IDETAPE_READ) {
631 pc = &tape->queued_pc;
632 ide_tape_create_rw_cmd(tape, pc, rq, READ_6);
633 goto out;
634 }
635 if (rq->cmd[13] & REQ_IDETAPE_WRITE) {
636 pc = &tape->queued_pc;
637 ide_tape_create_rw_cmd(tape, pc, rq, WRITE_6);
638 goto out;
639 }
640 if (rq->cmd[13] & REQ_IDETAPE_PC1) {
641 pc = (struct ide_atapi_pc *)rq->special;
642 rq->cmd[13] &= ~(REQ_IDETAPE_PC1);
643 rq->cmd[13] |= REQ_IDETAPE_PC2;
644 goto out;
645 }
646 if (rq->cmd[13] & REQ_IDETAPE_PC2) {
647 idetape_media_access_finished(drive);
648 return ide_stopped;
649 }
650 BUG();
651
652 out:
653 /* prepare sense request for this command */
654 ide_prep_sense(drive, rq);
655
656 memset(&cmd, 0, sizeof(cmd));
657
658 if (rq_data_dir(rq))
659 cmd.tf_flags |= IDE_TFLAG_WRITE;
660
661 cmd.rq = rq;
662
663 ide_init_sg_cmd(&cmd, blk_rq_bytes(rq));
664 ide_map_sg(drive, &cmd);
665
666 return ide_tape_issue_pc(drive, &cmd, pc);
667 }
668
669 /*
670 * Write a filemark if write_filemark=1. Flush the device buffers without
671 * writing a filemark otherwise.
672 */
673 static void idetape_create_write_filemark_cmd(ide_drive_t *drive,
674 struct ide_atapi_pc *pc, int write_filemark)
675 {
676 ide_init_pc(pc);
677 pc->c[0] = WRITE_FILEMARKS;
678 pc->c[4] = write_filemark;
679 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
680 }
681
682 static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
683 {
684 idetape_tape_t *tape = drive->driver_data;
685 struct gendisk *disk = tape->disk;
686 int load_attempted = 0;
687
688 /* Wait for the tape to become ready */
689 set_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT), &drive->atapi_flags);
690 timeout += jiffies;
691 while (time_before(jiffies, timeout)) {
692 if (ide_do_test_unit_ready(drive, disk) == 0)
693 return 0;
694 if ((tape->sense_key == 2 && tape->asc == 4 && tape->ascq == 2)
695 || (tape->asc == 0x3A)) {
696 /* no media */
697 if (load_attempted)
698 return -ENOMEDIUM;
699 ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
700 load_attempted = 1;
701 /* not about to be ready */
702 } else if (!(tape->sense_key == 2 && tape->asc == 4 &&
703 (tape->ascq == 1 || tape->ascq == 8)))
704 return -EIO;
705 msleep(100);
706 }
707 return -EIO;
708 }
709
710 static int idetape_flush_tape_buffers(ide_drive_t *drive)
711 {
712 struct ide_tape_obj *tape = drive->driver_data;
713 struct ide_atapi_pc pc;
714 int rc;
715
716 idetape_create_write_filemark_cmd(drive, &pc, 0);
717 rc = ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0);
718 if (rc)
719 return rc;
720 idetape_wait_ready(drive, 60 * 5 * HZ);
721 return 0;
722 }
723
724 static int ide_tape_read_position(ide_drive_t *drive)
725 {
726 idetape_tape_t *tape = drive->driver_data;
727 struct ide_atapi_pc pc;
728 u8 buf[20];
729
730 ide_debug_log(IDE_DBG_FUNC, "enter");
731
732 /* prep cmd */
733 ide_init_pc(&pc);
734 pc.c[0] = READ_POSITION;
735 pc.req_xfer = 20;
736
737 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer))
738 return -1;
739
740 if (!pc.error) {
741 ide_debug_log(IDE_DBG_FUNC, "BOP - %s",
742 (buf[0] & 0x80) ? "Yes" : "No");
743 ide_debug_log(IDE_DBG_FUNC, "EOP - %s",
744 (buf[0] & 0x40) ? "Yes" : "No");
745
746 if (buf[0] & 0x4) {
747 printk(KERN_INFO "ide-tape: Block location is unknown"
748 "to the tape\n");
749 clear_bit(ilog2(IDE_AFLAG_ADDRESS_VALID),
750 &drive->atapi_flags);
751 return -1;
752 } else {
753 ide_debug_log(IDE_DBG_FUNC, "Block Location: %u",
754 be32_to_cpup((__be32 *)&buf[4]));
755
756 tape->partition = buf[1];
757 tape->first_frame = be32_to_cpup((__be32 *)&buf[4]);
758 set_bit(ilog2(IDE_AFLAG_ADDRESS_VALID),
759 &drive->atapi_flags);
760 }
761 }
762
763 return tape->first_frame;
764 }
765
766 static void idetape_create_locate_cmd(ide_drive_t *drive,
767 struct ide_atapi_pc *pc,
768 unsigned int block, u8 partition, int skip)
769 {
770 ide_init_pc(pc);
771 pc->c[0] = POSITION_TO_ELEMENT;
772 pc->c[1] = 2;
773 put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]);
774 pc->c[8] = partition;
775 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
776 }
777
778 static void __ide_tape_discard_merge_buffer(ide_drive_t *drive)
779 {
780 idetape_tape_t *tape = drive->driver_data;
781
782 if (tape->chrdev_dir != IDETAPE_DIR_READ)
783 return;
784
785 clear_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags);
786 tape->valid = 0;
787 if (tape->buf != NULL) {
788 kfree(tape->buf);
789 tape->buf = NULL;
790 }
791
792 tape->chrdev_dir = IDETAPE_DIR_NONE;
793 }
794
795 /*
796 * Position the tape to the requested block using the LOCATE packet command.
797 * A READ POSITION command is then issued to check where we are positioned. Like
798 * all higher level operations, we queue the commands at the tail of the request
799 * queue and wait for their completion.
800 */
801 static int idetape_position_tape(ide_drive_t *drive, unsigned int block,
802 u8 partition, int skip)
803 {
804 idetape_tape_t *tape = drive->driver_data;
805 struct gendisk *disk = tape->disk;
806 int ret;
807 struct ide_atapi_pc pc;
808
809 if (tape->chrdev_dir == IDETAPE_DIR_READ)
810 __ide_tape_discard_merge_buffer(drive);
811 idetape_wait_ready(drive, 60 * 5 * HZ);
812 idetape_create_locate_cmd(drive, &pc, block, partition, skip);
813 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
814 if (ret)
815 return ret;
816
817 ret = ide_tape_read_position(drive);
818 if (ret < 0)
819 return ret;
820 return 0;
821 }
822
823 static void ide_tape_discard_merge_buffer(ide_drive_t *drive,
824 int restore_position)
825 {
826 idetape_tape_t *tape = drive->driver_data;
827 int seek, position;
828
829 __ide_tape_discard_merge_buffer(drive);
830 if (restore_position) {
831 position = ide_tape_read_position(drive);
832 seek = position > 0 ? position : 0;
833 if (idetape_position_tape(drive, seek, 0, 0)) {
834 printk(KERN_INFO "ide-tape: %s: position_tape failed in"
835 " %s\n", tape->name, __func__);
836 return;
837 }
838 }
839 }
840
841 /*
842 * Generate a read/write request for the block device interface and wait for it
843 * to be serviced.
844 */
845 static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int size)
846 {
847 idetape_tape_t *tape = drive->driver_data;
848 struct request *rq;
849 int ret;
850
851 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x, size: %d", cmd, size);
852
853 BUG_ON(cmd != REQ_IDETAPE_READ && cmd != REQ_IDETAPE_WRITE);
854 BUG_ON(size < 0 || size % tape->blk_size);
855
856 rq = blk_get_request(drive->queue, READ, __GFP_RECLAIM);
857 rq->cmd_type = REQ_TYPE_DRV_PRIV;
858 rq->cmd[13] = cmd;
859 rq->rq_disk = tape->disk;
860 rq->__sector = tape->first_frame;
861
862 if (size) {
863 ret = blk_rq_map_kern(drive->queue, rq, tape->buf, size,
864 __GFP_RECLAIM);
865 if (ret)
866 goto out_put;
867 }
868
869 blk_execute_rq(drive->queue, tape->disk, rq, 0);
870
871 /* calculate the number of transferred bytes and update buffer state */
872 size -= rq->resid_len;
873 tape->cur = tape->buf;
874 if (cmd == REQ_IDETAPE_READ)
875 tape->valid = size;
876 else
877 tape->valid = 0;
878
879 ret = size;
880 if (rq->errors == IDE_DRV_ERROR_GENERAL)
881 ret = -EIO;
882 out_put:
883 blk_put_request(rq);
884 return ret;
885 }
886
887 static void idetape_create_inquiry_cmd(struct ide_atapi_pc *pc)
888 {
889 ide_init_pc(pc);
890 pc->c[0] = INQUIRY;
891 pc->c[4] = 254;
892 pc->req_xfer = 254;
893 }
894
895 static void idetape_create_rewind_cmd(ide_drive_t *drive,
896 struct ide_atapi_pc *pc)
897 {
898 ide_init_pc(pc);
899 pc->c[0] = REZERO_UNIT;
900 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
901 }
902
903 static void idetape_create_erase_cmd(struct ide_atapi_pc *pc)
904 {
905 ide_init_pc(pc);
906 pc->c[0] = ERASE;
907 pc->c[1] = 1;
908 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
909 }
910
911 static void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd)
912 {
913 ide_init_pc(pc);
914 pc->c[0] = SPACE;
915 put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]);
916 pc->c[1] = cmd;
917 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
918 }
919
920 static void ide_tape_flush_merge_buffer(ide_drive_t *drive)
921 {
922 idetape_tape_t *tape = drive->driver_data;
923
924 if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
925 printk(KERN_ERR "ide-tape: bug: Trying to empty merge buffer"
926 " but we are not writing.\n");
927 return;
928 }
929 if (tape->buf) {
930 size_t aligned = roundup(tape->valid, tape->blk_size);
931
932 memset(tape->cur, 0, aligned - tape->valid);
933 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, aligned);
934 kfree(tape->buf);
935 tape->buf = NULL;
936 }
937 tape->chrdev_dir = IDETAPE_DIR_NONE;
938 }
939
940 static int idetape_init_rw(ide_drive_t *drive, int dir)
941 {
942 idetape_tape_t *tape = drive->driver_data;
943 int rc;
944
945 BUG_ON(dir != IDETAPE_DIR_READ && dir != IDETAPE_DIR_WRITE);
946
947 if (tape->chrdev_dir == dir)
948 return 0;
949
950 if (tape->chrdev_dir == IDETAPE_DIR_READ)
951 ide_tape_discard_merge_buffer(drive, 1);
952 else if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
953 ide_tape_flush_merge_buffer(drive);
954 idetape_flush_tape_buffers(drive);
955 }
956
957 if (tape->buf || tape->valid) {
958 printk(KERN_ERR "ide-tape: valid should be 0 now\n");
959 tape->valid = 0;
960 }
961
962 tape->buf = kmalloc(tape->buffer_size, GFP_KERNEL);
963 if (!tape->buf)
964 return -ENOMEM;
965 tape->chrdev_dir = dir;
966 tape->cur = tape->buf;
967
968 /*
969 * Issue a 0 rw command to ensure that DSC handshake is
970 * switched from completion mode to buffer available mode. No
971 * point in issuing this if DSC overlap isn't supported, some
972 * drives (Seagate STT3401A) will return an error.
973 */
974 if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) {
975 int cmd = dir == IDETAPE_DIR_READ ? REQ_IDETAPE_READ
976 : REQ_IDETAPE_WRITE;
977
978 rc = idetape_queue_rw_tail(drive, cmd, 0);
979 if (rc < 0) {
980 kfree(tape->buf);
981 tape->buf = NULL;
982 tape->chrdev_dir = IDETAPE_DIR_NONE;
983 return rc;
984 }
985 }
986
987 return 0;
988 }
989
990 static void idetape_pad_zeros(ide_drive_t *drive, int bcount)
991 {
992 idetape_tape_t *tape = drive->driver_data;
993
994 memset(tape->buf, 0, tape->buffer_size);
995
996 while (bcount) {
997 unsigned int count = min(tape->buffer_size, bcount);
998
999 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, count);
1000 bcount -= count;
1001 }
1002 }
1003
1004 /*
1005 * Rewinds the tape to the Beginning Of the current Partition (BOP). We
1006 * currently support only one partition.
1007 */
1008 static int idetape_rewind_tape(ide_drive_t *drive)
1009 {
1010 struct ide_tape_obj *tape = drive->driver_data;
1011 struct gendisk *disk = tape->disk;
1012 struct ide_atapi_pc pc;
1013 int ret;
1014
1015 ide_debug_log(IDE_DBG_FUNC, "enter");
1016
1017 idetape_create_rewind_cmd(drive, &pc);
1018 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1019 if (ret)
1020 return ret;
1021
1022 ret = ide_tape_read_position(drive);
1023 if (ret < 0)
1024 return ret;
1025 return 0;
1026 }
1027
1028 /* mtio.h compatible commands should be issued to the chrdev interface. */
1029 static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd,
1030 unsigned long arg)
1031 {
1032 idetape_tape_t *tape = drive->driver_data;
1033 void __user *argp = (void __user *)arg;
1034
1035 struct idetape_config {
1036 int dsc_rw_frequency;
1037 int dsc_media_access_frequency;
1038 int nr_stages;
1039 } config;
1040
1041 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%04x", cmd);
1042
1043 switch (cmd) {
1044 case 0x0340:
1045 if (copy_from_user(&config, argp, sizeof(config)))
1046 return -EFAULT;
1047 tape->best_dsc_rw_freq = config.dsc_rw_frequency;
1048 break;
1049 case 0x0350:
1050 memset(&config, 0, sizeof(config));
1051 config.dsc_rw_frequency = (int) tape->best_dsc_rw_freq;
1052 config.nr_stages = 1;
1053 if (copy_to_user(argp, &config, sizeof(config)))
1054 return -EFAULT;
1055 break;
1056 default:
1057 return -EIO;
1058 }
1059 return 0;
1060 }
1061
1062 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
1063 int mt_count)
1064 {
1065 idetape_tape_t *tape = drive->driver_data;
1066 struct gendisk *disk = tape->disk;
1067 struct ide_atapi_pc pc;
1068 int retval, count = 0;
1069 int sprev = !!(tape->caps[4] & 0x20);
1070
1071
1072 ide_debug_log(IDE_DBG_FUNC, "mt_op: %d, mt_count: %d", mt_op, mt_count);
1073
1074 if (mt_count == 0)
1075 return 0;
1076 if (MTBSF == mt_op || MTBSFM == mt_op) {
1077 if (!sprev)
1078 return -EIO;
1079 mt_count = -mt_count;
1080 }
1081
1082 if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1083 tape->valid = 0;
1084 if (test_and_clear_bit(ilog2(IDE_AFLAG_FILEMARK),
1085 &drive->atapi_flags))
1086 ++count;
1087 ide_tape_discard_merge_buffer(drive, 0);
1088 }
1089
1090 switch (mt_op) {
1091 case MTFSF:
1092 case MTBSF:
1093 idetape_create_space_cmd(&pc, mt_count - count,
1094 IDETAPE_SPACE_OVER_FILEMARK);
1095 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1096 case MTFSFM:
1097 case MTBSFM:
1098 if (!sprev)
1099 return -EIO;
1100 retval = idetape_space_over_filemarks(drive, MTFSF,
1101 mt_count - count);
1102 if (retval)
1103 return retval;
1104 count = (MTBSFM == mt_op ? 1 : -1);
1105 return idetape_space_over_filemarks(drive, MTFSF, count);
1106 default:
1107 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
1108 mt_op);
1109 return -EIO;
1110 }
1111 }
1112
1113 /*
1114 * Our character device read / write functions.
1115 *
1116 * The tape is optimized to maximize throughput when it is transferring an
1117 * integral number of the "continuous transfer limit", which is a parameter of
1118 * the specific tape (26kB on my particular tape, 32kB for Onstream).
1119 *
1120 * As of version 1.3 of the driver, the character device provides an abstract
1121 * continuous view of the media - any mix of block sizes (even 1 byte) on the
1122 * same backup/restore procedure is supported. The driver will internally
1123 * convert the requests to the recommended transfer unit, so that an unmatch
1124 * between the user's block size to the recommended size will only result in a
1125 * (slightly) increased driver overhead, but will no longer hit performance.
1126 * This is not applicable to Onstream.
1127 */
1128 static ssize_t idetape_chrdev_read(struct file *file, char __user *buf,
1129 size_t count, loff_t *ppos)
1130 {
1131 struct ide_tape_obj *tape = file->private_data;
1132 ide_drive_t *drive = tape->drive;
1133 size_t done = 0;
1134 ssize_t ret = 0;
1135 int rc;
1136
1137 ide_debug_log(IDE_DBG_FUNC, "count %Zd", count);
1138
1139 if (tape->chrdev_dir != IDETAPE_DIR_READ) {
1140 if (test_bit(ilog2(IDE_AFLAG_DETECT_BS), &drive->atapi_flags))
1141 if (count > tape->blk_size &&
1142 (count % tape->blk_size) == 0)
1143 tape->user_bs_factor = count / tape->blk_size;
1144 }
1145
1146 rc = idetape_init_rw(drive, IDETAPE_DIR_READ);
1147 if (rc < 0)
1148 return rc;
1149
1150 while (done < count) {
1151 size_t todo;
1152
1153 /* refill if staging buffer is empty */
1154 if (!tape->valid) {
1155 /* If we are at a filemark, nothing more to read */
1156 if (test_bit(ilog2(IDE_AFLAG_FILEMARK),
1157 &drive->atapi_flags))
1158 break;
1159 /* read */
1160 if (idetape_queue_rw_tail(drive, REQ_IDETAPE_READ,
1161 tape->buffer_size) <= 0)
1162 break;
1163 }
1164
1165 /* copy out */
1166 todo = min_t(size_t, count - done, tape->valid);
1167 if (copy_to_user(buf + done, tape->cur, todo))
1168 ret = -EFAULT;
1169
1170 tape->cur += todo;
1171 tape->valid -= todo;
1172 done += todo;
1173 }
1174
1175 if (!done && test_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags)) {
1176 idetape_space_over_filemarks(drive, MTFSF, 1);
1177 return 0;
1178 }
1179
1180 return ret ? ret : done;
1181 }
1182
1183 static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf,
1184 size_t count, loff_t *ppos)
1185 {
1186 struct ide_tape_obj *tape = file->private_data;
1187 ide_drive_t *drive = tape->drive;
1188 size_t done = 0;
1189 ssize_t ret = 0;
1190 int rc;
1191
1192 /* The drive is write protected. */
1193 if (tape->write_prot)
1194 return -EACCES;
1195
1196 ide_debug_log(IDE_DBG_FUNC, "count %Zd", count);
1197
1198 /* Initialize write operation */
1199 rc = idetape_init_rw(drive, IDETAPE_DIR_WRITE);
1200 if (rc < 0)
1201 return rc;
1202
1203 while (done < count) {
1204 size_t todo;
1205
1206 /* flush if staging buffer is full */
1207 if (tape->valid == tape->buffer_size &&
1208 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE,
1209 tape->buffer_size) <= 0)
1210 return rc;
1211
1212 /* copy in */
1213 todo = min_t(size_t, count - done,
1214 tape->buffer_size - tape->valid);
1215 if (copy_from_user(tape->cur, buf + done, todo))
1216 ret = -EFAULT;
1217
1218 tape->cur += todo;
1219 tape->valid += todo;
1220 done += todo;
1221 }
1222
1223 return ret ? ret : done;
1224 }
1225
1226 static int idetape_write_filemark(ide_drive_t *drive)
1227 {
1228 struct ide_tape_obj *tape = drive->driver_data;
1229 struct ide_atapi_pc pc;
1230
1231 /* Write a filemark */
1232 idetape_create_write_filemark_cmd(drive, &pc, 1);
1233 if (ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0)) {
1234 printk(KERN_ERR "ide-tape: Couldn't write a filemark\n");
1235 return -EIO;
1236 }
1237 return 0;
1238 }
1239
1240 /*
1241 * Called from idetape_chrdev_ioctl when the general mtio MTIOCTOP ioctl is
1242 * requested.
1243 *
1244 * Note: MTBSF and MTBSFM are not supported when the tape doesn't support
1245 * spacing over filemarks in the reverse direction. In this case, MTFSFM is also
1246 * usually not supported.
1247 *
1248 * The following commands are currently not supported:
1249 *
1250 * MTFSS, MTBSS, MTWSM, MTSETDENSITY, MTSETDRVBUFFER, MT_ST_BOOLEANS,
1251 * MT_ST_WRITE_THRESHOLD.
1252 */
1253 static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1254 {
1255 idetape_tape_t *tape = drive->driver_data;
1256 struct gendisk *disk = tape->disk;
1257 struct ide_atapi_pc pc;
1258 int i, retval;
1259
1260 ide_debug_log(IDE_DBG_FUNC, "MTIOCTOP ioctl: mt_op: %d, mt_count: %d",
1261 mt_op, mt_count);
1262
1263 switch (mt_op) {
1264 case MTFSF:
1265 case MTFSFM:
1266 case MTBSF:
1267 case MTBSFM:
1268 if (!mt_count)
1269 return 0;
1270 return idetape_space_over_filemarks(drive, mt_op, mt_count);
1271 default:
1272 break;
1273 }
1274
1275 switch (mt_op) {
1276 case MTWEOF:
1277 if (tape->write_prot)
1278 return -EACCES;
1279 ide_tape_discard_merge_buffer(drive, 1);
1280 for (i = 0; i < mt_count; i++) {
1281 retval = idetape_write_filemark(drive);
1282 if (retval)
1283 return retval;
1284 }
1285 return 0;
1286 case MTREW:
1287 ide_tape_discard_merge_buffer(drive, 0);
1288 if (idetape_rewind_tape(drive))
1289 return -EIO;
1290 return 0;
1291 case MTLOAD:
1292 ide_tape_discard_merge_buffer(drive, 0);
1293 return ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1294 case MTUNLOAD:
1295 case MTOFFL:
1296 /*
1297 * If door is locked, attempt to unlock before
1298 * attempting to eject.
1299 */
1300 if (tape->door_locked) {
1301 if (!ide_set_media_lock(drive, disk, 0))
1302 tape->door_locked = DOOR_UNLOCKED;
1303 }
1304 ide_tape_discard_merge_buffer(drive, 0);
1305 retval = ide_do_start_stop(drive, disk, !IDETAPE_LU_LOAD_MASK);
1306 if (!retval)
1307 clear_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT),
1308 &drive->atapi_flags);
1309 return retval;
1310 case MTNOP:
1311 ide_tape_discard_merge_buffer(drive, 0);
1312 return idetape_flush_tape_buffers(drive);
1313 case MTRETEN:
1314 ide_tape_discard_merge_buffer(drive, 0);
1315 return ide_do_start_stop(drive, disk,
1316 IDETAPE_LU_RETENSION_MASK | IDETAPE_LU_LOAD_MASK);
1317 case MTEOM:
1318 idetape_create_space_cmd(&pc, 0, IDETAPE_SPACE_TO_EOD);
1319 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1320 case MTERASE:
1321 (void)idetape_rewind_tape(drive);
1322 idetape_create_erase_cmd(&pc);
1323 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1324 case MTSETBLK:
1325 if (mt_count) {
1326 if (mt_count < tape->blk_size ||
1327 mt_count % tape->blk_size)
1328 return -EIO;
1329 tape->user_bs_factor = mt_count / tape->blk_size;
1330 clear_bit(ilog2(IDE_AFLAG_DETECT_BS),
1331 &drive->atapi_flags);
1332 } else
1333 set_bit(ilog2(IDE_AFLAG_DETECT_BS),
1334 &drive->atapi_flags);
1335 return 0;
1336 case MTSEEK:
1337 ide_tape_discard_merge_buffer(drive, 0);
1338 return idetape_position_tape(drive,
1339 mt_count * tape->user_bs_factor, tape->partition, 0);
1340 case MTSETPART:
1341 ide_tape_discard_merge_buffer(drive, 0);
1342 return idetape_position_tape(drive, 0, mt_count, 0);
1343 case MTFSR:
1344 case MTBSR:
1345 case MTLOCK:
1346 retval = ide_set_media_lock(drive, disk, 1);
1347 if (retval)
1348 return retval;
1349 tape->door_locked = DOOR_EXPLICITLY_LOCKED;
1350 return 0;
1351 case MTUNLOCK:
1352 retval = ide_set_media_lock(drive, disk, 0);
1353 if (retval)
1354 return retval;
1355 tape->door_locked = DOOR_UNLOCKED;
1356 return 0;
1357 default:
1358 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
1359 mt_op);
1360 return -EIO;
1361 }
1362 }
1363
1364 /*
1365 * Our character device ioctls. General mtio.h magnetic io commands are
1366 * supported here, and not in the corresponding block interface. Our own
1367 * ide-tape ioctls are supported on both interfaces.
1368 */
1369 static long do_idetape_chrdev_ioctl(struct file *file,
1370 unsigned int cmd, unsigned long arg)
1371 {
1372 struct ide_tape_obj *tape = file->private_data;
1373 ide_drive_t *drive = tape->drive;
1374 struct mtop mtop;
1375 struct mtget mtget;
1376 struct mtpos mtpos;
1377 int block_offset = 0, position = tape->first_frame;
1378 void __user *argp = (void __user *)arg;
1379
1380 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x", cmd);
1381
1382 if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
1383 ide_tape_flush_merge_buffer(drive);
1384 idetape_flush_tape_buffers(drive);
1385 }
1386 if (cmd == MTIOCGET || cmd == MTIOCPOS) {
1387 block_offset = tape->valid /
1388 (tape->blk_size * tape->user_bs_factor);
1389 position = ide_tape_read_position(drive);
1390 if (position < 0)
1391 return -EIO;
1392 }
1393 switch (cmd) {
1394 case MTIOCTOP:
1395 if (copy_from_user(&mtop, argp, sizeof(struct mtop)))
1396 return -EFAULT;
1397 return idetape_mtioctop(drive, mtop.mt_op, mtop.mt_count);
1398 case MTIOCGET:
1399 memset(&mtget, 0, sizeof(struct mtget));
1400 mtget.mt_type = MT_ISSCSI2;
1401 mtget.mt_blkno = position / tape->user_bs_factor - block_offset;
1402 mtget.mt_dsreg =
1403 ((tape->blk_size * tape->user_bs_factor)
1404 << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK;
1405
1406 if (tape->drv_write_prot)
1407 mtget.mt_gstat |= GMT_WR_PROT(0xffffffff);
1408
1409 if (copy_to_user(argp, &mtget, sizeof(struct mtget)))
1410 return -EFAULT;
1411 return 0;
1412 case MTIOCPOS:
1413 mtpos.mt_blkno = position / tape->user_bs_factor - block_offset;
1414 if (copy_to_user(argp, &mtpos, sizeof(struct mtpos)))
1415 return -EFAULT;
1416 return 0;
1417 default:
1418 if (tape->chrdev_dir == IDETAPE_DIR_READ)
1419 ide_tape_discard_merge_buffer(drive, 1);
1420 return idetape_blkdev_ioctl(drive, cmd, arg);
1421 }
1422 }
1423
1424 static long idetape_chrdev_ioctl(struct file *file,
1425 unsigned int cmd, unsigned long arg)
1426 {
1427 long ret;
1428 mutex_lock(&ide_tape_mutex);
1429 ret = do_idetape_chrdev_ioctl(file, cmd, arg);
1430 mutex_unlock(&ide_tape_mutex);
1431 return ret;
1432 }
1433
1434 /*
1435 * Do a mode sense page 0 with block descriptor and if it succeeds set the tape
1436 * block size with the reported value.
1437 */
1438 static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
1439 {
1440 idetape_tape_t *tape = drive->driver_data;
1441 struct ide_atapi_pc pc;
1442 u8 buf[12];
1443
1444 idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
1445 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) {
1446 printk(KERN_ERR "ide-tape: Can't get block descriptor\n");
1447 if (tape->blk_size == 0) {
1448 printk(KERN_WARNING "ide-tape: Cannot deal with zero "
1449 "block size, assuming 32k\n");
1450 tape->blk_size = 32768;
1451 }
1452 return;
1453 }
1454 tape->blk_size = (buf[4 + 5] << 16) +
1455 (buf[4 + 6] << 8) +
1456 buf[4 + 7];
1457 tape->drv_write_prot = (buf[2] & 0x80) >> 7;
1458
1459 ide_debug_log(IDE_DBG_FUNC, "blk_size: %d, write_prot: %d",
1460 tape->blk_size, tape->drv_write_prot);
1461 }
1462
1463 static int idetape_chrdev_open(struct inode *inode, struct file *filp)
1464 {
1465 unsigned int minor = iminor(inode), i = minor & ~0xc0;
1466 ide_drive_t *drive;
1467 idetape_tape_t *tape;
1468 int retval;
1469
1470 if (i >= MAX_HWIFS * MAX_DRIVES)
1471 return -ENXIO;
1472
1473 mutex_lock(&idetape_chrdev_mutex);
1474
1475 tape = ide_tape_get(NULL, true, i);
1476 if (!tape) {
1477 mutex_unlock(&idetape_chrdev_mutex);
1478 return -ENXIO;
1479 }
1480
1481 drive = tape->drive;
1482 filp->private_data = tape;
1483
1484 ide_debug_log(IDE_DBG_FUNC, "enter");
1485
1486 /*
1487 * We really want to do nonseekable_open(inode, filp); here, but some
1488 * versions of tar incorrectly call lseek on tapes and bail out if that
1489 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1490 */
1491 filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1492
1493
1494 if (test_and_set_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags)) {
1495 retval = -EBUSY;
1496 goto out_put_tape;
1497 }
1498
1499 retval = idetape_wait_ready(drive, 60 * HZ);
1500 if (retval) {
1501 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1502 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
1503 goto out_put_tape;
1504 }
1505
1506 ide_tape_read_position(drive);
1507 if (!test_bit(ilog2(IDE_AFLAG_ADDRESS_VALID), &drive->atapi_flags))
1508 (void)idetape_rewind_tape(drive);
1509
1510 /* Read block size and write protect status from drive. */
1511 ide_tape_get_bsize_from_bdesc(drive);
1512
1513 /* Set write protect flag if device is opened as read-only. */
1514 if ((filp->f_flags & O_ACCMODE) == O_RDONLY)
1515 tape->write_prot = 1;
1516 else
1517 tape->write_prot = tape->drv_write_prot;
1518
1519 /* Make sure drive isn't write protected if user wants to write. */
1520 if (tape->write_prot) {
1521 if ((filp->f_flags & O_ACCMODE) == O_WRONLY ||
1522 (filp->f_flags & O_ACCMODE) == O_RDWR) {
1523 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1524 retval = -EROFS;
1525 goto out_put_tape;
1526 }
1527 }
1528
1529 /* Lock the tape drive door so user can't eject. */
1530 if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
1531 if (!ide_set_media_lock(drive, tape->disk, 1)) {
1532 if (tape->door_locked != DOOR_EXPLICITLY_LOCKED)
1533 tape->door_locked = DOOR_LOCKED;
1534 }
1535 }
1536 mutex_unlock(&idetape_chrdev_mutex);
1537
1538 return 0;
1539
1540 out_put_tape:
1541 ide_tape_put(tape);
1542
1543 mutex_unlock(&idetape_chrdev_mutex);
1544
1545 return retval;
1546 }
1547
1548 static void idetape_write_release(ide_drive_t *drive, unsigned int minor)
1549 {
1550 idetape_tape_t *tape = drive->driver_data;
1551
1552 ide_tape_flush_merge_buffer(drive);
1553 tape->buf = kmalloc(tape->buffer_size, GFP_KERNEL);
1554 if (tape->buf != NULL) {
1555 idetape_pad_zeros(drive, tape->blk_size *
1556 (tape->user_bs_factor - 1));
1557 kfree(tape->buf);
1558 tape->buf = NULL;
1559 }
1560 idetape_write_filemark(drive);
1561 idetape_flush_tape_buffers(drive);
1562 idetape_flush_tape_buffers(drive);
1563 }
1564
1565 static int idetape_chrdev_release(struct inode *inode, struct file *filp)
1566 {
1567 struct ide_tape_obj *tape = filp->private_data;
1568 ide_drive_t *drive = tape->drive;
1569 unsigned int minor = iminor(inode);
1570
1571 mutex_lock(&idetape_chrdev_mutex);
1572
1573 tape = drive->driver_data;
1574
1575 ide_debug_log(IDE_DBG_FUNC, "enter");
1576
1577 if (tape->chrdev_dir == IDETAPE_DIR_WRITE)
1578 idetape_write_release(drive, minor);
1579 if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1580 if (minor < 128)
1581 ide_tape_discard_merge_buffer(drive, 1);
1582 }
1583
1584 if (minor < 128 && test_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT),
1585 &drive->atapi_flags))
1586 (void) idetape_rewind_tape(drive);
1587
1588 if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
1589 if (tape->door_locked == DOOR_LOCKED) {
1590 if (!ide_set_media_lock(drive, tape->disk, 0))
1591 tape->door_locked = DOOR_UNLOCKED;
1592 }
1593 }
1594 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1595 ide_tape_put(tape);
1596
1597 mutex_unlock(&idetape_chrdev_mutex);
1598
1599 return 0;
1600 }
1601
1602 static void idetape_get_inquiry_results(ide_drive_t *drive)
1603 {
1604 idetape_tape_t *tape = drive->driver_data;
1605 struct ide_atapi_pc pc;
1606 u8 pc_buf[256];
1607 char fw_rev[4], vendor_id[8], product_id[16];
1608
1609 idetape_create_inquiry_cmd(&pc);
1610 if (ide_queue_pc_tail(drive, tape->disk, &pc, pc_buf, pc.req_xfer)) {
1611 printk(KERN_ERR "ide-tape: %s: can't get INQUIRY results\n",
1612 tape->name);
1613 return;
1614 }
1615 memcpy(vendor_id, &pc_buf[8], 8);
1616 memcpy(product_id, &pc_buf[16], 16);
1617 memcpy(fw_rev, &pc_buf[32], 4);
1618
1619 ide_fixstring(vendor_id, 8, 0);
1620 ide_fixstring(product_id, 16, 0);
1621 ide_fixstring(fw_rev, 4, 0);
1622
1623 printk(KERN_INFO "ide-tape: %s <-> %s: %.8s %.16s rev %.4s\n",
1624 drive->name, tape->name, vendor_id, product_id, fw_rev);
1625 }
1626
1627 /*
1628 * Ask the tape about its various parameters. In particular, we will adjust our
1629 * data transfer buffer size to the recommended value as returned by the tape.
1630 */
1631 static void idetape_get_mode_sense_results(ide_drive_t *drive)
1632 {
1633 idetape_tape_t *tape = drive->driver_data;
1634 struct ide_atapi_pc pc;
1635 u8 buf[24], *caps;
1636 u8 speed, max_speed;
1637
1638 idetape_create_mode_sense_cmd(&pc, IDETAPE_CAPABILITIES_PAGE);
1639 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) {
1640 printk(KERN_ERR "ide-tape: Can't get tape parameters - assuming"
1641 " some default values\n");
1642 tape->blk_size = 512;
1643 put_unaligned(52, (u16 *)&tape->caps[12]);
1644 put_unaligned(540, (u16 *)&tape->caps[14]);
1645 put_unaligned(6*52, (u16 *)&tape->caps[16]);
1646 return;
1647 }
1648 caps = buf + 4 + buf[3];
1649
1650 /* convert to host order and save for later use */
1651 speed = be16_to_cpup((__be16 *)&caps[14]);
1652 max_speed = be16_to_cpup((__be16 *)&caps[8]);
1653
1654 *(u16 *)&caps[8] = max_speed;
1655 *(u16 *)&caps[12] = be16_to_cpup((__be16 *)&caps[12]);
1656 *(u16 *)&caps[14] = speed;
1657 *(u16 *)&caps[16] = be16_to_cpup((__be16 *)&caps[16]);
1658
1659 if (!speed) {
1660 printk(KERN_INFO "ide-tape: %s: invalid tape speed "
1661 "(assuming 650KB/sec)\n", drive->name);
1662 *(u16 *)&caps[14] = 650;
1663 }
1664 if (!max_speed) {
1665 printk(KERN_INFO "ide-tape: %s: invalid max_speed "
1666 "(assuming 650KB/sec)\n", drive->name);
1667 *(u16 *)&caps[8] = 650;
1668 }
1669
1670 memcpy(&tape->caps, caps, 20);
1671
1672 /* device lacks locking support according to capabilities page */
1673 if ((caps[6] & 1) == 0)
1674 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
1675
1676 if (caps[7] & 0x02)
1677 tape->blk_size = 512;
1678 else if (caps[7] & 0x04)
1679 tape->blk_size = 1024;
1680 }
1681
1682 #ifdef CONFIG_IDE_PROC_FS
1683 #define ide_tape_devset_get(name, field) \
1684 static int get_##name(ide_drive_t *drive) \
1685 { \
1686 idetape_tape_t *tape = drive->driver_data; \
1687 return tape->field; \
1688 }
1689
1690 #define ide_tape_devset_set(name, field) \
1691 static int set_##name(ide_drive_t *drive, int arg) \
1692 { \
1693 idetape_tape_t *tape = drive->driver_data; \
1694 tape->field = arg; \
1695 return 0; \
1696 }
1697
1698 #define ide_tape_devset_rw_field(_name, _field) \
1699 ide_tape_devset_get(_name, _field) \
1700 ide_tape_devset_set(_name, _field) \
1701 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
1702
1703 #define ide_tape_devset_r_field(_name, _field) \
1704 ide_tape_devset_get(_name, _field) \
1705 IDE_DEVSET(_name, 0, get_##_name, NULL)
1706
1707 static int mulf_tdsc(ide_drive_t *drive) { return 1000; }
1708 static int divf_tdsc(ide_drive_t *drive) { return HZ; }
1709 static int divf_buffer(ide_drive_t *drive) { return 2; }
1710 static int divf_buffer_size(ide_drive_t *drive) { return 1024; }
1711
1712 ide_devset_rw_flag(dsc_overlap, IDE_DFLAG_DSC_OVERLAP);
1713
1714 ide_tape_devset_rw_field(tdsc, best_dsc_rw_freq);
1715
1716 ide_tape_devset_r_field(avg_speed, avg_speed);
1717 ide_tape_devset_r_field(speed, caps[14]);
1718 ide_tape_devset_r_field(buffer, caps[16]);
1719 ide_tape_devset_r_field(buffer_size, buffer_size);
1720
1721 static const struct ide_proc_devset idetape_settings[] = {
1722 __IDE_PROC_DEVSET(avg_speed, 0, 0xffff, NULL, NULL),
1723 __IDE_PROC_DEVSET(buffer, 0, 0xffff, NULL, divf_buffer),
1724 __IDE_PROC_DEVSET(buffer_size, 0, 0xffff, NULL, divf_buffer_size),
1725 __IDE_PROC_DEVSET(dsc_overlap, 0, 1, NULL, NULL),
1726 __IDE_PROC_DEVSET(speed, 0, 0xffff, NULL, NULL),
1727 __IDE_PROC_DEVSET(tdsc, IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX,
1728 mulf_tdsc, divf_tdsc),
1729 { NULL },
1730 };
1731 #endif
1732
1733 /*
1734 * The function below is called to:
1735 *
1736 * 1. Initialize our various state variables.
1737 * 2. Ask the tape for its capabilities.
1738 * 3. Allocate a buffer which will be used for data transfer. The buffer size
1739 * is chosen based on the recommendation which we received in step 2.
1740 *
1741 * Note that at this point ide.c already assigned us an irq, so that we can
1742 * queue requests here and wait for their completion.
1743 */
1744 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor)
1745 {
1746 unsigned long t;
1747 int speed;
1748 int buffer_size;
1749 u16 *ctl = (u16 *)&tape->caps[12];
1750
1751 ide_debug_log(IDE_DBG_FUNC, "minor: %d", minor);
1752
1753 drive->pc_callback = ide_tape_callback;
1754
1755 drive->dev_flags |= IDE_DFLAG_DSC_OVERLAP;
1756
1757 if (drive->hwif->host_flags & IDE_HFLAG_NO_DSC) {
1758 printk(KERN_INFO "ide-tape: %s: disabling DSC overlap\n",
1759 tape->name);
1760 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1761 }
1762
1763 /* Seagate Travan drives do not support DSC overlap. */
1764 if (strstr((char *)&drive->id[ATA_ID_PROD], "Seagate STT3401"))
1765 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1766
1767 tape->minor = minor;
1768 tape->name[0] = 'h';
1769 tape->name[1] = 't';
1770 tape->name[2] = '0' + minor;
1771 tape->chrdev_dir = IDETAPE_DIR_NONE;
1772
1773 idetape_get_inquiry_results(drive);
1774 idetape_get_mode_sense_results(drive);
1775 ide_tape_get_bsize_from_bdesc(drive);
1776 tape->user_bs_factor = 1;
1777 tape->buffer_size = *ctl * tape->blk_size;
1778 while (tape->buffer_size > 0xffff) {
1779 printk(KERN_NOTICE "ide-tape: decreasing stage size\n");
1780 *ctl /= 2;
1781 tape->buffer_size = *ctl * tape->blk_size;
1782 }
1783 buffer_size = tape->buffer_size;
1784
1785 /* select the "best" DSC read/write polling freq */
1786 speed = max(*(u16 *)&tape->caps[14], *(u16 *)&tape->caps[8]);
1787
1788 t = (IDETAPE_FIFO_THRESHOLD * tape->buffer_size * HZ) / (speed * 1000);
1789
1790 /*
1791 * Ensure that the number we got makes sense; limit it within
1792 * IDETAPE_DSC_RW_MIN and IDETAPE_DSC_RW_MAX.
1793 */
1794 tape->best_dsc_rw_freq = clamp_t(unsigned long, t, IDETAPE_DSC_RW_MIN,
1795 IDETAPE_DSC_RW_MAX);
1796 printk(KERN_INFO "ide-tape: %s <-> %s: %dKBps, %d*%dkB buffer, "
1797 "%ums tDSC%s\n",
1798 drive->name, tape->name, *(u16 *)&tape->caps[14],
1799 (*(u16 *)&tape->caps[16] * 512) / tape->buffer_size,
1800 tape->buffer_size / 1024,
1801 jiffies_to_msecs(tape->best_dsc_rw_freq),
1802 (drive->dev_flags & IDE_DFLAG_USING_DMA) ? ", DMA" : "");
1803
1804 ide_proc_register_driver(drive, tape->driver);
1805 }
1806
1807 static void ide_tape_remove(ide_drive_t *drive)
1808 {
1809 idetape_tape_t *tape = drive->driver_data;
1810
1811 ide_proc_unregister_driver(drive, tape->driver);
1812 device_del(&tape->dev);
1813 ide_unregister_region(tape->disk);
1814
1815 mutex_lock(&idetape_ref_mutex);
1816 put_device(&tape->dev);
1817 mutex_unlock(&idetape_ref_mutex);
1818 }
1819
1820 static void ide_tape_release(struct device *dev)
1821 {
1822 struct ide_tape_obj *tape = to_ide_drv(dev, ide_tape_obj);
1823 ide_drive_t *drive = tape->drive;
1824 struct gendisk *g = tape->disk;
1825
1826 BUG_ON(tape->valid);
1827
1828 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1829 drive->driver_data = NULL;
1830 device_destroy(idetape_sysfs_class, MKDEV(IDETAPE_MAJOR, tape->minor));
1831 device_destroy(idetape_sysfs_class,
1832 MKDEV(IDETAPE_MAJOR, tape->minor + 128));
1833 idetape_devs[tape->minor] = NULL;
1834 g->private_data = NULL;
1835 put_disk(g);
1836 kfree(tape);
1837 }
1838
1839 #ifdef CONFIG_IDE_PROC_FS
1840 static int idetape_name_proc_show(struct seq_file *m, void *v)
1841 {
1842 ide_drive_t *drive = (ide_drive_t *) m->private;
1843 idetape_tape_t *tape = drive->driver_data;
1844
1845 seq_printf(m, "%s\n", tape->name);
1846 return 0;
1847 }
1848
1849 static int idetape_name_proc_open(struct inode *inode, struct file *file)
1850 {
1851 return single_open(file, idetape_name_proc_show, PDE_DATA(inode));
1852 }
1853
1854 static const struct file_operations idetape_name_proc_fops = {
1855 .owner = THIS_MODULE,
1856 .open = idetape_name_proc_open,
1857 .read = seq_read,
1858 .llseek = seq_lseek,
1859 .release = single_release,
1860 };
1861
1862 static ide_proc_entry_t idetape_proc[] = {
1863 { "capacity", S_IFREG|S_IRUGO, &ide_capacity_proc_fops },
1864 { "name", S_IFREG|S_IRUGO, &idetape_name_proc_fops },
1865 {}
1866 };
1867
1868 static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)
1869 {
1870 return idetape_proc;
1871 }
1872
1873 static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)
1874 {
1875 return idetape_settings;
1876 }
1877 #endif
1878
1879 static int ide_tape_probe(ide_drive_t *);
1880
1881 static struct ide_driver idetape_driver = {
1882 .gen_driver = {
1883 .owner = THIS_MODULE,
1884 .name = "ide-tape",
1885 .bus = &ide_bus_type,
1886 },
1887 .probe = ide_tape_probe,
1888 .remove = ide_tape_remove,
1889 .version = IDETAPE_VERSION,
1890 .do_request = idetape_do_request,
1891 #ifdef CONFIG_IDE_PROC_FS
1892 .proc_entries = ide_tape_proc_entries,
1893 .proc_devsets = ide_tape_proc_devsets,
1894 #endif
1895 };
1896
1897 /* Our character device supporting functions, passed to register_chrdev. */
1898 static const struct file_operations idetape_fops = {
1899 .owner = THIS_MODULE,
1900 .read = idetape_chrdev_read,
1901 .write = idetape_chrdev_write,
1902 .unlocked_ioctl = idetape_chrdev_ioctl,
1903 .open = idetape_chrdev_open,
1904 .release = idetape_chrdev_release,
1905 .llseek = noop_llseek,
1906 };
1907
1908 static int idetape_open(struct block_device *bdev, fmode_t mode)
1909 {
1910 struct ide_tape_obj *tape;
1911
1912 mutex_lock(&ide_tape_mutex);
1913 tape = ide_tape_get(bdev->bd_disk, false, 0);
1914 mutex_unlock(&ide_tape_mutex);
1915
1916 if (!tape)
1917 return -ENXIO;
1918
1919 return 0;
1920 }
1921
1922 static void idetape_release(struct gendisk *disk, fmode_t mode)
1923 {
1924 struct ide_tape_obj *tape = ide_drv_g(disk, ide_tape_obj);
1925
1926 mutex_lock(&ide_tape_mutex);
1927 ide_tape_put(tape);
1928 mutex_unlock(&ide_tape_mutex);
1929 }
1930
1931 static int idetape_ioctl(struct block_device *bdev, fmode_t mode,
1932 unsigned int cmd, unsigned long arg)
1933 {
1934 struct ide_tape_obj *tape = ide_drv_g(bdev->bd_disk, ide_tape_obj);
1935 ide_drive_t *drive = tape->drive;
1936 int err;
1937
1938 mutex_lock(&ide_tape_mutex);
1939 err = generic_ide_ioctl(drive, bdev, cmd, arg);
1940 if (err == -EINVAL)
1941 err = idetape_blkdev_ioctl(drive, cmd, arg);
1942 mutex_unlock(&ide_tape_mutex);
1943
1944 return err;
1945 }
1946
1947 static const struct block_device_operations idetape_block_ops = {
1948 .owner = THIS_MODULE,
1949 .open = idetape_open,
1950 .release = idetape_release,
1951 .ioctl = idetape_ioctl,
1952 };
1953
1954 static int ide_tape_probe(ide_drive_t *drive)
1955 {
1956 idetape_tape_t *tape;
1957 struct gendisk *g;
1958 int minor;
1959
1960 ide_debug_log(IDE_DBG_FUNC, "enter");
1961
1962 if (!strstr(DRV_NAME, drive->driver_req))
1963 goto failed;
1964
1965 if (drive->media != ide_tape)
1966 goto failed;
1967
1968 if ((drive->dev_flags & IDE_DFLAG_ID_READ) &&
1969 ide_check_atapi_device(drive, DRV_NAME) == 0) {
1970 printk(KERN_ERR "ide-tape: %s: not supported by this version of"
1971 " the driver\n", drive->name);
1972 goto failed;
1973 }
1974 tape = kzalloc(sizeof(idetape_tape_t), GFP_KERNEL);
1975 if (tape == NULL) {
1976 printk(KERN_ERR "ide-tape: %s: Can't allocate a tape struct\n",
1977 drive->name);
1978 goto failed;
1979 }
1980
1981 g = alloc_disk(1 << PARTN_BITS);
1982 if (!g)
1983 goto out_free_tape;
1984
1985 ide_init_disk(g, drive);
1986
1987 tape->dev.parent = &drive->gendev;
1988 tape->dev.release = ide_tape_release;
1989 dev_set_name(&tape->dev, "%s", dev_name(&drive->gendev));
1990
1991 if (device_register(&tape->dev))
1992 goto out_free_disk;
1993
1994 tape->drive = drive;
1995 tape->driver = &idetape_driver;
1996 tape->disk = g;
1997
1998 g->private_data = &tape->driver;
1999
2000 drive->driver_data = tape;
2001
2002 mutex_lock(&idetape_ref_mutex);
2003 for (minor = 0; idetape_devs[minor]; minor++)
2004 ;
2005 idetape_devs[minor] = tape;
2006 mutex_unlock(&idetape_ref_mutex);
2007
2008 idetape_setup(drive, tape, minor);
2009
2010 device_create(idetape_sysfs_class, &drive->gendev,
2011 MKDEV(IDETAPE_MAJOR, minor), NULL, "%s", tape->name);
2012 device_create(idetape_sysfs_class, &drive->gendev,
2013 MKDEV(IDETAPE_MAJOR, minor + 128), NULL,
2014 "n%s", tape->name);
2015
2016 g->fops = &idetape_block_ops;
2017 ide_register_region(g);
2018
2019 return 0;
2020
2021 out_free_disk:
2022 put_disk(g);
2023 out_free_tape:
2024 kfree(tape);
2025 failed:
2026 return -ENODEV;
2027 }
2028
2029 static void __exit idetape_exit(void)
2030 {
2031 driver_unregister(&idetape_driver.gen_driver);
2032 class_destroy(idetape_sysfs_class);
2033 unregister_chrdev(IDETAPE_MAJOR, "ht");
2034 }
2035
2036 static int __init idetape_init(void)
2037 {
2038 int error = 1;
2039 idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
2040 if (IS_ERR(idetape_sysfs_class)) {
2041 idetape_sysfs_class = NULL;
2042 printk(KERN_ERR "Unable to create sysfs class for ide tapes\n");
2043 error = -EBUSY;
2044 goto out;
2045 }
2046
2047 if (register_chrdev(IDETAPE_MAJOR, "ht", &idetape_fops)) {
2048 printk(KERN_ERR "ide-tape: Failed to register chrdev"
2049 " interface\n");
2050 error = -EBUSY;
2051 goto out_free_class;
2052 }
2053
2054 error = driver_register(&idetape_driver.gen_driver);
2055 if (error)
2056 goto out_free_driver;
2057
2058 return 0;
2059
2060 out_free_driver:
2061 driver_unregister(&idetape_driver.gen_driver);
2062 out_free_class:
2063 class_destroy(idetape_sysfs_class);
2064 out:
2065 return error;
2066 }
2067
2068 MODULE_ALIAS("ide:*m-tape*");
2069 module_init(idetape_init);
2070 module_exit(idetape_exit);
2071 MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);
2072 MODULE_DESCRIPTION("ATAPI Streaming TAPE Driver");
2073 MODULE_LICENSE("GPL");
2074
2075
2076
2077
2078
2079 /* LDV_COMMENT_BEGIN_MAIN */
2080 #ifdef LDV_MAIN0_sequence_infinite_withcheck_stateful
2081
2082 /*###########################################################################*/
2083
2084 /*############## Driver Environment Generator 0.2 output ####################*/
2085
2086 /*###########################################################################*/
2087
2088
2089
2090 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */
2091 void ldv_check_final_state(void);
2092
2093 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */
2094 void ldv_check_return_value(int res);
2095
2096 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */
2097 void ldv_check_return_value_probe(int res);
2098
2099 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */
2100 void ldv_initialize(void);
2101
2102 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */
2103 void ldv_handler_precall(void);
2104
2105 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */
2106 int nondet_int(void);
2107
2108 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */
2109 int LDV_IN_INTERRUPT;
2110
2111 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */
2112 void ldv_main0_sequence_infinite_withcheck_stateful(void) {
2113
2114
2115
2116 /* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */
2117 /*============================= VARIABLE DECLARATION PART =============================*/
2118 /** STRUCT: struct type: file_operations, struct name: idetape_name_proc_fops **/
2119 /* content: static int idetape_name_proc_open(struct inode *inode, struct file *file)*/
2120 /* LDV_COMMENT_BEGIN_PREP */
2121 #define DRV_NAME "ide-tape"
2122 #define IDETAPE_VERSION "1.20"
2123 #undef IDETAPE_DEBUG_LOG
2124 #ifdef IDETAPE_DEBUG_LOG
2125 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2126 #else
2127 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2128 #endif
2129 #define IDETAPE_MAX_PC_RETRIES 3
2130 #define IDETAPE_FIFO_THRESHOLD 2
2131 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2132 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2133 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2134 #define IDETAPE_DSC_MA_FAST 2*HZ
2135 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2136 #define IDETAPE_DSC_MA_SLOW 30*HZ
2137 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2138 #define DOOR_UNLOCKED 0
2139 #define DOOR_LOCKED 1
2140 #define DOOR_EXPLICITLY_LOCKED 2
2141 #define IDETAPE_SPACE_OVER_FILEMARK 1
2142 #define IDETAPE_SPACE_TO_EOD 3
2143 #define IDETAPE_LU_LOAD_MASK 1
2144 #define IDETAPE_LU_RETENSION_MASK 2
2145 #define IDETAPE_LU_EOT_MASK 4
2146 #define IDETAPE_BLOCK_DESCRIPTOR 0
2147 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2148 #ifdef CONFIG_IDE_PROC_FS
2149 #define ide_tape_devset_get(name, field) \
2150 static int get_##name(ide_drive_t *drive) \
2151 { \
2152 idetape_tape_t *tape = drive->driver_data; \
2153 return tape->field; \
2154 }
2155 #define ide_tape_devset_set(name, field) \
2156 static int set_##name(ide_drive_t *drive, int arg) \
2157 { \
2158 idetape_tape_t *tape = drive->driver_data; \
2159 tape->field = arg; \
2160 return 0; \
2161 }
2162 #define ide_tape_devset_rw_field(_name, _field) \
2163 ide_tape_devset_get(_name, _field) \
2164 ide_tape_devset_set(_name, _field) \
2165 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2166 #define ide_tape_devset_r_field(_name, _field) \
2167 ide_tape_devset_get(_name, _field) \
2168 IDE_DEVSET(_name, 0, get_##_name, NULL)
2169 #endif
2170 #ifdef CONFIG_IDE_PROC_FS
2171 /* LDV_COMMENT_END_PREP */
2172 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_name_proc_open" */
2173 struct inode * var_group1;
2174 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_name_proc_open" */
2175 struct file * var_group2;
2176 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_name_proc_open" */
2177 static int res_idetape_name_proc_open_50;
2178 /* LDV_COMMENT_BEGIN_PREP */
2179 #endif
2180 #ifdef CONFIG_IDE_PROC_FS
2181 #endif
2182 /* LDV_COMMENT_END_PREP */
2183
2184 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
2185 /* content: static int ide_tape_probe(ide_drive_t *drive)*/
2186 /* LDV_COMMENT_BEGIN_PREP */
2187 #define DRV_NAME "ide-tape"
2188 #define IDETAPE_VERSION "1.20"
2189 #undef IDETAPE_DEBUG_LOG
2190 #ifdef IDETAPE_DEBUG_LOG
2191 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2192 #else
2193 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2194 #endif
2195 #define IDETAPE_MAX_PC_RETRIES 3
2196 #define IDETAPE_FIFO_THRESHOLD 2
2197 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2198 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2199 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2200 #define IDETAPE_DSC_MA_FAST 2*HZ
2201 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2202 #define IDETAPE_DSC_MA_SLOW 30*HZ
2203 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2204 #define DOOR_UNLOCKED 0
2205 #define DOOR_LOCKED 1
2206 #define DOOR_EXPLICITLY_LOCKED 2
2207 #define IDETAPE_SPACE_OVER_FILEMARK 1
2208 #define IDETAPE_SPACE_TO_EOD 3
2209 #define IDETAPE_LU_LOAD_MASK 1
2210 #define IDETAPE_LU_RETENSION_MASK 2
2211 #define IDETAPE_LU_EOT_MASK 4
2212 #define IDETAPE_BLOCK_DESCRIPTOR 0
2213 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2214 #ifdef CONFIG_IDE_PROC_FS
2215 #define ide_tape_devset_get(name, field) \
2216 static int get_##name(ide_drive_t *drive) \
2217 { \
2218 idetape_tape_t *tape = drive->driver_data; \
2219 return tape->field; \
2220 }
2221 #define ide_tape_devset_set(name, field) \
2222 static int set_##name(ide_drive_t *drive, int arg) \
2223 { \
2224 idetape_tape_t *tape = drive->driver_data; \
2225 tape->field = arg; \
2226 return 0; \
2227 }
2228 #define ide_tape_devset_rw_field(_name, _field) \
2229 ide_tape_devset_get(_name, _field) \
2230 ide_tape_devset_set(_name, _field) \
2231 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2232 #define ide_tape_devset_r_field(_name, _field) \
2233 ide_tape_devset_get(_name, _field) \
2234 IDE_DEVSET(_name, 0, get_##_name, NULL)
2235 #endif
2236 #ifdef CONFIG_IDE_PROC_FS
2237 #endif
2238 #ifdef CONFIG_IDE_PROC_FS
2239 #endif
2240 /* LDV_COMMENT_END_PREP */
2241 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_probe" */
2242 ide_drive_t * var_ide_tape_probe_56_p0;
2243 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "ide_tape_probe" */
2244 static int res_ide_tape_probe_56;
2245 /* content: static void ide_tape_remove(ide_drive_t *drive)*/
2246 /* LDV_COMMENT_BEGIN_PREP */
2247 #define DRV_NAME "ide-tape"
2248 #define IDETAPE_VERSION "1.20"
2249 #undef IDETAPE_DEBUG_LOG
2250 #ifdef IDETAPE_DEBUG_LOG
2251 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2252 #else
2253 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2254 #endif
2255 #define IDETAPE_MAX_PC_RETRIES 3
2256 #define IDETAPE_FIFO_THRESHOLD 2
2257 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2258 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2259 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2260 #define IDETAPE_DSC_MA_FAST 2*HZ
2261 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2262 #define IDETAPE_DSC_MA_SLOW 30*HZ
2263 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2264 #define DOOR_UNLOCKED 0
2265 #define DOOR_LOCKED 1
2266 #define DOOR_EXPLICITLY_LOCKED 2
2267 #define IDETAPE_SPACE_OVER_FILEMARK 1
2268 #define IDETAPE_SPACE_TO_EOD 3
2269 #define IDETAPE_LU_LOAD_MASK 1
2270 #define IDETAPE_LU_RETENSION_MASK 2
2271 #define IDETAPE_LU_EOT_MASK 4
2272 #define IDETAPE_BLOCK_DESCRIPTOR 0
2273 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2274 #ifdef CONFIG_IDE_PROC_FS
2275 #define ide_tape_devset_get(name, field) \
2276 static int get_##name(ide_drive_t *drive) \
2277 { \
2278 idetape_tape_t *tape = drive->driver_data; \
2279 return tape->field; \
2280 }
2281 #define ide_tape_devset_set(name, field) \
2282 static int set_##name(ide_drive_t *drive, int arg) \
2283 { \
2284 idetape_tape_t *tape = drive->driver_data; \
2285 tape->field = arg; \
2286 return 0; \
2287 }
2288 #define ide_tape_devset_rw_field(_name, _field) \
2289 ide_tape_devset_get(_name, _field) \
2290 ide_tape_devset_set(_name, _field) \
2291 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2292 #define ide_tape_devset_r_field(_name, _field) \
2293 ide_tape_devset_get(_name, _field) \
2294 IDE_DEVSET(_name, 0, get_##_name, NULL)
2295 #endif
2296 /* LDV_COMMENT_END_PREP */
2297 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_remove" */
2298 ide_drive_t * var_ide_tape_remove_47_p0;
2299 /* LDV_COMMENT_BEGIN_PREP */
2300 #ifdef CONFIG_IDE_PROC_FS
2301 #endif
2302 #ifdef CONFIG_IDE_PROC_FS
2303 #endif
2304 /* LDV_COMMENT_END_PREP */
2305 /* content: static ide_startstop_t idetape_do_request(ide_drive_t *drive, struct request *rq, sector_t block)*/
2306 /* LDV_COMMENT_BEGIN_PREP */
2307 #define DRV_NAME "ide-tape"
2308 #define IDETAPE_VERSION "1.20"
2309 #undef IDETAPE_DEBUG_LOG
2310 #ifdef IDETAPE_DEBUG_LOG
2311 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2312 #else
2313 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2314 #endif
2315 #define IDETAPE_MAX_PC_RETRIES 3
2316 #define IDETAPE_FIFO_THRESHOLD 2
2317 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2318 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2319 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2320 #define IDETAPE_DSC_MA_FAST 2*HZ
2321 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2322 #define IDETAPE_DSC_MA_SLOW 30*HZ
2323 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2324 #define DOOR_UNLOCKED 0
2325 #define DOOR_LOCKED 1
2326 #define DOOR_EXPLICITLY_LOCKED 2
2327 #define IDETAPE_SPACE_OVER_FILEMARK 1
2328 #define IDETAPE_SPACE_TO_EOD 3
2329 #define IDETAPE_LU_LOAD_MASK 1
2330 #define IDETAPE_LU_RETENSION_MASK 2
2331 #define IDETAPE_LU_EOT_MASK 4
2332 #define IDETAPE_BLOCK_DESCRIPTOR 0
2333 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2334 /* LDV_COMMENT_END_PREP */
2335 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_do_request" */
2336 ide_drive_t * var_idetape_do_request_10_p0;
2337 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_do_request" */
2338 struct request * var_group3;
2339 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_do_request" */
2340 sector_t var_idetape_do_request_10_p2;
2341 /* LDV_COMMENT_BEGIN_PREP */
2342 #ifdef CONFIG_IDE_PROC_FS
2343 #define ide_tape_devset_get(name, field) \
2344 static int get_##name(ide_drive_t *drive) \
2345 { \
2346 idetape_tape_t *tape = drive->driver_data; \
2347 return tape->field; \
2348 }
2349 #define ide_tape_devset_set(name, field) \
2350 static int set_##name(ide_drive_t *drive, int arg) \
2351 { \
2352 idetape_tape_t *tape = drive->driver_data; \
2353 tape->field = arg; \
2354 return 0; \
2355 }
2356 #define ide_tape_devset_rw_field(_name, _field) \
2357 ide_tape_devset_get(_name, _field) \
2358 ide_tape_devset_set(_name, _field) \
2359 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2360 #define ide_tape_devset_r_field(_name, _field) \
2361 ide_tape_devset_get(_name, _field) \
2362 IDE_DEVSET(_name, 0, get_##_name, NULL)
2363 #endif
2364 #ifdef CONFIG_IDE_PROC_FS
2365 #endif
2366 #ifdef CONFIG_IDE_PROC_FS
2367 #endif
2368 /* LDV_COMMENT_END_PREP */
2369 /* content: static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)*/
2370 /* LDV_COMMENT_BEGIN_PREP */
2371 #define DRV_NAME "ide-tape"
2372 #define IDETAPE_VERSION "1.20"
2373 #undef IDETAPE_DEBUG_LOG
2374 #ifdef IDETAPE_DEBUG_LOG
2375 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2376 #else
2377 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2378 #endif
2379 #define IDETAPE_MAX_PC_RETRIES 3
2380 #define IDETAPE_FIFO_THRESHOLD 2
2381 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2382 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2383 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2384 #define IDETAPE_DSC_MA_FAST 2*HZ
2385 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2386 #define IDETAPE_DSC_MA_SLOW 30*HZ
2387 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2388 #define DOOR_UNLOCKED 0
2389 #define DOOR_LOCKED 1
2390 #define DOOR_EXPLICITLY_LOCKED 2
2391 #define IDETAPE_SPACE_OVER_FILEMARK 1
2392 #define IDETAPE_SPACE_TO_EOD 3
2393 #define IDETAPE_LU_LOAD_MASK 1
2394 #define IDETAPE_LU_RETENSION_MASK 2
2395 #define IDETAPE_LU_EOT_MASK 4
2396 #define IDETAPE_BLOCK_DESCRIPTOR 0
2397 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2398 #ifdef CONFIG_IDE_PROC_FS
2399 #define ide_tape_devset_get(name, field) \
2400 static int get_##name(ide_drive_t *drive) \
2401 { \
2402 idetape_tape_t *tape = drive->driver_data; \
2403 return tape->field; \
2404 }
2405 #define ide_tape_devset_set(name, field) \
2406 static int set_##name(ide_drive_t *drive, int arg) \
2407 { \
2408 idetape_tape_t *tape = drive->driver_data; \
2409 tape->field = arg; \
2410 return 0; \
2411 }
2412 #define ide_tape_devset_rw_field(_name, _field) \
2413 ide_tape_devset_get(_name, _field) \
2414 ide_tape_devset_set(_name, _field) \
2415 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2416 #define ide_tape_devset_r_field(_name, _field) \
2417 ide_tape_devset_get(_name, _field) \
2418 IDE_DEVSET(_name, 0, get_##_name, NULL)
2419 #endif
2420 #ifdef CONFIG_IDE_PROC_FS
2421 /* LDV_COMMENT_END_PREP */
2422 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_proc_entries" */
2423 ide_drive_t * var_ide_tape_proc_entries_51_p0;
2424 /* LDV_COMMENT_BEGIN_PREP */
2425 #endif
2426 #ifdef CONFIG_IDE_PROC_FS
2427 #endif
2428 /* LDV_COMMENT_END_PREP */
2429 /* content: static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)*/
2430 /* LDV_COMMENT_BEGIN_PREP */
2431 #define DRV_NAME "ide-tape"
2432 #define IDETAPE_VERSION "1.20"
2433 #undef IDETAPE_DEBUG_LOG
2434 #ifdef IDETAPE_DEBUG_LOG
2435 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2436 #else
2437 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2438 #endif
2439 #define IDETAPE_MAX_PC_RETRIES 3
2440 #define IDETAPE_FIFO_THRESHOLD 2
2441 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2442 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2443 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2444 #define IDETAPE_DSC_MA_FAST 2*HZ
2445 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2446 #define IDETAPE_DSC_MA_SLOW 30*HZ
2447 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2448 #define DOOR_UNLOCKED 0
2449 #define DOOR_LOCKED 1
2450 #define DOOR_EXPLICITLY_LOCKED 2
2451 #define IDETAPE_SPACE_OVER_FILEMARK 1
2452 #define IDETAPE_SPACE_TO_EOD 3
2453 #define IDETAPE_LU_LOAD_MASK 1
2454 #define IDETAPE_LU_RETENSION_MASK 2
2455 #define IDETAPE_LU_EOT_MASK 4
2456 #define IDETAPE_BLOCK_DESCRIPTOR 0
2457 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2458 #ifdef CONFIG_IDE_PROC_FS
2459 #define ide_tape_devset_get(name, field) \
2460 static int get_##name(ide_drive_t *drive) \
2461 { \
2462 idetape_tape_t *tape = drive->driver_data; \
2463 return tape->field; \
2464 }
2465 #define ide_tape_devset_set(name, field) \
2466 static int set_##name(ide_drive_t *drive, int arg) \
2467 { \
2468 idetape_tape_t *tape = drive->driver_data; \
2469 tape->field = arg; \
2470 return 0; \
2471 }
2472 #define ide_tape_devset_rw_field(_name, _field) \
2473 ide_tape_devset_get(_name, _field) \
2474 ide_tape_devset_set(_name, _field) \
2475 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2476 #define ide_tape_devset_r_field(_name, _field) \
2477 ide_tape_devset_get(_name, _field) \
2478 IDE_DEVSET(_name, 0, get_##_name, NULL)
2479 #endif
2480 #ifdef CONFIG_IDE_PROC_FS
2481 /* LDV_COMMENT_END_PREP */
2482 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_proc_devsets" */
2483 ide_drive_t * var_ide_tape_proc_devsets_52_p0;
2484 /* LDV_COMMENT_BEGIN_PREP */
2485 #endif
2486 #ifdef CONFIG_IDE_PROC_FS
2487 #endif
2488 /* LDV_COMMENT_END_PREP */
2489
2490 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
2491 /* content: static ssize_t idetape_chrdev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/
2492 /* LDV_COMMENT_BEGIN_PREP */
2493 #define DRV_NAME "ide-tape"
2494 #define IDETAPE_VERSION "1.20"
2495 #undef IDETAPE_DEBUG_LOG
2496 #ifdef IDETAPE_DEBUG_LOG
2497 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2498 #else
2499 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2500 #endif
2501 #define IDETAPE_MAX_PC_RETRIES 3
2502 #define IDETAPE_FIFO_THRESHOLD 2
2503 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2504 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2505 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2506 #define IDETAPE_DSC_MA_FAST 2*HZ
2507 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2508 #define IDETAPE_DSC_MA_SLOW 30*HZ
2509 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2510 #define DOOR_UNLOCKED 0
2511 #define DOOR_LOCKED 1
2512 #define DOOR_EXPLICITLY_LOCKED 2
2513 #define IDETAPE_SPACE_OVER_FILEMARK 1
2514 #define IDETAPE_SPACE_TO_EOD 3
2515 #define IDETAPE_LU_LOAD_MASK 1
2516 #define IDETAPE_LU_RETENSION_MASK 2
2517 #define IDETAPE_LU_EOT_MASK 4
2518 #define IDETAPE_BLOCK_DESCRIPTOR 0
2519 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2520 /* LDV_COMMENT_END_PREP */
2521 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_read" */
2522 char __user * var_idetape_chrdev_read_30_p1;
2523 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_read" */
2524 size_t var_idetape_chrdev_read_30_p2;
2525 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_read" */
2526 loff_t * var_idetape_chrdev_read_30_p3;
2527 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_chrdev_read" */
2528 static ssize_t res_idetape_chrdev_read_30;
2529 /* LDV_COMMENT_BEGIN_PREP */
2530 #ifdef CONFIG_IDE_PROC_FS
2531 #define ide_tape_devset_get(name, field) \
2532 static int get_##name(ide_drive_t *drive) \
2533 { \
2534 idetape_tape_t *tape = drive->driver_data; \
2535 return tape->field; \
2536 }
2537 #define ide_tape_devset_set(name, field) \
2538 static int set_##name(ide_drive_t *drive, int arg) \
2539 { \
2540 idetape_tape_t *tape = drive->driver_data; \
2541 tape->field = arg; \
2542 return 0; \
2543 }
2544 #define ide_tape_devset_rw_field(_name, _field) \
2545 ide_tape_devset_get(_name, _field) \
2546 ide_tape_devset_set(_name, _field) \
2547 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2548 #define ide_tape_devset_r_field(_name, _field) \
2549 ide_tape_devset_get(_name, _field) \
2550 IDE_DEVSET(_name, 0, get_##_name, NULL)
2551 #endif
2552 #ifdef CONFIG_IDE_PROC_FS
2553 #endif
2554 #ifdef CONFIG_IDE_PROC_FS
2555 #endif
2556 /* LDV_COMMENT_END_PREP */
2557 /* content: static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)*/
2558 /* LDV_COMMENT_BEGIN_PREP */
2559 #define DRV_NAME "ide-tape"
2560 #define IDETAPE_VERSION "1.20"
2561 #undef IDETAPE_DEBUG_LOG
2562 #ifdef IDETAPE_DEBUG_LOG
2563 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2564 #else
2565 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2566 #endif
2567 #define IDETAPE_MAX_PC_RETRIES 3
2568 #define IDETAPE_FIFO_THRESHOLD 2
2569 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2570 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2571 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2572 #define IDETAPE_DSC_MA_FAST 2*HZ
2573 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2574 #define IDETAPE_DSC_MA_SLOW 30*HZ
2575 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2576 #define DOOR_UNLOCKED 0
2577 #define DOOR_LOCKED 1
2578 #define DOOR_EXPLICITLY_LOCKED 2
2579 #define IDETAPE_SPACE_OVER_FILEMARK 1
2580 #define IDETAPE_SPACE_TO_EOD 3
2581 #define IDETAPE_LU_LOAD_MASK 1
2582 #define IDETAPE_LU_RETENSION_MASK 2
2583 #define IDETAPE_LU_EOT_MASK 4
2584 #define IDETAPE_BLOCK_DESCRIPTOR 0
2585 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2586 /* LDV_COMMENT_END_PREP */
2587 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_write" */
2588 const char __user * var_idetape_chrdev_write_31_p1;
2589 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_write" */
2590 size_t var_idetape_chrdev_write_31_p2;
2591 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_write" */
2592 loff_t * var_idetape_chrdev_write_31_p3;
2593 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_chrdev_write" */
2594 static ssize_t res_idetape_chrdev_write_31;
2595 /* LDV_COMMENT_BEGIN_PREP */
2596 #ifdef CONFIG_IDE_PROC_FS
2597 #define ide_tape_devset_get(name, field) \
2598 static int get_##name(ide_drive_t *drive) \
2599 { \
2600 idetape_tape_t *tape = drive->driver_data; \
2601 return tape->field; \
2602 }
2603 #define ide_tape_devset_set(name, field) \
2604 static int set_##name(ide_drive_t *drive, int arg) \
2605 { \
2606 idetape_tape_t *tape = drive->driver_data; \
2607 tape->field = arg; \
2608 return 0; \
2609 }
2610 #define ide_tape_devset_rw_field(_name, _field) \
2611 ide_tape_devset_get(_name, _field) \
2612 ide_tape_devset_set(_name, _field) \
2613 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2614 #define ide_tape_devset_r_field(_name, _field) \
2615 ide_tape_devset_get(_name, _field) \
2616 IDE_DEVSET(_name, 0, get_##_name, NULL)
2617 #endif
2618 #ifdef CONFIG_IDE_PROC_FS
2619 #endif
2620 #ifdef CONFIG_IDE_PROC_FS
2621 #endif
2622 /* LDV_COMMENT_END_PREP */
2623 /* content: static long idetape_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)*/
2624 /* LDV_COMMENT_BEGIN_PREP */
2625 #define DRV_NAME "ide-tape"
2626 #define IDETAPE_VERSION "1.20"
2627 #undef IDETAPE_DEBUG_LOG
2628 #ifdef IDETAPE_DEBUG_LOG
2629 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2630 #else
2631 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2632 #endif
2633 #define IDETAPE_MAX_PC_RETRIES 3
2634 #define IDETAPE_FIFO_THRESHOLD 2
2635 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2636 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2637 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2638 #define IDETAPE_DSC_MA_FAST 2*HZ
2639 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2640 #define IDETAPE_DSC_MA_SLOW 30*HZ
2641 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2642 #define DOOR_UNLOCKED 0
2643 #define DOOR_LOCKED 1
2644 #define DOOR_EXPLICITLY_LOCKED 2
2645 #define IDETAPE_SPACE_OVER_FILEMARK 1
2646 #define IDETAPE_SPACE_TO_EOD 3
2647 #define IDETAPE_LU_LOAD_MASK 1
2648 #define IDETAPE_LU_RETENSION_MASK 2
2649 #define IDETAPE_LU_EOT_MASK 4
2650 #define IDETAPE_BLOCK_DESCRIPTOR 0
2651 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2652 /* LDV_COMMENT_END_PREP */
2653 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_ioctl" */
2654 unsigned int var_idetape_chrdev_ioctl_35_p1;
2655 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_ioctl" */
2656 unsigned long var_idetape_chrdev_ioctl_35_p2;
2657 /* LDV_COMMENT_BEGIN_PREP */
2658 #ifdef CONFIG_IDE_PROC_FS
2659 #define ide_tape_devset_get(name, field) \
2660 static int get_##name(ide_drive_t *drive) \
2661 { \
2662 idetape_tape_t *tape = drive->driver_data; \
2663 return tape->field; \
2664 }
2665 #define ide_tape_devset_set(name, field) \
2666 static int set_##name(ide_drive_t *drive, int arg) \
2667 { \
2668 idetape_tape_t *tape = drive->driver_data; \
2669 tape->field = arg; \
2670 return 0; \
2671 }
2672 #define ide_tape_devset_rw_field(_name, _field) \
2673 ide_tape_devset_get(_name, _field) \
2674 ide_tape_devset_set(_name, _field) \
2675 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2676 #define ide_tape_devset_r_field(_name, _field) \
2677 ide_tape_devset_get(_name, _field) \
2678 IDE_DEVSET(_name, 0, get_##_name, NULL)
2679 #endif
2680 #ifdef CONFIG_IDE_PROC_FS
2681 #endif
2682 #ifdef CONFIG_IDE_PROC_FS
2683 #endif
2684 /* LDV_COMMENT_END_PREP */
2685 /* content: static int idetape_chrdev_open(struct inode *inode, struct file *filp)*/
2686 /* LDV_COMMENT_BEGIN_PREP */
2687 #define DRV_NAME "ide-tape"
2688 #define IDETAPE_VERSION "1.20"
2689 #undef IDETAPE_DEBUG_LOG
2690 #ifdef IDETAPE_DEBUG_LOG
2691 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2692 #else
2693 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2694 #endif
2695 #define IDETAPE_MAX_PC_RETRIES 3
2696 #define IDETAPE_FIFO_THRESHOLD 2
2697 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2698 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2699 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2700 #define IDETAPE_DSC_MA_FAST 2*HZ
2701 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2702 #define IDETAPE_DSC_MA_SLOW 30*HZ
2703 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2704 #define DOOR_UNLOCKED 0
2705 #define DOOR_LOCKED 1
2706 #define DOOR_EXPLICITLY_LOCKED 2
2707 #define IDETAPE_SPACE_OVER_FILEMARK 1
2708 #define IDETAPE_SPACE_TO_EOD 3
2709 #define IDETAPE_LU_LOAD_MASK 1
2710 #define IDETAPE_LU_RETENSION_MASK 2
2711 #define IDETAPE_LU_EOT_MASK 4
2712 #define IDETAPE_BLOCK_DESCRIPTOR 0
2713 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2714 /* LDV_COMMENT_END_PREP */
2715 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_chrdev_open" */
2716 static int res_idetape_chrdev_open_37;
2717 /* LDV_COMMENT_BEGIN_PREP */
2718 #ifdef CONFIG_IDE_PROC_FS
2719 #define ide_tape_devset_get(name, field) \
2720 static int get_##name(ide_drive_t *drive) \
2721 { \
2722 idetape_tape_t *tape = drive->driver_data; \
2723 return tape->field; \
2724 }
2725 #define ide_tape_devset_set(name, field) \
2726 static int set_##name(ide_drive_t *drive, int arg) \
2727 { \
2728 idetape_tape_t *tape = drive->driver_data; \
2729 tape->field = arg; \
2730 return 0; \
2731 }
2732 #define ide_tape_devset_rw_field(_name, _field) \
2733 ide_tape_devset_get(_name, _field) \
2734 ide_tape_devset_set(_name, _field) \
2735 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2736 #define ide_tape_devset_r_field(_name, _field) \
2737 ide_tape_devset_get(_name, _field) \
2738 IDE_DEVSET(_name, 0, get_##_name, NULL)
2739 #endif
2740 #ifdef CONFIG_IDE_PROC_FS
2741 #endif
2742 #ifdef CONFIG_IDE_PROC_FS
2743 #endif
2744 /* LDV_COMMENT_END_PREP */
2745 /* content: static int idetape_chrdev_release(struct inode *inode, struct file *filp)*/
2746 /* LDV_COMMENT_BEGIN_PREP */
2747 #define DRV_NAME "ide-tape"
2748 #define IDETAPE_VERSION "1.20"
2749 #undef IDETAPE_DEBUG_LOG
2750 #ifdef IDETAPE_DEBUG_LOG
2751 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2752 #else
2753 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2754 #endif
2755 #define IDETAPE_MAX_PC_RETRIES 3
2756 #define IDETAPE_FIFO_THRESHOLD 2
2757 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2758 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2759 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2760 #define IDETAPE_DSC_MA_FAST 2*HZ
2761 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2762 #define IDETAPE_DSC_MA_SLOW 30*HZ
2763 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2764 #define DOOR_UNLOCKED 0
2765 #define DOOR_LOCKED 1
2766 #define DOOR_EXPLICITLY_LOCKED 2
2767 #define IDETAPE_SPACE_OVER_FILEMARK 1
2768 #define IDETAPE_SPACE_TO_EOD 3
2769 #define IDETAPE_LU_LOAD_MASK 1
2770 #define IDETAPE_LU_RETENSION_MASK 2
2771 #define IDETAPE_LU_EOT_MASK 4
2772 #define IDETAPE_BLOCK_DESCRIPTOR 0
2773 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2774 /* LDV_COMMENT_END_PREP */
2775 /* LDV_COMMENT_BEGIN_PREP */
2776 #ifdef CONFIG_IDE_PROC_FS
2777 #define ide_tape_devset_get(name, field) \
2778 static int get_##name(ide_drive_t *drive) \
2779 { \
2780 idetape_tape_t *tape = drive->driver_data; \
2781 return tape->field; \
2782 }
2783 #define ide_tape_devset_set(name, field) \
2784 static int set_##name(ide_drive_t *drive, int arg) \
2785 { \
2786 idetape_tape_t *tape = drive->driver_data; \
2787 tape->field = arg; \
2788 return 0; \
2789 }
2790 #define ide_tape_devset_rw_field(_name, _field) \
2791 ide_tape_devset_get(_name, _field) \
2792 ide_tape_devset_set(_name, _field) \
2793 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2794 #define ide_tape_devset_r_field(_name, _field) \
2795 ide_tape_devset_get(_name, _field) \
2796 IDE_DEVSET(_name, 0, get_##_name, NULL)
2797 #endif
2798 #ifdef CONFIG_IDE_PROC_FS
2799 #endif
2800 #ifdef CONFIG_IDE_PROC_FS
2801 #endif
2802 /* LDV_COMMENT_END_PREP */
2803
2804 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
2805 /* content: static int idetape_open(struct block_device *bdev, fmode_t mode)*/
2806 /* LDV_COMMENT_BEGIN_PREP */
2807 #define DRV_NAME "ide-tape"
2808 #define IDETAPE_VERSION "1.20"
2809 #undef IDETAPE_DEBUG_LOG
2810 #ifdef IDETAPE_DEBUG_LOG
2811 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2812 #else
2813 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2814 #endif
2815 #define IDETAPE_MAX_PC_RETRIES 3
2816 #define IDETAPE_FIFO_THRESHOLD 2
2817 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2818 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2819 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2820 #define IDETAPE_DSC_MA_FAST 2*HZ
2821 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2822 #define IDETAPE_DSC_MA_SLOW 30*HZ
2823 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2824 #define DOOR_UNLOCKED 0
2825 #define DOOR_LOCKED 1
2826 #define DOOR_EXPLICITLY_LOCKED 2
2827 #define IDETAPE_SPACE_OVER_FILEMARK 1
2828 #define IDETAPE_SPACE_TO_EOD 3
2829 #define IDETAPE_LU_LOAD_MASK 1
2830 #define IDETAPE_LU_RETENSION_MASK 2
2831 #define IDETAPE_LU_EOT_MASK 4
2832 #define IDETAPE_BLOCK_DESCRIPTOR 0
2833 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2834 #ifdef CONFIG_IDE_PROC_FS
2835 #define ide_tape_devset_get(name, field) \
2836 static int get_##name(ide_drive_t *drive) \
2837 { \
2838 idetape_tape_t *tape = drive->driver_data; \
2839 return tape->field; \
2840 }
2841 #define ide_tape_devset_set(name, field) \
2842 static int set_##name(ide_drive_t *drive, int arg) \
2843 { \
2844 idetape_tape_t *tape = drive->driver_data; \
2845 tape->field = arg; \
2846 return 0; \
2847 }
2848 #define ide_tape_devset_rw_field(_name, _field) \
2849 ide_tape_devset_get(_name, _field) \
2850 ide_tape_devset_set(_name, _field) \
2851 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2852 #define ide_tape_devset_r_field(_name, _field) \
2853 ide_tape_devset_get(_name, _field) \
2854 IDE_DEVSET(_name, 0, get_##_name, NULL)
2855 #endif
2856 #ifdef CONFIG_IDE_PROC_FS
2857 #endif
2858 #ifdef CONFIG_IDE_PROC_FS
2859 #endif
2860 /* LDV_COMMENT_END_PREP */
2861 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_open" */
2862 struct block_device * var_group4;
2863 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_open" */
2864 fmode_t var_idetape_open_53_p1;
2865 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_open" */
2866 static int res_idetape_open_53;
2867 /* content: static void idetape_release(struct gendisk *disk, fmode_t mode)*/
2868 /* LDV_COMMENT_BEGIN_PREP */
2869 #define DRV_NAME "ide-tape"
2870 #define IDETAPE_VERSION "1.20"
2871 #undef IDETAPE_DEBUG_LOG
2872 #ifdef IDETAPE_DEBUG_LOG
2873 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2874 #else
2875 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2876 #endif
2877 #define IDETAPE_MAX_PC_RETRIES 3
2878 #define IDETAPE_FIFO_THRESHOLD 2
2879 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2880 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2881 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2882 #define IDETAPE_DSC_MA_FAST 2*HZ
2883 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2884 #define IDETAPE_DSC_MA_SLOW 30*HZ
2885 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2886 #define DOOR_UNLOCKED 0
2887 #define DOOR_LOCKED 1
2888 #define DOOR_EXPLICITLY_LOCKED 2
2889 #define IDETAPE_SPACE_OVER_FILEMARK 1
2890 #define IDETAPE_SPACE_TO_EOD 3
2891 #define IDETAPE_LU_LOAD_MASK 1
2892 #define IDETAPE_LU_RETENSION_MASK 2
2893 #define IDETAPE_LU_EOT_MASK 4
2894 #define IDETAPE_BLOCK_DESCRIPTOR 0
2895 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2896 #ifdef CONFIG_IDE_PROC_FS
2897 #define ide_tape_devset_get(name, field) \
2898 static int get_##name(ide_drive_t *drive) \
2899 { \
2900 idetape_tape_t *tape = drive->driver_data; \
2901 return tape->field; \
2902 }
2903 #define ide_tape_devset_set(name, field) \
2904 static int set_##name(ide_drive_t *drive, int arg) \
2905 { \
2906 idetape_tape_t *tape = drive->driver_data; \
2907 tape->field = arg; \
2908 return 0; \
2909 }
2910 #define ide_tape_devset_rw_field(_name, _field) \
2911 ide_tape_devset_get(_name, _field) \
2912 ide_tape_devset_set(_name, _field) \
2913 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2914 #define ide_tape_devset_r_field(_name, _field) \
2915 ide_tape_devset_get(_name, _field) \
2916 IDE_DEVSET(_name, 0, get_##_name, NULL)
2917 #endif
2918 #ifdef CONFIG_IDE_PROC_FS
2919 #endif
2920 #ifdef CONFIG_IDE_PROC_FS
2921 #endif
2922 /* LDV_COMMENT_END_PREP */
2923 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_release" */
2924 struct gendisk * var_group5;
2925 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_release" */
2926 fmode_t var_idetape_release_54_p1;
2927 /* content: static int idetape_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)*/
2928 /* LDV_COMMENT_BEGIN_PREP */
2929 #define DRV_NAME "ide-tape"
2930 #define IDETAPE_VERSION "1.20"
2931 #undef IDETAPE_DEBUG_LOG
2932 #ifdef IDETAPE_DEBUG_LOG
2933 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2934 #else
2935 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2936 #endif
2937 #define IDETAPE_MAX_PC_RETRIES 3
2938 #define IDETAPE_FIFO_THRESHOLD 2
2939 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2940 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2941 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2942 #define IDETAPE_DSC_MA_FAST 2*HZ
2943 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2944 #define IDETAPE_DSC_MA_SLOW 30*HZ
2945 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2946 #define DOOR_UNLOCKED 0
2947 #define DOOR_LOCKED 1
2948 #define DOOR_EXPLICITLY_LOCKED 2
2949 #define IDETAPE_SPACE_OVER_FILEMARK 1
2950 #define IDETAPE_SPACE_TO_EOD 3
2951 #define IDETAPE_LU_LOAD_MASK 1
2952 #define IDETAPE_LU_RETENSION_MASK 2
2953 #define IDETAPE_LU_EOT_MASK 4
2954 #define IDETAPE_BLOCK_DESCRIPTOR 0
2955 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2956 #ifdef CONFIG_IDE_PROC_FS
2957 #define ide_tape_devset_get(name, field) \
2958 static int get_##name(ide_drive_t *drive) \
2959 { \
2960 idetape_tape_t *tape = drive->driver_data; \
2961 return tape->field; \
2962 }
2963 #define ide_tape_devset_set(name, field) \
2964 static int set_##name(ide_drive_t *drive, int arg) \
2965 { \
2966 idetape_tape_t *tape = drive->driver_data; \
2967 tape->field = arg; \
2968 return 0; \
2969 }
2970 #define ide_tape_devset_rw_field(_name, _field) \
2971 ide_tape_devset_get(_name, _field) \
2972 ide_tape_devset_set(_name, _field) \
2973 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2974 #define ide_tape_devset_r_field(_name, _field) \
2975 ide_tape_devset_get(_name, _field) \
2976 IDE_DEVSET(_name, 0, get_##_name, NULL)
2977 #endif
2978 #ifdef CONFIG_IDE_PROC_FS
2979 #endif
2980 #ifdef CONFIG_IDE_PROC_FS
2981 #endif
2982 /* LDV_COMMENT_END_PREP */
2983 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_ioctl" */
2984 fmode_t var_idetape_ioctl_55_p1;
2985 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_ioctl" */
2986 unsigned int var_idetape_ioctl_55_p2;
2987 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_ioctl" */
2988 unsigned long var_idetape_ioctl_55_p3;
2989
2990
2991
2992
2993 /* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */
2994 /* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */
2995 /*============================= VARIABLE INITIALIZING PART =============================*/
2996 LDV_IN_INTERRUPT=1;
2997
2998
2999
3000
3001 /* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */
3002 /* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */
3003 /*============================= FUNCTION CALL SECTION =============================*/
3004 /* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */
3005 ldv_initialize();
3006
3007 /** INIT: init_type: ST_MODULE_INIT **/
3008 /* content: static int __init idetape_init(void)*/
3009 /* LDV_COMMENT_BEGIN_PREP */
3010 #define DRV_NAME "ide-tape"
3011 #define IDETAPE_VERSION "1.20"
3012 #undef IDETAPE_DEBUG_LOG
3013 #ifdef IDETAPE_DEBUG_LOG
3014 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3015 #else
3016 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3017 #endif
3018 #define IDETAPE_MAX_PC_RETRIES 3
3019 #define IDETAPE_FIFO_THRESHOLD 2
3020 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3021 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3022 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3023 #define IDETAPE_DSC_MA_FAST 2*HZ
3024 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3025 #define IDETAPE_DSC_MA_SLOW 30*HZ
3026 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3027 #define DOOR_UNLOCKED 0
3028 #define DOOR_LOCKED 1
3029 #define DOOR_EXPLICITLY_LOCKED 2
3030 #define IDETAPE_SPACE_OVER_FILEMARK 1
3031 #define IDETAPE_SPACE_TO_EOD 3
3032 #define IDETAPE_LU_LOAD_MASK 1
3033 #define IDETAPE_LU_RETENSION_MASK 2
3034 #define IDETAPE_LU_EOT_MASK 4
3035 #define IDETAPE_BLOCK_DESCRIPTOR 0
3036 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3037 #ifdef CONFIG_IDE_PROC_FS
3038 #define ide_tape_devset_get(name, field) \
3039 static int get_##name(ide_drive_t *drive) \
3040 { \
3041 idetape_tape_t *tape = drive->driver_data; \
3042 return tape->field; \
3043 }
3044 #define ide_tape_devset_set(name, field) \
3045 static int set_##name(ide_drive_t *drive, int arg) \
3046 { \
3047 idetape_tape_t *tape = drive->driver_data; \
3048 tape->field = arg; \
3049 return 0; \
3050 }
3051 #define ide_tape_devset_rw_field(_name, _field) \
3052 ide_tape_devset_get(_name, _field) \
3053 ide_tape_devset_set(_name, _field) \
3054 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3055 #define ide_tape_devset_r_field(_name, _field) \
3056 ide_tape_devset_get(_name, _field) \
3057 IDE_DEVSET(_name, 0, get_##_name, NULL)
3058 #endif
3059 #ifdef CONFIG_IDE_PROC_FS
3060 #endif
3061 #ifdef CONFIG_IDE_PROC_FS
3062 #endif
3063 /* LDV_COMMENT_END_PREP */
3064 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */
3065 ldv_handler_precall();
3066 if(idetape_init())
3067 goto ldv_final;
3068 int ldv_s_idetape_name_proc_fops_file_operations = 0;
3069
3070 int ldv_s_idetape_driver_ide_driver = 0;
3071
3072
3073 int ldv_s_idetape_fops_file_operations = 0;
3074
3075
3076 int ldv_s_idetape_block_ops_block_device_operations = 0;
3077
3078
3079
3080 while( nondet_int()
3081 || !(ldv_s_idetape_name_proc_fops_file_operations == 0)
3082 || !(ldv_s_idetape_driver_ide_driver == 0)
3083 || !(ldv_s_idetape_fops_file_operations == 0)
3084 || !(ldv_s_idetape_block_ops_block_device_operations == 0)
3085 ) {
3086
3087 switch(nondet_int()) {
3088
3089 case 0: {
3090
3091 /** STRUCT: struct type: file_operations, struct name: idetape_name_proc_fops **/
3092 if(ldv_s_idetape_name_proc_fops_file_operations==0) {
3093
3094 /* content: static int idetape_name_proc_open(struct inode *inode, struct file *file)*/
3095 /* LDV_COMMENT_BEGIN_PREP */
3096 #define DRV_NAME "ide-tape"
3097 #define IDETAPE_VERSION "1.20"
3098 #undef IDETAPE_DEBUG_LOG
3099 #ifdef IDETAPE_DEBUG_LOG
3100 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3101 #else
3102 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3103 #endif
3104 #define IDETAPE_MAX_PC_RETRIES 3
3105 #define IDETAPE_FIFO_THRESHOLD 2
3106 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3107 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3108 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3109 #define IDETAPE_DSC_MA_FAST 2*HZ
3110 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3111 #define IDETAPE_DSC_MA_SLOW 30*HZ
3112 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3113 #define DOOR_UNLOCKED 0
3114 #define DOOR_LOCKED 1
3115 #define DOOR_EXPLICITLY_LOCKED 2
3116 #define IDETAPE_SPACE_OVER_FILEMARK 1
3117 #define IDETAPE_SPACE_TO_EOD 3
3118 #define IDETAPE_LU_LOAD_MASK 1
3119 #define IDETAPE_LU_RETENSION_MASK 2
3120 #define IDETAPE_LU_EOT_MASK 4
3121 #define IDETAPE_BLOCK_DESCRIPTOR 0
3122 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3123 #ifdef CONFIG_IDE_PROC_FS
3124 #define ide_tape_devset_get(name, field) \
3125 static int get_##name(ide_drive_t *drive) \
3126 { \
3127 idetape_tape_t *tape = drive->driver_data; \
3128 return tape->field; \
3129 }
3130 #define ide_tape_devset_set(name, field) \
3131 static int set_##name(ide_drive_t *drive, int arg) \
3132 { \
3133 idetape_tape_t *tape = drive->driver_data; \
3134 tape->field = arg; \
3135 return 0; \
3136 }
3137 #define ide_tape_devset_rw_field(_name, _field) \
3138 ide_tape_devset_get(_name, _field) \
3139 ide_tape_devset_set(_name, _field) \
3140 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3141 #define ide_tape_devset_r_field(_name, _field) \
3142 ide_tape_devset_get(_name, _field) \
3143 IDE_DEVSET(_name, 0, get_##_name, NULL)
3144 #endif
3145 #ifdef CONFIG_IDE_PROC_FS
3146 /* LDV_COMMENT_END_PREP */
3147 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "idetape_name_proc_fops". Standart function test for correct return result. */
3148 ldv_handler_precall();
3149 res_idetape_name_proc_open_50 = idetape_name_proc_open( var_group1, var_group2);
3150 ldv_check_return_value(res_idetape_name_proc_open_50);
3151 if(res_idetape_name_proc_open_50)
3152 goto ldv_module_exit;
3153 /* LDV_COMMENT_BEGIN_PREP */
3154 #endif
3155 #ifdef CONFIG_IDE_PROC_FS
3156 #endif
3157 /* LDV_COMMENT_END_PREP */
3158 ldv_s_idetape_name_proc_fops_file_operations=0;
3159
3160 }
3161
3162 }
3163
3164 break;
3165 case 1: {
3166
3167 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3168 if(ldv_s_idetape_driver_ide_driver==0) {
3169
3170 /* content: static int ide_tape_probe(ide_drive_t *drive)*/
3171 /* LDV_COMMENT_BEGIN_PREP */
3172 #define DRV_NAME "ide-tape"
3173 #define IDETAPE_VERSION "1.20"
3174 #undef IDETAPE_DEBUG_LOG
3175 #ifdef IDETAPE_DEBUG_LOG
3176 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3177 #else
3178 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3179 #endif
3180 #define IDETAPE_MAX_PC_RETRIES 3
3181 #define IDETAPE_FIFO_THRESHOLD 2
3182 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3183 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3184 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3185 #define IDETAPE_DSC_MA_FAST 2*HZ
3186 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3187 #define IDETAPE_DSC_MA_SLOW 30*HZ
3188 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3189 #define DOOR_UNLOCKED 0
3190 #define DOOR_LOCKED 1
3191 #define DOOR_EXPLICITLY_LOCKED 2
3192 #define IDETAPE_SPACE_OVER_FILEMARK 1
3193 #define IDETAPE_SPACE_TO_EOD 3
3194 #define IDETAPE_LU_LOAD_MASK 1
3195 #define IDETAPE_LU_RETENSION_MASK 2
3196 #define IDETAPE_LU_EOT_MASK 4
3197 #define IDETAPE_BLOCK_DESCRIPTOR 0
3198 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3199 #ifdef CONFIG_IDE_PROC_FS
3200 #define ide_tape_devset_get(name, field) \
3201 static int get_##name(ide_drive_t *drive) \
3202 { \
3203 idetape_tape_t *tape = drive->driver_data; \
3204 return tape->field; \
3205 }
3206 #define ide_tape_devset_set(name, field) \
3207 static int set_##name(ide_drive_t *drive, int arg) \
3208 { \
3209 idetape_tape_t *tape = drive->driver_data; \
3210 tape->field = arg; \
3211 return 0; \
3212 }
3213 #define ide_tape_devset_rw_field(_name, _field) \
3214 ide_tape_devset_get(_name, _field) \
3215 ide_tape_devset_set(_name, _field) \
3216 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3217 #define ide_tape_devset_r_field(_name, _field) \
3218 ide_tape_devset_get(_name, _field) \
3219 IDE_DEVSET(_name, 0, get_##_name, NULL)
3220 #endif
3221 #ifdef CONFIG_IDE_PROC_FS
3222 #endif
3223 #ifdef CONFIG_IDE_PROC_FS
3224 #endif
3225 /* LDV_COMMENT_END_PREP */
3226 /* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "idetape_driver". Standart function test for correct return result. */
3227 res_ide_tape_probe_56 = ide_tape_probe( var_ide_tape_probe_56_p0);
3228 ldv_check_return_value(res_ide_tape_probe_56);
3229 ldv_check_return_value_probe(res_ide_tape_probe_56);
3230 if(res_ide_tape_probe_56)
3231 goto ldv_module_exit;
3232 ldv_s_idetape_driver_ide_driver++;
3233
3234 }
3235
3236 }
3237
3238 break;
3239 case 2: {
3240
3241 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3242 if(ldv_s_idetape_driver_ide_driver==1) {
3243
3244 /* content: static void ide_tape_remove(ide_drive_t *drive)*/
3245 /* LDV_COMMENT_BEGIN_PREP */
3246 #define DRV_NAME "ide-tape"
3247 #define IDETAPE_VERSION "1.20"
3248 #undef IDETAPE_DEBUG_LOG
3249 #ifdef IDETAPE_DEBUG_LOG
3250 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3251 #else
3252 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3253 #endif
3254 #define IDETAPE_MAX_PC_RETRIES 3
3255 #define IDETAPE_FIFO_THRESHOLD 2
3256 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3257 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3258 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3259 #define IDETAPE_DSC_MA_FAST 2*HZ
3260 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3261 #define IDETAPE_DSC_MA_SLOW 30*HZ
3262 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3263 #define DOOR_UNLOCKED 0
3264 #define DOOR_LOCKED 1
3265 #define DOOR_EXPLICITLY_LOCKED 2
3266 #define IDETAPE_SPACE_OVER_FILEMARK 1
3267 #define IDETAPE_SPACE_TO_EOD 3
3268 #define IDETAPE_LU_LOAD_MASK 1
3269 #define IDETAPE_LU_RETENSION_MASK 2
3270 #define IDETAPE_LU_EOT_MASK 4
3271 #define IDETAPE_BLOCK_DESCRIPTOR 0
3272 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3273 #ifdef CONFIG_IDE_PROC_FS
3274 #define ide_tape_devset_get(name, field) \
3275 static int get_##name(ide_drive_t *drive) \
3276 { \
3277 idetape_tape_t *tape = drive->driver_data; \
3278 return tape->field; \
3279 }
3280 #define ide_tape_devset_set(name, field) \
3281 static int set_##name(ide_drive_t *drive, int arg) \
3282 { \
3283 idetape_tape_t *tape = drive->driver_data; \
3284 tape->field = arg; \
3285 return 0; \
3286 }
3287 #define ide_tape_devset_rw_field(_name, _field) \
3288 ide_tape_devset_get(_name, _field) \
3289 ide_tape_devset_set(_name, _field) \
3290 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3291 #define ide_tape_devset_r_field(_name, _field) \
3292 ide_tape_devset_get(_name, _field) \
3293 IDE_DEVSET(_name, 0, get_##_name, NULL)
3294 #endif
3295 /* LDV_COMMENT_END_PREP */
3296 /* LDV_COMMENT_FUNCTION_CALL Function from field "remove" from driver structure with callbacks "idetape_driver" */
3297 ldv_handler_precall();
3298 ide_tape_remove( var_ide_tape_remove_47_p0);
3299 /* LDV_COMMENT_BEGIN_PREP */
3300 #ifdef CONFIG_IDE_PROC_FS
3301 #endif
3302 #ifdef CONFIG_IDE_PROC_FS
3303 #endif
3304 /* LDV_COMMENT_END_PREP */
3305 ldv_s_idetape_driver_ide_driver=0;
3306
3307 }
3308
3309 }
3310
3311 break;
3312 case 3: {
3313
3314 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3315
3316
3317 /* content: static ide_startstop_t idetape_do_request(ide_drive_t *drive, struct request *rq, sector_t block)*/
3318 /* LDV_COMMENT_BEGIN_PREP */
3319 #define DRV_NAME "ide-tape"
3320 #define IDETAPE_VERSION "1.20"
3321 #undef IDETAPE_DEBUG_LOG
3322 #ifdef IDETAPE_DEBUG_LOG
3323 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3324 #else
3325 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3326 #endif
3327 #define IDETAPE_MAX_PC_RETRIES 3
3328 #define IDETAPE_FIFO_THRESHOLD 2
3329 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3330 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3331 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3332 #define IDETAPE_DSC_MA_FAST 2*HZ
3333 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3334 #define IDETAPE_DSC_MA_SLOW 30*HZ
3335 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3336 #define DOOR_UNLOCKED 0
3337 #define DOOR_LOCKED 1
3338 #define DOOR_EXPLICITLY_LOCKED 2
3339 #define IDETAPE_SPACE_OVER_FILEMARK 1
3340 #define IDETAPE_SPACE_TO_EOD 3
3341 #define IDETAPE_LU_LOAD_MASK 1
3342 #define IDETAPE_LU_RETENSION_MASK 2
3343 #define IDETAPE_LU_EOT_MASK 4
3344 #define IDETAPE_BLOCK_DESCRIPTOR 0
3345 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3346 /* LDV_COMMENT_END_PREP */
3347 /* LDV_COMMENT_FUNCTION_CALL Function from field "do_request" from driver structure with callbacks "idetape_driver" */
3348 ldv_handler_precall();
3349 idetape_do_request( var_idetape_do_request_10_p0, var_group3, var_idetape_do_request_10_p2);
3350 /* LDV_COMMENT_BEGIN_PREP */
3351 #ifdef CONFIG_IDE_PROC_FS
3352 #define ide_tape_devset_get(name, field) \
3353 static int get_##name(ide_drive_t *drive) \
3354 { \
3355 idetape_tape_t *tape = drive->driver_data; \
3356 return tape->field; \
3357 }
3358 #define ide_tape_devset_set(name, field) \
3359 static int set_##name(ide_drive_t *drive, int arg) \
3360 { \
3361 idetape_tape_t *tape = drive->driver_data; \
3362 tape->field = arg; \
3363 return 0; \
3364 }
3365 #define ide_tape_devset_rw_field(_name, _field) \
3366 ide_tape_devset_get(_name, _field) \
3367 ide_tape_devset_set(_name, _field) \
3368 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3369 #define ide_tape_devset_r_field(_name, _field) \
3370 ide_tape_devset_get(_name, _field) \
3371 IDE_DEVSET(_name, 0, get_##_name, NULL)
3372 #endif
3373 #ifdef CONFIG_IDE_PROC_FS
3374 #endif
3375 #ifdef CONFIG_IDE_PROC_FS
3376 #endif
3377 /* LDV_COMMENT_END_PREP */
3378
3379
3380
3381
3382 }
3383
3384 break;
3385 case 4: {
3386
3387 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3388
3389
3390 /* content: static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)*/
3391 /* LDV_COMMENT_BEGIN_PREP */
3392 #define DRV_NAME "ide-tape"
3393 #define IDETAPE_VERSION "1.20"
3394 #undef IDETAPE_DEBUG_LOG
3395 #ifdef IDETAPE_DEBUG_LOG
3396 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3397 #else
3398 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3399 #endif
3400 #define IDETAPE_MAX_PC_RETRIES 3
3401 #define IDETAPE_FIFO_THRESHOLD 2
3402 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3403 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3404 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3405 #define IDETAPE_DSC_MA_FAST 2*HZ
3406 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3407 #define IDETAPE_DSC_MA_SLOW 30*HZ
3408 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3409 #define DOOR_UNLOCKED 0
3410 #define DOOR_LOCKED 1
3411 #define DOOR_EXPLICITLY_LOCKED 2
3412 #define IDETAPE_SPACE_OVER_FILEMARK 1
3413 #define IDETAPE_SPACE_TO_EOD 3
3414 #define IDETAPE_LU_LOAD_MASK 1
3415 #define IDETAPE_LU_RETENSION_MASK 2
3416 #define IDETAPE_LU_EOT_MASK 4
3417 #define IDETAPE_BLOCK_DESCRIPTOR 0
3418 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3419 #ifdef CONFIG_IDE_PROC_FS
3420 #define ide_tape_devset_get(name, field) \
3421 static int get_##name(ide_drive_t *drive) \
3422 { \
3423 idetape_tape_t *tape = drive->driver_data; \
3424 return tape->field; \
3425 }
3426 #define ide_tape_devset_set(name, field) \
3427 static int set_##name(ide_drive_t *drive, int arg) \
3428 { \
3429 idetape_tape_t *tape = drive->driver_data; \
3430 tape->field = arg; \
3431 return 0; \
3432 }
3433 #define ide_tape_devset_rw_field(_name, _field) \
3434 ide_tape_devset_get(_name, _field) \
3435 ide_tape_devset_set(_name, _field) \
3436 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3437 #define ide_tape_devset_r_field(_name, _field) \
3438 ide_tape_devset_get(_name, _field) \
3439 IDE_DEVSET(_name, 0, get_##_name, NULL)
3440 #endif
3441 #ifdef CONFIG_IDE_PROC_FS
3442 /* LDV_COMMENT_END_PREP */
3443 /* LDV_COMMENT_FUNCTION_CALL Function from field "proc_entries" from driver structure with callbacks "idetape_driver" */
3444 ldv_handler_precall();
3445 ide_tape_proc_entries( var_ide_tape_proc_entries_51_p0);
3446 /* LDV_COMMENT_BEGIN_PREP */
3447 #endif
3448 #ifdef CONFIG_IDE_PROC_FS
3449 #endif
3450 /* LDV_COMMENT_END_PREP */
3451
3452
3453
3454
3455 }
3456
3457 break;
3458 case 5: {
3459
3460 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3461
3462
3463 /* content: static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)*/
3464 /* LDV_COMMENT_BEGIN_PREP */
3465 #define DRV_NAME "ide-tape"
3466 #define IDETAPE_VERSION "1.20"
3467 #undef IDETAPE_DEBUG_LOG
3468 #ifdef IDETAPE_DEBUG_LOG
3469 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3470 #else
3471 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3472 #endif
3473 #define IDETAPE_MAX_PC_RETRIES 3
3474 #define IDETAPE_FIFO_THRESHOLD 2
3475 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3476 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3477 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3478 #define IDETAPE_DSC_MA_FAST 2*HZ
3479 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3480 #define IDETAPE_DSC_MA_SLOW 30*HZ
3481 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3482 #define DOOR_UNLOCKED 0
3483 #define DOOR_LOCKED 1
3484 #define DOOR_EXPLICITLY_LOCKED 2
3485 #define IDETAPE_SPACE_OVER_FILEMARK 1
3486 #define IDETAPE_SPACE_TO_EOD 3
3487 #define IDETAPE_LU_LOAD_MASK 1
3488 #define IDETAPE_LU_RETENSION_MASK 2
3489 #define IDETAPE_LU_EOT_MASK 4
3490 #define IDETAPE_BLOCK_DESCRIPTOR 0
3491 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3492 #ifdef CONFIG_IDE_PROC_FS
3493 #define ide_tape_devset_get(name, field) \
3494 static int get_##name(ide_drive_t *drive) \
3495 { \
3496 idetape_tape_t *tape = drive->driver_data; \
3497 return tape->field; \
3498 }
3499 #define ide_tape_devset_set(name, field) \
3500 static int set_##name(ide_drive_t *drive, int arg) \
3501 { \
3502 idetape_tape_t *tape = drive->driver_data; \
3503 tape->field = arg; \
3504 return 0; \
3505 }
3506 #define ide_tape_devset_rw_field(_name, _field) \
3507 ide_tape_devset_get(_name, _field) \
3508 ide_tape_devset_set(_name, _field) \
3509 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3510 #define ide_tape_devset_r_field(_name, _field) \
3511 ide_tape_devset_get(_name, _field) \
3512 IDE_DEVSET(_name, 0, get_##_name, NULL)
3513 #endif
3514 #ifdef CONFIG_IDE_PROC_FS
3515 /* LDV_COMMENT_END_PREP */
3516 /* LDV_COMMENT_FUNCTION_CALL Function from field "proc_devsets" from driver structure with callbacks "idetape_driver" */
3517 ldv_handler_precall();
3518 ide_tape_proc_devsets( var_ide_tape_proc_devsets_52_p0);
3519 /* LDV_COMMENT_BEGIN_PREP */
3520 #endif
3521 #ifdef CONFIG_IDE_PROC_FS
3522 #endif
3523 /* LDV_COMMENT_END_PREP */
3524
3525
3526
3527
3528 }
3529
3530 break;
3531 case 6: {
3532
3533 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3534 if(ldv_s_idetape_fops_file_operations==0) {
3535
3536 /* content: static int idetape_chrdev_open(struct inode *inode, struct file *filp)*/
3537 /* LDV_COMMENT_BEGIN_PREP */
3538 #define DRV_NAME "ide-tape"
3539 #define IDETAPE_VERSION "1.20"
3540 #undef IDETAPE_DEBUG_LOG
3541 #ifdef IDETAPE_DEBUG_LOG
3542 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3543 #else
3544 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3545 #endif
3546 #define IDETAPE_MAX_PC_RETRIES 3
3547 #define IDETAPE_FIFO_THRESHOLD 2
3548 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3549 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3550 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3551 #define IDETAPE_DSC_MA_FAST 2*HZ
3552 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3553 #define IDETAPE_DSC_MA_SLOW 30*HZ
3554 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3555 #define DOOR_UNLOCKED 0
3556 #define DOOR_LOCKED 1
3557 #define DOOR_EXPLICITLY_LOCKED 2
3558 #define IDETAPE_SPACE_OVER_FILEMARK 1
3559 #define IDETAPE_SPACE_TO_EOD 3
3560 #define IDETAPE_LU_LOAD_MASK 1
3561 #define IDETAPE_LU_RETENSION_MASK 2
3562 #define IDETAPE_LU_EOT_MASK 4
3563 #define IDETAPE_BLOCK_DESCRIPTOR 0
3564 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3565 /* LDV_COMMENT_END_PREP */
3566 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "idetape_fops". Standart function test for correct return result. */
3567 ldv_handler_precall();
3568 res_idetape_chrdev_open_37 = idetape_chrdev_open( var_group1, var_group2);
3569 ldv_check_return_value(res_idetape_chrdev_open_37);
3570 if(res_idetape_chrdev_open_37)
3571 goto ldv_module_exit;
3572 /* LDV_COMMENT_BEGIN_PREP */
3573 #ifdef CONFIG_IDE_PROC_FS
3574 #define ide_tape_devset_get(name, field) \
3575 static int get_##name(ide_drive_t *drive) \
3576 { \
3577 idetape_tape_t *tape = drive->driver_data; \
3578 return tape->field; \
3579 }
3580 #define ide_tape_devset_set(name, field) \
3581 static int set_##name(ide_drive_t *drive, int arg) \
3582 { \
3583 idetape_tape_t *tape = drive->driver_data; \
3584 tape->field = arg; \
3585 return 0; \
3586 }
3587 #define ide_tape_devset_rw_field(_name, _field) \
3588 ide_tape_devset_get(_name, _field) \
3589 ide_tape_devset_set(_name, _field) \
3590 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3591 #define ide_tape_devset_r_field(_name, _field) \
3592 ide_tape_devset_get(_name, _field) \
3593 IDE_DEVSET(_name, 0, get_##_name, NULL)
3594 #endif
3595 #ifdef CONFIG_IDE_PROC_FS
3596 #endif
3597 #ifdef CONFIG_IDE_PROC_FS
3598 #endif
3599 /* LDV_COMMENT_END_PREP */
3600 ldv_s_idetape_fops_file_operations++;
3601
3602 }
3603
3604 }
3605
3606 break;
3607 case 7: {
3608
3609 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3610 if(ldv_s_idetape_fops_file_operations==1) {
3611
3612 /* content: static ssize_t idetape_chrdev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/
3613 /* LDV_COMMENT_BEGIN_PREP */
3614 #define DRV_NAME "ide-tape"
3615 #define IDETAPE_VERSION "1.20"
3616 #undef IDETAPE_DEBUG_LOG
3617 #ifdef IDETAPE_DEBUG_LOG
3618 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3619 #else
3620 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3621 #endif
3622 #define IDETAPE_MAX_PC_RETRIES 3
3623 #define IDETAPE_FIFO_THRESHOLD 2
3624 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3625 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3626 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3627 #define IDETAPE_DSC_MA_FAST 2*HZ
3628 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3629 #define IDETAPE_DSC_MA_SLOW 30*HZ
3630 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3631 #define DOOR_UNLOCKED 0
3632 #define DOOR_LOCKED 1
3633 #define DOOR_EXPLICITLY_LOCKED 2
3634 #define IDETAPE_SPACE_OVER_FILEMARK 1
3635 #define IDETAPE_SPACE_TO_EOD 3
3636 #define IDETAPE_LU_LOAD_MASK 1
3637 #define IDETAPE_LU_RETENSION_MASK 2
3638 #define IDETAPE_LU_EOT_MASK 4
3639 #define IDETAPE_BLOCK_DESCRIPTOR 0
3640 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3641 /* LDV_COMMENT_END_PREP */
3642 /* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "idetape_fops". Standart function test for correct return result. */
3643 ldv_handler_precall();
3644 res_idetape_chrdev_read_30 = idetape_chrdev_read( var_group2, var_idetape_chrdev_read_30_p1, var_idetape_chrdev_read_30_p2, var_idetape_chrdev_read_30_p3);
3645 ldv_check_return_value(res_idetape_chrdev_read_30);
3646 if(res_idetape_chrdev_read_30 < 0)
3647 goto ldv_module_exit;
3648 /* LDV_COMMENT_BEGIN_PREP */
3649 #ifdef CONFIG_IDE_PROC_FS
3650 #define ide_tape_devset_get(name, field) \
3651 static int get_##name(ide_drive_t *drive) \
3652 { \
3653 idetape_tape_t *tape = drive->driver_data; \
3654 return tape->field; \
3655 }
3656 #define ide_tape_devset_set(name, field) \
3657 static int set_##name(ide_drive_t *drive, int arg) \
3658 { \
3659 idetape_tape_t *tape = drive->driver_data; \
3660 tape->field = arg; \
3661 return 0; \
3662 }
3663 #define ide_tape_devset_rw_field(_name, _field) \
3664 ide_tape_devset_get(_name, _field) \
3665 ide_tape_devset_set(_name, _field) \
3666 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3667 #define ide_tape_devset_r_field(_name, _field) \
3668 ide_tape_devset_get(_name, _field) \
3669 IDE_DEVSET(_name, 0, get_##_name, NULL)
3670 #endif
3671 #ifdef CONFIG_IDE_PROC_FS
3672 #endif
3673 #ifdef CONFIG_IDE_PROC_FS
3674 #endif
3675 /* LDV_COMMENT_END_PREP */
3676 ldv_s_idetape_fops_file_operations++;
3677
3678 }
3679
3680 }
3681
3682 break;
3683 case 8: {
3684
3685 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3686 if(ldv_s_idetape_fops_file_operations==2) {
3687
3688 /* content: static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)*/
3689 /* LDV_COMMENT_BEGIN_PREP */
3690 #define DRV_NAME "ide-tape"
3691 #define IDETAPE_VERSION "1.20"
3692 #undef IDETAPE_DEBUG_LOG
3693 #ifdef IDETAPE_DEBUG_LOG
3694 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3695 #else
3696 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3697 #endif
3698 #define IDETAPE_MAX_PC_RETRIES 3
3699 #define IDETAPE_FIFO_THRESHOLD 2
3700 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3701 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3702 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3703 #define IDETAPE_DSC_MA_FAST 2*HZ
3704 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3705 #define IDETAPE_DSC_MA_SLOW 30*HZ
3706 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3707 #define DOOR_UNLOCKED 0
3708 #define DOOR_LOCKED 1
3709 #define DOOR_EXPLICITLY_LOCKED 2
3710 #define IDETAPE_SPACE_OVER_FILEMARK 1
3711 #define IDETAPE_SPACE_TO_EOD 3
3712 #define IDETAPE_LU_LOAD_MASK 1
3713 #define IDETAPE_LU_RETENSION_MASK 2
3714 #define IDETAPE_LU_EOT_MASK 4
3715 #define IDETAPE_BLOCK_DESCRIPTOR 0
3716 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3717 /* LDV_COMMENT_END_PREP */
3718 /* LDV_COMMENT_FUNCTION_CALL Function from field "write" from driver structure with callbacks "idetape_fops". Standart function test for correct return result. */
3719 ldv_handler_precall();
3720 res_idetape_chrdev_write_31 = idetape_chrdev_write( var_group2, var_idetape_chrdev_write_31_p1, var_idetape_chrdev_write_31_p2, var_idetape_chrdev_write_31_p3);
3721 ldv_check_return_value(res_idetape_chrdev_write_31);
3722 if(res_idetape_chrdev_write_31 < 0)
3723 goto ldv_module_exit;
3724 /* LDV_COMMENT_BEGIN_PREP */
3725 #ifdef CONFIG_IDE_PROC_FS
3726 #define ide_tape_devset_get(name, field) \
3727 static int get_##name(ide_drive_t *drive) \
3728 { \
3729 idetape_tape_t *tape = drive->driver_data; \
3730 return tape->field; \
3731 }
3732 #define ide_tape_devset_set(name, field) \
3733 static int set_##name(ide_drive_t *drive, int arg) \
3734 { \
3735 idetape_tape_t *tape = drive->driver_data; \
3736 tape->field = arg; \
3737 return 0; \
3738 }
3739 #define ide_tape_devset_rw_field(_name, _field) \
3740 ide_tape_devset_get(_name, _field) \
3741 ide_tape_devset_set(_name, _field) \
3742 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3743 #define ide_tape_devset_r_field(_name, _field) \
3744 ide_tape_devset_get(_name, _field) \
3745 IDE_DEVSET(_name, 0, get_##_name, NULL)
3746 #endif
3747 #ifdef CONFIG_IDE_PROC_FS
3748 #endif
3749 #ifdef CONFIG_IDE_PROC_FS
3750 #endif
3751 /* LDV_COMMENT_END_PREP */
3752 ldv_s_idetape_fops_file_operations++;
3753
3754 }
3755
3756 }
3757
3758 break;
3759 case 9: {
3760
3761 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3762 if(ldv_s_idetape_fops_file_operations==3) {
3763
3764 /* content: static int idetape_chrdev_release(struct inode *inode, struct file *filp)*/
3765 /* LDV_COMMENT_BEGIN_PREP */
3766 #define DRV_NAME "ide-tape"
3767 #define IDETAPE_VERSION "1.20"
3768 #undef IDETAPE_DEBUG_LOG
3769 #ifdef IDETAPE_DEBUG_LOG
3770 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3771 #else
3772 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3773 #endif
3774 #define IDETAPE_MAX_PC_RETRIES 3
3775 #define IDETAPE_FIFO_THRESHOLD 2
3776 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3777 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3778 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3779 #define IDETAPE_DSC_MA_FAST 2*HZ
3780 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3781 #define IDETAPE_DSC_MA_SLOW 30*HZ
3782 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3783 #define DOOR_UNLOCKED 0
3784 #define DOOR_LOCKED 1
3785 #define DOOR_EXPLICITLY_LOCKED 2
3786 #define IDETAPE_SPACE_OVER_FILEMARK 1
3787 #define IDETAPE_SPACE_TO_EOD 3
3788 #define IDETAPE_LU_LOAD_MASK 1
3789 #define IDETAPE_LU_RETENSION_MASK 2
3790 #define IDETAPE_LU_EOT_MASK 4
3791 #define IDETAPE_BLOCK_DESCRIPTOR 0
3792 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3793 /* LDV_COMMENT_END_PREP */
3794 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "idetape_fops" */
3795 ldv_handler_precall();
3796 idetape_chrdev_release( var_group1, var_group2);
3797 /* LDV_COMMENT_BEGIN_PREP */
3798 #ifdef CONFIG_IDE_PROC_FS
3799 #define ide_tape_devset_get(name, field) \
3800 static int get_##name(ide_drive_t *drive) \
3801 { \
3802 idetape_tape_t *tape = drive->driver_data; \
3803 return tape->field; \
3804 }
3805 #define ide_tape_devset_set(name, field) \
3806 static int set_##name(ide_drive_t *drive, int arg) \
3807 { \
3808 idetape_tape_t *tape = drive->driver_data; \
3809 tape->field = arg; \
3810 return 0; \
3811 }
3812 #define ide_tape_devset_rw_field(_name, _field) \
3813 ide_tape_devset_get(_name, _field) \
3814 ide_tape_devset_set(_name, _field) \
3815 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3816 #define ide_tape_devset_r_field(_name, _field) \
3817 ide_tape_devset_get(_name, _field) \
3818 IDE_DEVSET(_name, 0, get_##_name, NULL)
3819 #endif
3820 #ifdef CONFIG_IDE_PROC_FS
3821 #endif
3822 #ifdef CONFIG_IDE_PROC_FS
3823 #endif
3824 /* LDV_COMMENT_END_PREP */
3825 ldv_s_idetape_fops_file_operations=0;
3826
3827 }
3828
3829 }
3830
3831 break;
3832 case 10: {
3833
3834 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3835
3836
3837 /* content: static long idetape_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)*/
3838 /* LDV_COMMENT_BEGIN_PREP */
3839 #define DRV_NAME "ide-tape"
3840 #define IDETAPE_VERSION "1.20"
3841 #undef IDETAPE_DEBUG_LOG
3842 #ifdef IDETAPE_DEBUG_LOG
3843 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3844 #else
3845 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3846 #endif
3847 #define IDETAPE_MAX_PC_RETRIES 3
3848 #define IDETAPE_FIFO_THRESHOLD 2
3849 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3850 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3851 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3852 #define IDETAPE_DSC_MA_FAST 2*HZ
3853 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3854 #define IDETAPE_DSC_MA_SLOW 30*HZ
3855 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3856 #define DOOR_UNLOCKED 0
3857 #define DOOR_LOCKED 1
3858 #define DOOR_EXPLICITLY_LOCKED 2
3859 #define IDETAPE_SPACE_OVER_FILEMARK 1
3860 #define IDETAPE_SPACE_TO_EOD 3
3861 #define IDETAPE_LU_LOAD_MASK 1
3862 #define IDETAPE_LU_RETENSION_MASK 2
3863 #define IDETAPE_LU_EOT_MASK 4
3864 #define IDETAPE_BLOCK_DESCRIPTOR 0
3865 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3866 /* LDV_COMMENT_END_PREP */
3867 /* LDV_COMMENT_FUNCTION_CALL Function from field "unlocked_ioctl" from driver structure with callbacks "idetape_fops" */
3868 ldv_handler_precall();
3869 idetape_chrdev_ioctl( var_group2, var_idetape_chrdev_ioctl_35_p1, var_idetape_chrdev_ioctl_35_p2);
3870 /* LDV_COMMENT_BEGIN_PREP */
3871 #ifdef CONFIG_IDE_PROC_FS
3872 #define ide_tape_devset_get(name, field) \
3873 static int get_##name(ide_drive_t *drive) \
3874 { \
3875 idetape_tape_t *tape = drive->driver_data; \
3876 return tape->field; \
3877 }
3878 #define ide_tape_devset_set(name, field) \
3879 static int set_##name(ide_drive_t *drive, int arg) \
3880 { \
3881 idetape_tape_t *tape = drive->driver_data; \
3882 tape->field = arg; \
3883 return 0; \
3884 }
3885 #define ide_tape_devset_rw_field(_name, _field) \
3886 ide_tape_devset_get(_name, _field) \
3887 ide_tape_devset_set(_name, _field) \
3888 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3889 #define ide_tape_devset_r_field(_name, _field) \
3890 ide_tape_devset_get(_name, _field) \
3891 IDE_DEVSET(_name, 0, get_##_name, NULL)
3892 #endif
3893 #ifdef CONFIG_IDE_PROC_FS
3894 #endif
3895 #ifdef CONFIG_IDE_PROC_FS
3896 #endif
3897 /* LDV_COMMENT_END_PREP */
3898
3899
3900
3901
3902 }
3903
3904 break;
3905 case 11: {
3906
3907 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
3908 if(ldv_s_idetape_block_ops_block_device_operations==0) {
3909
3910 /* content: static int idetape_open(struct block_device *bdev, fmode_t mode)*/
3911 /* LDV_COMMENT_BEGIN_PREP */
3912 #define DRV_NAME "ide-tape"
3913 #define IDETAPE_VERSION "1.20"
3914 #undef IDETAPE_DEBUG_LOG
3915 #ifdef IDETAPE_DEBUG_LOG
3916 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3917 #else
3918 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3919 #endif
3920 #define IDETAPE_MAX_PC_RETRIES 3
3921 #define IDETAPE_FIFO_THRESHOLD 2
3922 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3923 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3924 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3925 #define IDETAPE_DSC_MA_FAST 2*HZ
3926 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3927 #define IDETAPE_DSC_MA_SLOW 30*HZ
3928 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3929 #define DOOR_UNLOCKED 0
3930 #define DOOR_LOCKED 1
3931 #define DOOR_EXPLICITLY_LOCKED 2
3932 #define IDETAPE_SPACE_OVER_FILEMARK 1
3933 #define IDETAPE_SPACE_TO_EOD 3
3934 #define IDETAPE_LU_LOAD_MASK 1
3935 #define IDETAPE_LU_RETENSION_MASK 2
3936 #define IDETAPE_LU_EOT_MASK 4
3937 #define IDETAPE_BLOCK_DESCRIPTOR 0
3938 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3939 #ifdef CONFIG_IDE_PROC_FS
3940 #define ide_tape_devset_get(name, field) \
3941 static int get_##name(ide_drive_t *drive) \
3942 { \
3943 idetape_tape_t *tape = drive->driver_data; \
3944 return tape->field; \
3945 }
3946 #define ide_tape_devset_set(name, field) \
3947 static int set_##name(ide_drive_t *drive, int arg) \
3948 { \
3949 idetape_tape_t *tape = drive->driver_data; \
3950 tape->field = arg; \
3951 return 0; \
3952 }
3953 #define ide_tape_devset_rw_field(_name, _field) \
3954 ide_tape_devset_get(_name, _field) \
3955 ide_tape_devset_set(_name, _field) \
3956 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3957 #define ide_tape_devset_r_field(_name, _field) \
3958 ide_tape_devset_get(_name, _field) \
3959 IDE_DEVSET(_name, 0, get_##_name, NULL)
3960 #endif
3961 #ifdef CONFIG_IDE_PROC_FS
3962 #endif
3963 #ifdef CONFIG_IDE_PROC_FS
3964 #endif
3965 /* LDV_COMMENT_END_PREP */
3966 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "idetape_block_ops". Standart function test for correct return result. */
3967 ldv_handler_precall();
3968 res_idetape_open_53 = idetape_open( var_group4, var_idetape_open_53_p1);
3969 ldv_check_return_value(res_idetape_open_53);
3970 if(res_idetape_open_53)
3971 goto ldv_module_exit;
3972 ldv_s_idetape_block_ops_block_device_operations++;
3973
3974 }
3975
3976 }
3977
3978 break;
3979 case 12: {
3980
3981 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
3982 if(ldv_s_idetape_block_ops_block_device_operations==1) {
3983
3984 /* content: static void idetape_release(struct gendisk *disk, fmode_t mode)*/
3985 /* LDV_COMMENT_BEGIN_PREP */
3986 #define DRV_NAME "ide-tape"
3987 #define IDETAPE_VERSION "1.20"
3988 #undef IDETAPE_DEBUG_LOG
3989 #ifdef IDETAPE_DEBUG_LOG
3990 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3991 #else
3992 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3993 #endif
3994 #define IDETAPE_MAX_PC_RETRIES 3
3995 #define IDETAPE_FIFO_THRESHOLD 2
3996 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3997 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3998 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3999 #define IDETAPE_DSC_MA_FAST 2*HZ
4000 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
4001 #define IDETAPE_DSC_MA_SLOW 30*HZ
4002 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
4003 #define DOOR_UNLOCKED 0
4004 #define DOOR_LOCKED 1
4005 #define DOOR_EXPLICITLY_LOCKED 2
4006 #define IDETAPE_SPACE_OVER_FILEMARK 1
4007 #define IDETAPE_SPACE_TO_EOD 3
4008 #define IDETAPE_LU_LOAD_MASK 1
4009 #define IDETAPE_LU_RETENSION_MASK 2
4010 #define IDETAPE_LU_EOT_MASK 4
4011 #define IDETAPE_BLOCK_DESCRIPTOR 0
4012 #define IDETAPE_CAPABILITIES_PAGE 0x2a
4013 #ifdef CONFIG_IDE_PROC_FS
4014 #define ide_tape_devset_get(name, field) \
4015 static int get_##name(ide_drive_t *drive) \
4016 { \
4017 idetape_tape_t *tape = drive->driver_data; \
4018 return tape->field; \
4019 }
4020 #define ide_tape_devset_set(name, field) \
4021 static int set_##name(ide_drive_t *drive, int arg) \
4022 { \
4023 idetape_tape_t *tape = drive->driver_data; \
4024 tape->field = arg; \
4025 return 0; \
4026 }
4027 #define ide_tape_devset_rw_field(_name, _field) \
4028 ide_tape_devset_get(_name, _field) \
4029 ide_tape_devset_set(_name, _field) \
4030 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
4031 #define ide_tape_devset_r_field(_name, _field) \
4032 ide_tape_devset_get(_name, _field) \
4033 IDE_DEVSET(_name, 0, get_##_name, NULL)
4034 #endif
4035 #ifdef CONFIG_IDE_PROC_FS
4036 #endif
4037 #ifdef CONFIG_IDE_PROC_FS
4038 #endif
4039 /* LDV_COMMENT_END_PREP */
4040 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "idetape_block_ops" */
4041 ldv_handler_precall();
4042 idetape_release( var_group5, var_idetape_release_54_p1);
4043 ldv_s_idetape_block_ops_block_device_operations=0;
4044
4045 }
4046
4047 }
4048
4049 break;
4050 case 13: {
4051
4052 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
4053
4054
4055 /* content: static int idetape_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)*/
4056 /* LDV_COMMENT_BEGIN_PREP */
4057 #define DRV_NAME "ide-tape"
4058 #define IDETAPE_VERSION "1.20"
4059 #undef IDETAPE_DEBUG_LOG
4060 #ifdef IDETAPE_DEBUG_LOG
4061 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
4062 #else
4063 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
4064 #endif
4065 #define IDETAPE_MAX_PC_RETRIES 3
4066 #define IDETAPE_FIFO_THRESHOLD 2
4067 #define IDETAPE_DSC_RW_MIN 5*HZ/100
4068 #define IDETAPE_DSC_RW_MAX 40*HZ/100
4069 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
4070 #define IDETAPE_DSC_MA_FAST 2*HZ
4071 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
4072 #define IDETAPE_DSC_MA_SLOW 30*HZ
4073 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
4074 #define DOOR_UNLOCKED 0
4075 #define DOOR_LOCKED 1
4076 #define DOOR_EXPLICITLY_LOCKED 2
4077 #define IDETAPE_SPACE_OVER_FILEMARK 1
4078 #define IDETAPE_SPACE_TO_EOD 3
4079 #define IDETAPE_LU_LOAD_MASK 1
4080 #define IDETAPE_LU_RETENSION_MASK 2
4081 #define IDETAPE_LU_EOT_MASK 4
4082 #define IDETAPE_BLOCK_DESCRIPTOR 0
4083 #define IDETAPE_CAPABILITIES_PAGE 0x2a
4084 #ifdef CONFIG_IDE_PROC_FS
4085 #define ide_tape_devset_get(name, field) \
4086 static int get_##name(ide_drive_t *drive) \
4087 { \
4088 idetape_tape_t *tape = drive->driver_data; \
4089 return tape->field; \
4090 }
4091 #define ide_tape_devset_set(name, field) \
4092 static int set_##name(ide_drive_t *drive, int arg) \
4093 { \
4094 idetape_tape_t *tape = drive->driver_data; \
4095 tape->field = arg; \
4096 return 0; \
4097 }
4098 #define ide_tape_devset_rw_field(_name, _field) \
4099 ide_tape_devset_get(_name, _field) \
4100 ide_tape_devset_set(_name, _field) \
4101 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
4102 #define ide_tape_devset_r_field(_name, _field) \
4103 ide_tape_devset_get(_name, _field) \
4104 IDE_DEVSET(_name, 0, get_##_name, NULL)
4105 #endif
4106 #ifdef CONFIG_IDE_PROC_FS
4107 #endif
4108 #ifdef CONFIG_IDE_PROC_FS
4109 #endif
4110 /* LDV_COMMENT_END_PREP */
4111 /* LDV_COMMENT_FUNCTION_CALL Function from field "ioctl" from driver structure with callbacks "idetape_block_ops" */
4112 ldv_handler_precall();
4113 idetape_ioctl( var_group4, var_idetape_ioctl_55_p1, var_idetape_ioctl_55_p2, var_idetape_ioctl_55_p3);
4114
4115
4116
4117
4118 }
4119
4120 break;
4121 default: break;
4122
4123 }
4124
4125 }
4126
4127 ldv_module_exit:
4128
4129 /** INIT: init_type: ST_MODULE_EXIT **/
4130 /* content: static void __exit idetape_exit(void)*/
4131 /* LDV_COMMENT_BEGIN_PREP */
4132 #define DRV_NAME "ide-tape"
4133 #define IDETAPE_VERSION "1.20"
4134 #undef IDETAPE_DEBUG_LOG
4135 #ifdef IDETAPE_DEBUG_LOG
4136 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
4137 #else
4138 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
4139 #endif
4140 #define IDETAPE_MAX_PC_RETRIES 3
4141 #define IDETAPE_FIFO_THRESHOLD 2
4142 #define IDETAPE_DSC_RW_MIN 5*HZ/100
4143 #define IDETAPE_DSC_RW_MAX 40*HZ/100
4144 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
4145 #define IDETAPE_DSC_MA_FAST 2*HZ
4146 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
4147 #define IDETAPE_DSC_MA_SLOW 30*HZ
4148 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
4149 #define DOOR_UNLOCKED 0
4150 #define DOOR_LOCKED 1
4151 #define DOOR_EXPLICITLY_LOCKED 2
4152 #define IDETAPE_SPACE_OVER_FILEMARK 1
4153 #define IDETAPE_SPACE_TO_EOD 3
4154 #define IDETAPE_LU_LOAD_MASK 1
4155 #define IDETAPE_LU_RETENSION_MASK 2
4156 #define IDETAPE_LU_EOT_MASK 4
4157 #define IDETAPE_BLOCK_DESCRIPTOR 0
4158 #define IDETAPE_CAPABILITIES_PAGE 0x2a
4159 #ifdef CONFIG_IDE_PROC_FS
4160 #define ide_tape_devset_get(name, field) \
4161 static int get_##name(ide_drive_t *drive) \
4162 { \
4163 idetape_tape_t *tape = drive->driver_data; \
4164 return tape->field; \
4165 }
4166 #define ide_tape_devset_set(name, field) \
4167 static int set_##name(ide_drive_t *drive, int arg) \
4168 { \
4169 idetape_tape_t *tape = drive->driver_data; \
4170 tape->field = arg; \
4171 return 0; \
4172 }
4173 #define ide_tape_devset_rw_field(_name, _field) \
4174 ide_tape_devset_get(_name, _field) \
4175 ide_tape_devset_set(_name, _field) \
4176 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
4177 #define ide_tape_devset_r_field(_name, _field) \
4178 ide_tape_devset_get(_name, _field) \
4179 IDE_DEVSET(_name, 0, get_##_name, NULL)
4180 #endif
4181 #ifdef CONFIG_IDE_PROC_FS
4182 #endif
4183 #ifdef CONFIG_IDE_PROC_FS
4184 #endif
4185 /* LDV_COMMENT_END_PREP */
4186 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */
4187 ldv_handler_precall();
4188 idetape_exit();
4189
4190 /* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */
4191 ldv_final: ldv_check_final_state();
4192
4193 /* LDV_COMMENT_END_FUNCTION_CALL_SECTION */
4194 return;
4195
4196 }
4197 #endif
4198
4199 /* LDV_COMMENT_END_MAIN */ 1
2 #include <linux/kernel.h>
3 bool ldv_is_err(const void *ptr);
4 bool ldv_is_err_or_null(const void *ptr);
5 void* ldv_err_ptr(long error);
6 long ldv_ptr_err(const void *ptr);
7
8
9 // Provide model function prototypes before their usage.
10
11 void *ldv_create_class(void);
12 int ldv_register_class(void);
13 void ldv_unregister_class(void);
14
15 int ldv_register_chrdev(int major);
16 int ldv_register_chrdev_region(void);
17 void ldv_unregister_chrdev_region(void);
18
19 int ldv_register_usb_gadget(void);
20 void ldv_unregister_usb_gadget(void);
21 #line 1 "/home/ubuntu/launches/work/current--X--drivers--X--defaultlinux-4.7-rc1.tar.xz--X--106_1a--X--cpachecker/linux-4.7-rc1.tar.xz/csd_deg_dscv/8139/dscv_tempdir/dscv/ri/106_1a/drivers/ide/ide-tape.c"
22
23 /*
24 * IDE ATAPI streaming tape driver.
25 *
26 * Copyright (C) 1995-1999 Gadi Oxman <gadio@netvision.net.il>
27 * Copyright (C) 2003-2005 Bartlomiej Zolnierkiewicz
28 *
29 * This driver was constructed as a student project in the software laboratory
30 * of the faculty of electrical engineering in the Technion - Israel's
31 * Institute Of Technology, with the guide of Avner Lottem and Dr. Ilana David.
32 *
33 * It is hereby placed under the terms of the GNU general public license.
34 * (See linux/COPYING).
35 *
36 * For a historical changelog see
37 * Documentation/ide/ChangeLog.ide-tape.1995-2002
38 */
39
40 #define DRV_NAME "ide-tape"
41
42 #define IDETAPE_VERSION "1.20"
43
44 #include <linux/module.h>
45 #include <linux/types.h>
46 #include <linux/string.h>
47 #include <linux/kernel.h>
48 #include <linux/delay.h>
49 #include <linux/timer.h>
50 #include <linux/mm.h>
51 #include <linux/interrupt.h>
52 #include <linux/jiffies.h>
53 #include <linux/major.h>
54 #include <linux/errno.h>
55 #include <linux/genhd.h>
56 #include <linux/seq_file.h>
57 #include <linux/slab.h>
58 #include <linux/pci.h>
59 #include <linux/ide.h>
60 #include <linux/completion.h>
61 #include <linux/bitops.h>
62 #include <linux/mutex.h>
63 #include <scsi/scsi.h>
64
65 #include <asm/byteorder.h>
66 #include <linux/uaccess.h>
67 #include <linux/io.h>
68 #include <asm/unaligned.h>
69 #include <linux/mtio.h>
70
71 /* define to see debug info */
72 #undef IDETAPE_DEBUG_LOG
73
74 #ifdef IDETAPE_DEBUG_LOG
75 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
76 #else
77 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
78 #endif
79
80 /**************************** Tunable parameters *****************************/
81 /*
82 * After each failed packet command we issue a request sense command and retry
83 * the packet command IDETAPE_MAX_PC_RETRIES times.
84 *
85 * Setting IDETAPE_MAX_PC_RETRIES to 0 will disable retries.
86 */
87 #define IDETAPE_MAX_PC_RETRIES 3
88
89 /*
90 * The following parameter is used to select the point in the internal tape fifo
91 * in which we will start to refill the buffer. Decreasing the following
92 * parameter will improve the system's latency and interactive response, while
93 * using a high value might improve system throughput.
94 */
95 #define IDETAPE_FIFO_THRESHOLD 2
96
97 /*
98 * DSC polling parameters.
99 *
100 * Polling for DSC (a single bit in the status register) is a very important
101 * function in ide-tape. There are two cases in which we poll for DSC:
102 *
103 * 1. Before a read/write packet command, to ensure that we can transfer data
104 * from/to the tape's data buffers, without causing an actual media access.
105 * In case the tape is not ready yet, we take out our request from the device
106 * request queue, so that ide.c could service requests from the other device
107 * on the same interface in the meantime.
108 *
109 * 2. After the successful initialization of a "media access packet command",
110 * which is a command that can take a long time to complete (the interval can
111 * range from several seconds to even an hour). Again, we postpone our request
112 * in the middle to free the bus for the other device. The polling frequency
113 * here should be lower than the read/write frequency since those media access
114 * commands are slow. We start from a "fast" frequency - IDETAPE_DSC_MA_FAST
115 * (1 second), and if we don't receive DSC after IDETAPE_DSC_MA_THRESHOLD
116 * (5 min), we switch it to a lower frequency - IDETAPE_DSC_MA_SLOW (1 min).
117 *
118 * We also set a timeout for the timer, in case something goes wrong. The
119 * timeout should be longer then the maximum execution time of a tape operation.
120 */
121
122 /* DSC timings. */
123 #define IDETAPE_DSC_RW_MIN 5*HZ/100 /* 50 msec */
124 #define IDETAPE_DSC_RW_MAX 40*HZ/100 /* 400 msec */
125 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ /* 2 minutes */
126 #define IDETAPE_DSC_MA_FAST 2*HZ /* 2 seconds */
127 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ /* 5 minutes */
128 #define IDETAPE_DSC_MA_SLOW 30*HZ /* 30 seconds */
129 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ /* 2 hours */
130
131 /*************************** End of tunable parameters ***********************/
132
133 /* tape directions */
134 enum {
135 IDETAPE_DIR_NONE = (1 << 0),
136 IDETAPE_DIR_READ = (1 << 1),
137 IDETAPE_DIR_WRITE = (1 << 2),
138 };
139
140 /* Tape door status */
141 #define DOOR_UNLOCKED 0
142 #define DOOR_LOCKED 1
143 #define DOOR_EXPLICITLY_LOCKED 2
144
145 /* Some defines for the SPACE command */
146 #define IDETAPE_SPACE_OVER_FILEMARK 1
147 #define IDETAPE_SPACE_TO_EOD 3
148
149 /* Some defines for the LOAD UNLOAD command */
150 #define IDETAPE_LU_LOAD_MASK 1
151 #define IDETAPE_LU_RETENSION_MASK 2
152 #define IDETAPE_LU_EOT_MASK 4
153
154 /* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
155 #define IDETAPE_BLOCK_DESCRIPTOR 0
156 #define IDETAPE_CAPABILITIES_PAGE 0x2a
157
158 /*
159 * Most of our global data which we need to save even as we leave the driver due
160 * to an interrupt or a timer event is stored in the struct defined below.
161 */
162 typedef struct ide_tape_obj {
163 ide_drive_t *drive;
164 struct ide_driver *driver;
165 struct gendisk *disk;
166 struct device dev;
167
168 /* used by REQ_IDETAPE_{READ,WRITE} requests */
169 struct ide_atapi_pc queued_pc;
170
171 /*
172 * DSC polling variables.
173 *
174 * While polling for DSC we use postponed_rq to postpone the current
175 * request so that ide.c will be able to service pending requests on the
176 * other device. Note that at most we will have only one DSC (usually
177 * data transfer) request in the device request queue.
178 */
179 bool postponed_rq;
180
181 /* The time in which we started polling for DSC */
182 unsigned long dsc_polling_start;
183 /* Timer used to poll for dsc */
184 struct timer_list dsc_timer;
185 /* Read/Write dsc polling frequency */
186 unsigned long best_dsc_rw_freq;
187 unsigned long dsc_poll_freq;
188 unsigned long dsc_timeout;
189
190 /* Read position information */
191 u8 partition;
192 /* Current block */
193 unsigned int first_frame;
194
195 /* Last error information */
196 u8 sense_key, asc, ascq;
197
198 /* Character device operation */
199 unsigned int minor;
200 /* device name */
201 char name[4];
202 /* Current character device data transfer direction */
203 u8 chrdev_dir;
204
205 /* tape block size, usually 512 or 1024 bytes */
206 unsigned short blk_size;
207 int user_bs_factor;
208
209 /* Copy of the tape's Capabilities and Mechanical Page */
210 u8 caps[20];
211
212 /*
213 * Active data transfer request parameters.
214 *
215 * At most, there is only one ide-tape originated data transfer request
216 * in the device request queue. This allows ide.c to easily service
217 * requests from the other device when we postpone our active request.
218 */
219
220 /* Data buffer size chosen based on the tape's recommendation */
221 int buffer_size;
222 /* Staging buffer of buffer_size bytes */
223 void *buf;
224 /* The read/write cursor */
225 void *cur;
226 /* The number of valid bytes in buf */
227 size_t valid;
228
229 /* Measures average tape speed */
230 unsigned long avg_time;
231 int avg_size;
232 int avg_speed;
233
234 /* the door is currently locked */
235 int door_locked;
236 /* the tape hardware is write protected */
237 char drv_write_prot;
238 /* the tape is write protected (hardware or opened as read-only) */
239 char write_prot;
240 } idetape_tape_t;
241
242 static DEFINE_MUTEX(ide_tape_mutex);
243 static DEFINE_MUTEX(idetape_ref_mutex);
244
245 static DEFINE_MUTEX(idetape_chrdev_mutex);
246
247 static struct class *idetape_sysfs_class;
248
249 static void ide_tape_release(struct device *);
250
251 static struct ide_tape_obj *idetape_devs[MAX_HWIFS * MAX_DRIVES];
252
253 static struct ide_tape_obj *ide_tape_get(struct gendisk *disk, bool cdev,
254 unsigned int i)
255 {
256 struct ide_tape_obj *tape = NULL;
257
258 mutex_lock(&idetape_ref_mutex);
259
260 if (cdev)
261 tape = idetape_devs[i];
262 else
263 tape = ide_drv_g(disk, ide_tape_obj);
264
265 if (tape) {
266 if (ide_device_get(tape->drive))
267 tape = NULL;
268 else
269 get_device(&tape->dev);
270 }
271
272 mutex_unlock(&idetape_ref_mutex);
273 return tape;
274 }
275
276 static void ide_tape_put(struct ide_tape_obj *tape)
277 {
278 ide_drive_t *drive = tape->drive;
279
280 mutex_lock(&idetape_ref_mutex);
281 put_device(&tape->dev);
282 ide_device_put(drive);
283 mutex_unlock(&idetape_ref_mutex);
284 }
285
286 /*
287 * called on each failed packet command retry to analyze the request sense. We
288 * currently do not utilize this information.
289 */
290 static void idetape_analyze_error(ide_drive_t *drive)
291 {
292 idetape_tape_t *tape = drive->driver_data;
293 struct ide_atapi_pc *pc = drive->failed_pc;
294 struct request *rq = drive->hwif->rq;
295 u8 *sense = bio_data(rq->bio);
296
297 tape->sense_key = sense[2] & 0xF;
298 tape->asc = sense[12];
299 tape->ascq = sense[13];
300
301 ide_debug_log(IDE_DBG_FUNC,
302 "cmd: 0x%x, sense key = %x, asc = %x, ascq = %x",
303 rq->cmd[0], tape->sense_key, tape->asc, tape->ascq);
304
305 /* correct remaining bytes to transfer */
306 if (pc->flags & PC_FLAG_DMA_ERROR)
307 rq->resid_len = tape->blk_size * get_unaligned_be32(&sense[3]);
308
309 /*
310 * If error was the result of a zero-length read or write command,
311 * with sense key=5, asc=0x22, ascq=0, let it slide. Some drives
312 * (i.e. Seagate STT3401A Travan) don't support 0-length read/writes.
313 */
314 if ((pc->c[0] == READ_6 || pc->c[0] == WRITE_6)
315 /* length == 0 */
316 && pc->c[4] == 0 && pc->c[3] == 0 && pc->c[2] == 0) {
317 if (tape->sense_key == 5) {
318 /* don't report an error, everything's ok */
319 pc->error = 0;
320 /* don't retry read/write */
321 pc->flags |= PC_FLAG_ABORT;
322 }
323 }
324 if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
325 pc->error = IDE_DRV_ERROR_FILEMARK;
326 pc->flags |= PC_FLAG_ABORT;
327 }
328 if (pc->c[0] == WRITE_6) {
329 if ((sense[2] & 0x40) || (tape->sense_key == 0xd
330 && tape->asc == 0x0 && tape->ascq == 0x2)) {
331 pc->error = IDE_DRV_ERROR_EOD;
332 pc->flags |= PC_FLAG_ABORT;
333 }
334 }
335 if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
336 if (tape->sense_key == 8) {
337 pc->error = IDE_DRV_ERROR_EOD;
338 pc->flags |= PC_FLAG_ABORT;
339 }
340 if (!(pc->flags & PC_FLAG_ABORT) &&
341 (blk_rq_bytes(rq) - rq->resid_len))
342 pc->retries = IDETAPE_MAX_PC_RETRIES + 1;
343 }
344 }
345
346 static void ide_tape_handle_dsc(ide_drive_t *);
347
348 static int ide_tape_callback(ide_drive_t *drive, int dsc)
349 {
350 idetape_tape_t *tape = drive->driver_data;
351 struct ide_atapi_pc *pc = drive->pc;
352 struct request *rq = drive->hwif->rq;
353 int uptodate = pc->error ? 0 : 1;
354 int err = uptodate ? 0 : IDE_DRV_ERROR_GENERAL;
355
356 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x, dsc: %d, err: %d", rq->cmd[0],
357 dsc, err);
358
359 if (dsc)
360 ide_tape_handle_dsc(drive);
361
362 if (drive->failed_pc == pc)
363 drive->failed_pc = NULL;
364
365 if (pc->c[0] == REQUEST_SENSE) {
366 if (uptodate)
367 idetape_analyze_error(drive);
368 else
369 printk(KERN_ERR "ide-tape: Error in REQUEST SENSE "
370 "itself - Aborting request!\n");
371 } else if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
372 unsigned int blocks =
373 (blk_rq_bytes(rq) - rq->resid_len) / tape->blk_size;
374
375 tape->avg_size += blocks * tape->blk_size;
376
377 if (time_after_eq(jiffies, tape->avg_time + HZ)) {
378 tape->avg_speed = tape->avg_size * HZ /
379 (jiffies - tape->avg_time) / 1024;
380 tape->avg_size = 0;
381 tape->avg_time = jiffies;
382 }
383
384 tape->first_frame += blocks;
385
386 if (pc->error) {
387 uptodate = 0;
388 err = pc->error;
389 }
390 }
391 rq->errors = err;
392
393 return uptodate;
394 }
395
396 /*
397 * Postpone the current request so that ide.c will be able to service requests
398 * from another device on the same port while we are polling for DSC.
399 */
400 static void ide_tape_stall_queue(ide_drive_t *drive)
401 {
402 idetape_tape_t *tape = drive->driver_data;
403
404 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x, dsc_poll_freq: %lu",
405 drive->hwif->rq->cmd[0], tape->dsc_poll_freq);
406
407 tape->postponed_rq = true;
408
409 ide_stall_queue(drive, tape->dsc_poll_freq);
410 }
411
412 static void ide_tape_handle_dsc(ide_drive_t *drive)
413 {
414 idetape_tape_t *tape = drive->driver_data;
415
416 /* Media access command */
417 tape->dsc_polling_start = jiffies;
418 tape->dsc_poll_freq = IDETAPE_DSC_MA_FAST;
419 tape->dsc_timeout = jiffies + IDETAPE_DSC_MA_TIMEOUT;
420 /* Allow ide.c to handle other requests */
421 ide_tape_stall_queue(drive);
422 }
423
424 /*
425 * Packet Command Interface
426 *
427 * The current Packet Command is available in drive->pc, and will not change
428 * until we finish handling it. Each packet command is associated with a
429 * callback function that will be called when the command is finished.
430 *
431 * The handling will be done in three stages:
432 *
433 * 1. ide_tape_issue_pc will send the packet command to the drive, and will set
434 * the interrupt handler to ide_pc_intr.
435 *
436 * 2. On each interrupt, ide_pc_intr will be called. This step will be
437 * repeated until the device signals us that no more interrupts will be issued.
438 *
439 * 3. ATAPI Tape media access commands have immediate status with a delayed
440 * process. In case of a successful initiation of a media access packet command,
441 * the DSC bit will be set when the actual execution of the command is finished.
442 * Since the tape drive will not issue an interrupt, we have to poll for this
443 * event. In this case, we define the request as "low priority request" by
444 * setting rq_status to IDETAPE_RQ_POSTPONED, set a timer to poll for DSC and
445 * exit the driver.
446 *
447 * ide.c will then give higher priority to requests which originate from the
448 * other device, until will change rq_status to RQ_ACTIVE.
449 *
450 * 4. When the packet command is finished, it will be checked for errors.
451 *
452 * 5. In case an error was found, we queue a request sense packet command in
453 * front of the request queue and retry the operation up to
454 * IDETAPE_MAX_PC_RETRIES times.
455 *
456 * 6. In case no error was found, or we decided to give up and not to retry
457 * again, the callback function will be called and then we will handle the next
458 * request.
459 */
460
461 static ide_startstop_t ide_tape_issue_pc(ide_drive_t *drive,
462 struct ide_cmd *cmd,
463 struct ide_atapi_pc *pc)
464 {
465 idetape_tape_t *tape = drive->driver_data;
466 struct request *rq = drive->hwif->rq;
467
468 if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
469 drive->failed_pc = pc;
470
471 /* Set the current packet command */
472 drive->pc = pc;
473
474 if (pc->retries > IDETAPE_MAX_PC_RETRIES ||
475 (pc->flags & PC_FLAG_ABORT)) {
476
477 /*
478 * We will "abort" retrying a packet command in case legitimate
479 * error code was received (crossing a filemark, or end of the
480 * media, for example).
481 */
482 if (!(pc->flags & PC_FLAG_ABORT)) {
483 if (!(pc->c[0] == TEST_UNIT_READY &&
484 tape->sense_key == 2 && tape->asc == 4 &&
485 (tape->ascq == 1 || tape->ascq == 8))) {
486 printk(KERN_ERR "ide-tape: %s: I/O error, "
487 "pc = %2x, key = %2x, "
488 "asc = %2x, ascq = %2x\n",
489 tape->name, pc->c[0],
490 tape->sense_key, tape->asc,
491 tape->ascq);
492 }
493 /* Giving up */
494 pc->error = IDE_DRV_ERROR_GENERAL;
495 }
496
497 drive->failed_pc = NULL;
498 drive->pc_callback(drive, 0);
499 ide_complete_rq(drive, -EIO, blk_rq_bytes(rq));
500 return ide_stopped;
501 }
502 ide_debug_log(IDE_DBG_SENSE, "retry #%d, cmd: 0x%02x", pc->retries,
503 pc->c[0]);
504
505 pc->retries++;
506
507 return ide_issue_pc(drive, cmd);
508 }
509
510 /* A mode sense command is used to "sense" tape parameters. */
511 static void idetape_create_mode_sense_cmd(struct ide_atapi_pc *pc, u8 page_code)
512 {
513 ide_init_pc(pc);
514 pc->c[0] = MODE_SENSE;
515 if (page_code != IDETAPE_BLOCK_DESCRIPTOR)
516 /* DBD = 1 - Don't return block descriptors */
517 pc->c[1] = 8;
518 pc->c[2] = page_code;
519 /*
520 * Changed pc->c[3] to 0 (255 will at best return unused info).
521 *
522 * For SCSI this byte is defined as subpage instead of high byte
523 * of length and some IDE drives seem to interpret it this way
524 * and return an error when 255 is used.
525 */
526 pc->c[3] = 0;
527 /* We will just discard data in that case */
528 pc->c[4] = 255;
529 if (page_code == IDETAPE_BLOCK_DESCRIPTOR)
530 pc->req_xfer = 12;
531 else if (page_code == IDETAPE_CAPABILITIES_PAGE)
532 pc->req_xfer = 24;
533 else
534 pc->req_xfer = 50;
535 }
536
537 static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
538 {
539 ide_hwif_t *hwif = drive->hwif;
540 idetape_tape_t *tape = drive->driver_data;
541 struct ide_atapi_pc *pc = drive->pc;
542 u8 stat;
543
544 stat = hwif->tp_ops->read_status(hwif);
545
546 if (stat & ATA_DSC) {
547 if (stat & ATA_ERR) {
548 /* Error detected */
549 if (pc->c[0] != TEST_UNIT_READY)
550 printk(KERN_ERR "ide-tape: %s: I/O error, ",
551 tape->name);
552 /* Retry operation */
553 ide_retry_pc(drive);
554 return ide_stopped;
555 }
556 pc->error = 0;
557 } else {
558 pc->error = IDE_DRV_ERROR_GENERAL;
559 drive->failed_pc = NULL;
560 }
561 drive->pc_callback(drive, 0);
562 return ide_stopped;
563 }
564
565 static void ide_tape_create_rw_cmd(idetape_tape_t *tape,
566 struct ide_atapi_pc *pc, struct request *rq,
567 u8 opcode)
568 {
569 unsigned int length = blk_rq_sectors(rq) / (tape->blk_size >> 9);
570
571 ide_init_pc(pc);
572 put_unaligned(cpu_to_be32(length), (unsigned int *) &pc->c[1]);
573 pc->c[1] = 1;
574
575 if (blk_rq_bytes(rq) == tape->buffer_size)
576 pc->flags |= PC_FLAG_DMA_OK;
577
578 if (opcode == READ_6)
579 pc->c[0] = READ_6;
580 else if (opcode == WRITE_6) {
581 pc->c[0] = WRITE_6;
582 pc->flags |= PC_FLAG_WRITING;
583 }
584
585 memcpy(rq->cmd, pc->c, 12);
586 }
587
588 static ide_startstop_t idetape_do_request(ide_drive_t *drive,
589 struct request *rq, sector_t block)
590 {
591 ide_hwif_t *hwif = drive->hwif;
592 idetape_tape_t *tape = drive->driver_data;
593 struct ide_atapi_pc *pc = NULL;
594 struct ide_cmd cmd;
595 u8 stat;
596
597 ide_debug_log(IDE_DBG_RQ, "cmd: 0x%x, sector: %llu, nr_sectors: %u",
598 rq->cmd[0], (unsigned long long)blk_rq_pos(rq),
599 blk_rq_sectors(rq));
600
601 BUG_ON(!(rq->cmd_type == REQ_TYPE_DRV_PRIV ||
602 rq->cmd_type == REQ_TYPE_ATA_SENSE));
603
604 /* Retry a failed packet command */
605 if (drive->failed_pc && drive->pc->c[0] == REQUEST_SENSE) {
606 pc = drive->failed_pc;
607 goto out;
608 }
609
610 /*
611 * If the tape is still busy, postpone our request and service
612 * the other device meanwhile.
613 */
614 stat = hwif->tp_ops->read_status(hwif);
615
616 if ((drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) == 0 &&
617 (rq->cmd[13] & REQ_IDETAPE_PC2) == 0)
618 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
619
620 if (drive->dev_flags & IDE_DFLAG_POST_RESET) {
621 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
622 drive->dev_flags &= ~IDE_DFLAG_POST_RESET;
623 }
624
625 if (!(drive->atapi_flags & IDE_AFLAG_IGNORE_DSC) &&
626 !(stat & ATA_DSC)) {
627 if (!tape->postponed_rq) {
628 tape->dsc_polling_start = jiffies;
629 tape->dsc_poll_freq = tape->best_dsc_rw_freq;
630 tape->dsc_timeout = jiffies + IDETAPE_DSC_RW_TIMEOUT;
631 } else if (time_after(jiffies, tape->dsc_timeout)) {
632 printk(KERN_ERR "ide-tape: %s: DSC timeout\n",
633 tape->name);
634 if (rq->cmd[13] & REQ_IDETAPE_PC2) {
635 idetape_media_access_finished(drive);
636 return ide_stopped;
637 } else {
638 return ide_do_reset(drive);
639 }
640 } else if (time_after(jiffies,
641 tape->dsc_polling_start +
642 IDETAPE_DSC_MA_THRESHOLD))
643 tape->dsc_poll_freq = IDETAPE_DSC_MA_SLOW;
644 ide_tape_stall_queue(drive);
645 return ide_stopped;
646 } else {
647 drive->atapi_flags &= ~IDE_AFLAG_IGNORE_DSC;
648 tape->postponed_rq = false;
649 }
650
651 if (rq->cmd[13] & REQ_IDETAPE_READ) {
652 pc = &tape->queued_pc;
653 ide_tape_create_rw_cmd(tape, pc, rq, READ_6);
654 goto out;
655 }
656 if (rq->cmd[13] & REQ_IDETAPE_WRITE) {
657 pc = &tape->queued_pc;
658 ide_tape_create_rw_cmd(tape, pc, rq, WRITE_6);
659 goto out;
660 }
661 if (rq->cmd[13] & REQ_IDETAPE_PC1) {
662 pc = (struct ide_atapi_pc *)rq->special;
663 rq->cmd[13] &= ~(REQ_IDETAPE_PC1);
664 rq->cmd[13] |= REQ_IDETAPE_PC2;
665 goto out;
666 }
667 if (rq->cmd[13] & REQ_IDETAPE_PC2) {
668 idetape_media_access_finished(drive);
669 return ide_stopped;
670 }
671 BUG();
672
673 out:
674 /* prepare sense request for this command */
675 ide_prep_sense(drive, rq);
676
677 memset(&cmd, 0, sizeof(cmd));
678
679 if (rq_data_dir(rq))
680 cmd.tf_flags |= IDE_TFLAG_WRITE;
681
682 cmd.rq = rq;
683
684 ide_init_sg_cmd(&cmd, blk_rq_bytes(rq));
685 ide_map_sg(drive, &cmd);
686
687 return ide_tape_issue_pc(drive, &cmd, pc);
688 }
689
690 /*
691 * Write a filemark if write_filemark=1. Flush the device buffers without
692 * writing a filemark otherwise.
693 */
694 static void idetape_create_write_filemark_cmd(ide_drive_t *drive,
695 struct ide_atapi_pc *pc, int write_filemark)
696 {
697 ide_init_pc(pc);
698 pc->c[0] = WRITE_FILEMARKS;
699 pc->c[4] = write_filemark;
700 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
701 }
702
703 static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
704 {
705 idetape_tape_t *tape = drive->driver_data;
706 struct gendisk *disk = tape->disk;
707 int load_attempted = 0;
708
709 /* Wait for the tape to become ready */
710 set_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT), &drive->atapi_flags);
711 timeout += jiffies;
712 while (time_before(jiffies, timeout)) {
713 if (ide_do_test_unit_ready(drive, disk) == 0)
714 return 0;
715 if ((tape->sense_key == 2 && tape->asc == 4 && tape->ascq == 2)
716 || (tape->asc == 0x3A)) {
717 /* no media */
718 if (load_attempted)
719 return -ENOMEDIUM;
720 ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
721 load_attempted = 1;
722 /* not about to be ready */
723 } else if (!(tape->sense_key == 2 && tape->asc == 4 &&
724 (tape->ascq == 1 || tape->ascq == 8)))
725 return -EIO;
726 msleep(100);
727 }
728 return -EIO;
729 }
730
731 static int idetape_flush_tape_buffers(ide_drive_t *drive)
732 {
733 struct ide_tape_obj *tape = drive->driver_data;
734 struct ide_atapi_pc pc;
735 int rc;
736
737 idetape_create_write_filemark_cmd(drive, &pc, 0);
738 rc = ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0);
739 if (rc)
740 return rc;
741 idetape_wait_ready(drive, 60 * 5 * HZ);
742 return 0;
743 }
744
745 static int ide_tape_read_position(ide_drive_t *drive)
746 {
747 idetape_tape_t *tape = drive->driver_data;
748 struct ide_atapi_pc pc;
749 u8 buf[20];
750
751 ide_debug_log(IDE_DBG_FUNC, "enter");
752
753 /* prep cmd */
754 ide_init_pc(&pc);
755 pc.c[0] = READ_POSITION;
756 pc.req_xfer = 20;
757
758 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer))
759 return -1;
760
761 if (!pc.error) {
762 ide_debug_log(IDE_DBG_FUNC, "BOP - %s",
763 (buf[0] & 0x80) ? "Yes" : "No");
764 ide_debug_log(IDE_DBG_FUNC, "EOP - %s",
765 (buf[0] & 0x40) ? "Yes" : "No");
766
767 if (buf[0] & 0x4) {
768 printk(KERN_INFO "ide-tape: Block location is unknown"
769 "to the tape\n");
770 clear_bit(ilog2(IDE_AFLAG_ADDRESS_VALID),
771 &drive->atapi_flags);
772 return -1;
773 } else {
774 ide_debug_log(IDE_DBG_FUNC, "Block Location: %u",
775 be32_to_cpup((__be32 *)&buf[4]));
776
777 tape->partition = buf[1];
778 tape->first_frame = be32_to_cpup((__be32 *)&buf[4]);
779 set_bit(ilog2(IDE_AFLAG_ADDRESS_VALID),
780 &drive->atapi_flags);
781 }
782 }
783
784 return tape->first_frame;
785 }
786
787 static void idetape_create_locate_cmd(ide_drive_t *drive,
788 struct ide_atapi_pc *pc,
789 unsigned int block, u8 partition, int skip)
790 {
791 ide_init_pc(pc);
792 pc->c[0] = POSITION_TO_ELEMENT;
793 pc->c[1] = 2;
794 put_unaligned(cpu_to_be32(block), (unsigned int *) &pc->c[3]);
795 pc->c[8] = partition;
796 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
797 }
798
799 static void __ide_tape_discard_merge_buffer(ide_drive_t *drive)
800 {
801 idetape_tape_t *tape = drive->driver_data;
802
803 if (tape->chrdev_dir != IDETAPE_DIR_READ)
804 return;
805
806 clear_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags);
807 tape->valid = 0;
808 if (tape->buf != NULL) {
809 kfree(tape->buf);
810 tape->buf = NULL;
811 }
812
813 tape->chrdev_dir = IDETAPE_DIR_NONE;
814 }
815
816 /*
817 * Position the tape to the requested block using the LOCATE packet command.
818 * A READ POSITION command is then issued to check where we are positioned. Like
819 * all higher level operations, we queue the commands at the tail of the request
820 * queue and wait for their completion.
821 */
822 static int idetape_position_tape(ide_drive_t *drive, unsigned int block,
823 u8 partition, int skip)
824 {
825 idetape_tape_t *tape = drive->driver_data;
826 struct gendisk *disk = tape->disk;
827 int ret;
828 struct ide_atapi_pc pc;
829
830 if (tape->chrdev_dir == IDETAPE_DIR_READ)
831 __ide_tape_discard_merge_buffer(drive);
832 idetape_wait_ready(drive, 60 * 5 * HZ);
833 idetape_create_locate_cmd(drive, &pc, block, partition, skip);
834 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
835 if (ret)
836 return ret;
837
838 ret = ide_tape_read_position(drive);
839 if (ret < 0)
840 return ret;
841 return 0;
842 }
843
844 static void ide_tape_discard_merge_buffer(ide_drive_t *drive,
845 int restore_position)
846 {
847 idetape_tape_t *tape = drive->driver_data;
848 int seek, position;
849
850 __ide_tape_discard_merge_buffer(drive);
851 if (restore_position) {
852 position = ide_tape_read_position(drive);
853 seek = position > 0 ? position : 0;
854 if (idetape_position_tape(drive, seek, 0, 0)) {
855 printk(KERN_INFO "ide-tape: %s: position_tape failed in"
856 " %s\n", tape->name, __func__);
857 return;
858 }
859 }
860 }
861
862 /*
863 * Generate a read/write request for the block device interface and wait for it
864 * to be serviced.
865 */
866 static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int size)
867 {
868 idetape_tape_t *tape = drive->driver_data;
869 struct request *rq;
870 int ret;
871
872 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x, size: %d", cmd, size);
873
874 BUG_ON(cmd != REQ_IDETAPE_READ && cmd != REQ_IDETAPE_WRITE);
875 BUG_ON(size < 0 || size % tape->blk_size);
876
877 rq = blk_get_request(drive->queue, READ, __GFP_RECLAIM);
878 rq->cmd_type = REQ_TYPE_DRV_PRIV;
879 rq->cmd[13] = cmd;
880 rq->rq_disk = tape->disk;
881 rq->__sector = tape->first_frame;
882
883 if (size) {
884 ret = blk_rq_map_kern(drive->queue, rq, tape->buf, size,
885 __GFP_RECLAIM);
886 if (ret)
887 goto out_put;
888 }
889
890 blk_execute_rq(drive->queue, tape->disk, rq, 0);
891
892 /* calculate the number of transferred bytes and update buffer state */
893 size -= rq->resid_len;
894 tape->cur = tape->buf;
895 if (cmd == REQ_IDETAPE_READ)
896 tape->valid = size;
897 else
898 tape->valid = 0;
899
900 ret = size;
901 if (rq->errors == IDE_DRV_ERROR_GENERAL)
902 ret = -EIO;
903 out_put:
904 blk_put_request(rq);
905 return ret;
906 }
907
908 static void idetape_create_inquiry_cmd(struct ide_atapi_pc *pc)
909 {
910 ide_init_pc(pc);
911 pc->c[0] = INQUIRY;
912 pc->c[4] = 254;
913 pc->req_xfer = 254;
914 }
915
916 static void idetape_create_rewind_cmd(ide_drive_t *drive,
917 struct ide_atapi_pc *pc)
918 {
919 ide_init_pc(pc);
920 pc->c[0] = REZERO_UNIT;
921 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
922 }
923
924 static void idetape_create_erase_cmd(struct ide_atapi_pc *pc)
925 {
926 ide_init_pc(pc);
927 pc->c[0] = ERASE;
928 pc->c[1] = 1;
929 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
930 }
931
932 static void idetape_create_space_cmd(struct ide_atapi_pc *pc, int count, u8 cmd)
933 {
934 ide_init_pc(pc);
935 pc->c[0] = SPACE;
936 put_unaligned(cpu_to_be32(count), (unsigned int *) &pc->c[1]);
937 pc->c[1] = cmd;
938 pc->flags |= PC_FLAG_WAIT_FOR_DSC;
939 }
940
941 static void ide_tape_flush_merge_buffer(ide_drive_t *drive)
942 {
943 idetape_tape_t *tape = drive->driver_data;
944
945 if (tape->chrdev_dir != IDETAPE_DIR_WRITE) {
946 printk(KERN_ERR "ide-tape: bug: Trying to empty merge buffer"
947 " but we are not writing.\n");
948 return;
949 }
950 if (tape->buf) {
951 size_t aligned = roundup(tape->valid, tape->blk_size);
952
953 memset(tape->cur, 0, aligned - tape->valid);
954 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, aligned);
955 kfree(tape->buf);
956 tape->buf = NULL;
957 }
958 tape->chrdev_dir = IDETAPE_DIR_NONE;
959 }
960
961 static int idetape_init_rw(ide_drive_t *drive, int dir)
962 {
963 idetape_tape_t *tape = drive->driver_data;
964 int rc;
965
966 BUG_ON(dir != IDETAPE_DIR_READ && dir != IDETAPE_DIR_WRITE);
967
968 if (tape->chrdev_dir == dir)
969 return 0;
970
971 if (tape->chrdev_dir == IDETAPE_DIR_READ)
972 ide_tape_discard_merge_buffer(drive, 1);
973 else if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
974 ide_tape_flush_merge_buffer(drive);
975 idetape_flush_tape_buffers(drive);
976 }
977
978 if (tape->buf || tape->valid) {
979 printk(KERN_ERR "ide-tape: valid should be 0 now\n");
980 tape->valid = 0;
981 }
982
983 tape->buf = kmalloc(tape->buffer_size, GFP_KERNEL);
984 if (!tape->buf)
985 return -ENOMEM;
986 tape->chrdev_dir = dir;
987 tape->cur = tape->buf;
988
989 /*
990 * Issue a 0 rw command to ensure that DSC handshake is
991 * switched from completion mode to buffer available mode. No
992 * point in issuing this if DSC overlap isn't supported, some
993 * drives (Seagate STT3401A) will return an error.
994 */
995 if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) {
996 int cmd = dir == IDETAPE_DIR_READ ? REQ_IDETAPE_READ
997 : REQ_IDETAPE_WRITE;
998
999 rc = idetape_queue_rw_tail(drive, cmd, 0);
1000 if (rc < 0) {
1001 kfree(tape->buf);
1002 tape->buf = NULL;
1003 tape->chrdev_dir = IDETAPE_DIR_NONE;
1004 return rc;
1005 }
1006 }
1007
1008 return 0;
1009 }
1010
1011 static void idetape_pad_zeros(ide_drive_t *drive, int bcount)
1012 {
1013 idetape_tape_t *tape = drive->driver_data;
1014
1015 memset(tape->buf, 0, tape->buffer_size);
1016
1017 while (bcount) {
1018 unsigned int count = min(tape->buffer_size, bcount);
1019
1020 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, count);
1021 bcount -= count;
1022 }
1023 }
1024
1025 /*
1026 * Rewinds the tape to the Beginning Of the current Partition (BOP). We
1027 * currently support only one partition.
1028 */
1029 static int idetape_rewind_tape(ide_drive_t *drive)
1030 {
1031 struct ide_tape_obj *tape = drive->driver_data;
1032 struct gendisk *disk = tape->disk;
1033 struct ide_atapi_pc pc;
1034 int ret;
1035
1036 ide_debug_log(IDE_DBG_FUNC, "enter");
1037
1038 idetape_create_rewind_cmd(drive, &pc);
1039 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1040 if (ret)
1041 return ret;
1042
1043 ret = ide_tape_read_position(drive);
1044 if (ret < 0)
1045 return ret;
1046 return 0;
1047 }
1048
1049 /* mtio.h compatible commands should be issued to the chrdev interface. */
1050 static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd,
1051 unsigned long arg)
1052 {
1053 idetape_tape_t *tape = drive->driver_data;
1054 void __user *argp = (void __user *)arg;
1055
1056 struct idetape_config {
1057 int dsc_rw_frequency;
1058 int dsc_media_access_frequency;
1059 int nr_stages;
1060 } config;
1061
1062 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%04x", cmd);
1063
1064 switch (cmd) {
1065 case 0x0340:
1066 if (copy_from_user(&config, argp, sizeof(config)))
1067 return -EFAULT;
1068 tape->best_dsc_rw_freq = config.dsc_rw_frequency;
1069 break;
1070 case 0x0350:
1071 memset(&config, 0, sizeof(config));
1072 config.dsc_rw_frequency = (int) tape->best_dsc_rw_freq;
1073 config.nr_stages = 1;
1074 if (copy_to_user(argp, &config, sizeof(config)))
1075 return -EFAULT;
1076 break;
1077 default:
1078 return -EIO;
1079 }
1080 return 0;
1081 }
1082
1083 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
1084 int mt_count)
1085 {
1086 idetape_tape_t *tape = drive->driver_data;
1087 struct gendisk *disk = tape->disk;
1088 struct ide_atapi_pc pc;
1089 int retval, count = 0;
1090 int sprev = !!(tape->caps[4] & 0x20);
1091
1092
1093 ide_debug_log(IDE_DBG_FUNC, "mt_op: %d, mt_count: %d", mt_op, mt_count);
1094
1095 if (mt_count == 0)
1096 return 0;
1097 if (MTBSF == mt_op || MTBSFM == mt_op) {
1098 if (!sprev)
1099 return -EIO;
1100 mt_count = -mt_count;
1101 }
1102
1103 if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1104 tape->valid = 0;
1105 if (test_and_clear_bit(ilog2(IDE_AFLAG_FILEMARK),
1106 &drive->atapi_flags))
1107 ++count;
1108 ide_tape_discard_merge_buffer(drive, 0);
1109 }
1110
1111 switch (mt_op) {
1112 case MTFSF:
1113 case MTBSF:
1114 idetape_create_space_cmd(&pc, mt_count - count,
1115 IDETAPE_SPACE_OVER_FILEMARK);
1116 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1117 case MTFSFM:
1118 case MTBSFM:
1119 if (!sprev)
1120 return -EIO;
1121 retval = idetape_space_over_filemarks(drive, MTFSF,
1122 mt_count - count);
1123 if (retval)
1124 return retval;
1125 count = (MTBSFM == mt_op ? 1 : -1);
1126 return idetape_space_over_filemarks(drive, MTFSF, count);
1127 default:
1128 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
1129 mt_op);
1130 return -EIO;
1131 }
1132 }
1133
1134 /*
1135 * Our character device read / write functions.
1136 *
1137 * The tape is optimized to maximize throughput when it is transferring an
1138 * integral number of the "continuous transfer limit", which is a parameter of
1139 * the specific tape (26kB on my particular tape, 32kB for Onstream).
1140 *
1141 * As of version 1.3 of the driver, the character device provides an abstract
1142 * continuous view of the media - any mix of block sizes (even 1 byte) on the
1143 * same backup/restore procedure is supported. The driver will internally
1144 * convert the requests to the recommended transfer unit, so that an unmatch
1145 * between the user's block size to the recommended size will only result in a
1146 * (slightly) increased driver overhead, but will no longer hit performance.
1147 * This is not applicable to Onstream.
1148 */
1149 static ssize_t idetape_chrdev_read(struct file *file, char __user *buf,
1150 size_t count, loff_t *ppos)
1151 {
1152 struct ide_tape_obj *tape = file->private_data;
1153 ide_drive_t *drive = tape->drive;
1154 size_t done = 0;
1155 ssize_t ret = 0;
1156 int rc;
1157
1158 ide_debug_log(IDE_DBG_FUNC, "count %Zd", count);
1159
1160 if (tape->chrdev_dir != IDETAPE_DIR_READ) {
1161 if (test_bit(ilog2(IDE_AFLAG_DETECT_BS), &drive->atapi_flags))
1162 if (count > tape->blk_size &&
1163 (count % tape->blk_size) == 0)
1164 tape->user_bs_factor = count / tape->blk_size;
1165 }
1166
1167 rc = idetape_init_rw(drive, IDETAPE_DIR_READ);
1168 if (rc < 0)
1169 return rc;
1170
1171 while (done < count) {
1172 size_t todo;
1173
1174 /* refill if staging buffer is empty */
1175 if (!tape->valid) {
1176 /* If we are at a filemark, nothing more to read */
1177 if (test_bit(ilog2(IDE_AFLAG_FILEMARK),
1178 &drive->atapi_flags))
1179 break;
1180 /* read */
1181 if (idetape_queue_rw_tail(drive, REQ_IDETAPE_READ,
1182 tape->buffer_size) <= 0)
1183 break;
1184 }
1185
1186 /* copy out */
1187 todo = min_t(size_t, count - done, tape->valid);
1188 if (copy_to_user(buf + done, tape->cur, todo))
1189 ret = -EFAULT;
1190
1191 tape->cur += todo;
1192 tape->valid -= todo;
1193 done += todo;
1194 }
1195
1196 if (!done && test_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags)) {
1197 idetape_space_over_filemarks(drive, MTFSF, 1);
1198 return 0;
1199 }
1200
1201 return ret ? ret : done;
1202 }
1203
1204 static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf,
1205 size_t count, loff_t *ppos)
1206 {
1207 struct ide_tape_obj *tape = file->private_data;
1208 ide_drive_t *drive = tape->drive;
1209 size_t done = 0;
1210 ssize_t ret = 0;
1211 int rc;
1212
1213 /* The drive is write protected. */
1214 if (tape->write_prot)
1215 return -EACCES;
1216
1217 ide_debug_log(IDE_DBG_FUNC, "count %Zd", count);
1218
1219 /* Initialize write operation */
1220 rc = idetape_init_rw(drive, IDETAPE_DIR_WRITE);
1221 if (rc < 0)
1222 return rc;
1223
1224 while (done < count) {
1225 size_t todo;
1226
1227 /* flush if staging buffer is full */
1228 if (tape->valid == tape->buffer_size &&
1229 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE,
1230 tape->buffer_size) <= 0)
1231 return rc;
1232
1233 /* copy in */
1234 todo = min_t(size_t, count - done,
1235 tape->buffer_size - tape->valid);
1236 if (copy_from_user(tape->cur, buf + done, todo))
1237 ret = -EFAULT;
1238
1239 tape->cur += todo;
1240 tape->valid += todo;
1241 done += todo;
1242 }
1243
1244 return ret ? ret : done;
1245 }
1246
1247 static int idetape_write_filemark(ide_drive_t *drive)
1248 {
1249 struct ide_tape_obj *tape = drive->driver_data;
1250 struct ide_atapi_pc pc;
1251
1252 /* Write a filemark */
1253 idetape_create_write_filemark_cmd(drive, &pc, 1);
1254 if (ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0)) {
1255 printk(KERN_ERR "ide-tape: Couldn't write a filemark\n");
1256 return -EIO;
1257 }
1258 return 0;
1259 }
1260
1261 /*
1262 * Called from idetape_chrdev_ioctl when the general mtio MTIOCTOP ioctl is
1263 * requested.
1264 *
1265 * Note: MTBSF and MTBSFM are not supported when the tape doesn't support
1266 * spacing over filemarks in the reverse direction. In this case, MTFSFM is also
1267 * usually not supported.
1268 *
1269 * The following commands are currently not supported:
1270 *
1271 * MTFSS, MTBSS, MTWSM, MTSETDENSITY, MTSETDRVBUFFER, MT_ST_BOOLEANS,
1272 * MT_ST_WRITE_THRESHOLD.
1273 */
1274 static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1275 {
1276 idetape_tape_t *tape = drive->driver_data;
1277 struct gendisk *disk = tape->disk;
1278 struct ide_atapi_pc pc;
1279 int i, retval;
1280
1281 ide_debug_log(IDE_DBG_FUNC, "MTIOCTOP ioctl: mt_op: %d, mt_count: %d",
1282 mt_op, mt_count);
1283
1284 switch (mt_op) {
1285 case MTFSF:
1286 case MTFSFM:
1287 case MTBSF:
1288 case MTBSFM:
1289 if (!mt_count)
1290 return 0;
1291 return idetape_space_over_filemarks(drive, mt_op, mt_count);
1292 default:
1293 break;
1294 }
1295
1296 switch (mt_op) {
1297 case MTWEOF:
1298 if (tape->write_prot)
1299 return -EACCES;
1300 ide_tape_discard_merge_buffer(drive, 1);
1301 for (i = 0; i < mt_count; i++) {
1302 retval = idetape_write_filemark(drive);
1303 if (retval)
1304 return retval;
1305 }
1306 return 0;
1307 case MTREW:
1308 ide_tape_discard_merge_buffer(drive, 0);
1309 if (idetape_rewind_tape(drive))
1310 return -EIO;
1311 return 0;
1312 case MTLOAD:
1313 ide_tape_discard_merge_buffer(drive, 0);
1314 return ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1315 case MTUNLOAD:
1316 case MTOFFL:
1317 /*
1318 * If door is locked, attempt to unlock before
1319 * attempting to eject.
1320 */
1321 if (tape->door_locked) {
1322 if (!ide_set_media_lock(drive, disk, 0))
1323 tape->door_locked = DOOR_UNLOCKED;
1324 }
1325 ide_tape_discard_merge_buffer(drive, 0);
1326 retval = ide_do_start_stop(drive, disk, !IDETAPE_LU_LOAD_MASK);
1327 if (!retval)
1328 clear_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT),
1329 &drive->atapi_flags);
1330 return retval;
1331 case MTNOP:
1332 ide_tape_discard_merge_buffer(drive, 0);
1333 return idetape_flush_tape_buffers(drive);
1334 case MTRETEN:
1335 ide_tape_discard_merge_buffer(drive, 0);
1336 return ide_do_start_stop(drive, disk,
1337 IDETAPE_LU_RETENSION_MASK | IDETAPE_LU_LOAD_MASK);
1338 case MTEOM:
1339 idetape_create_space_cmd(&pc, 0, IDETAPE_SPACE_TO_EOD);
1340 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1341 case MTERASE:
1342 (void)idetape_rewind_tape(drive);
1343 idetape_create_erase_cmd(&pc);
1344 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1345 case MTSETBLK:
1346 if (mt_count) {
1347 if (mt_count < tape->blk_size ||
1348 mt_count % tape->blk_size)
1349 return -EIO;
1350 tape->user_bs_factor = mt_count / tape->blk_size;
1351 clear_bit(ilog2(IDE_AFLAG_DETECT_BS),
1352 &drive->atapi_flags);
1353 } else
1354 set_bit(ilog2(IDE_AFLAG_DETECT_BS),
1355 &drive->atapi_flags);
1356 return 0;
1357 case MTSEEK:
1358 ide_tape_discard_merge_buffer(drive, 0);
1359 return idetape_position_tape(drive,
1360 mt_count * tape->user_bs_factor, tape->partition, 0);
1361 case MTSETPART:
1362 ide_tape_discard_merge_buffer(drive, 0);
1363 return idetape_position_tape(drive, 0, mt_count, 0);
1364 case MTFSR:
1365 case MTBSR:
1366 case MTLOCK:
1367 retval = ide_set_media_lock(drive, disk, 1);
1368 if (retval)
1369 return retval;
1370 tape->door_locked = DOOR_EXPLICITLY_LOCKED;
1371 return 0;
1372 case MTUNLOCK:
1373 retval = ide_set_media_lock(drive, disk, 0);
1374 if (retval)
1375 return retval;
1376 tape->door_locked = DOOR_UNLOCKED;
1377 return 0;
1378 default:
1379 printk(KERN_ERR "ide-tape: MTIO operation %d not supported\n",
1380 mt_op);
1381 return -EIO;
1382 }
1383 }
1384
1385 /*
1386 * Our character device ioctls. General mtio.h magnetic io commands are
1387 * supported here, and not in the corresponding block interface. Our own
1388 * ide-tape ioctls are supported on both interfaces.
1389 */
1390 static long do_idetape_chrdev_ioctl(struct file *file,
1391 unsigned int cmd, unsigned long arg)
1392 {
1393 struct ide_tape_obj *tape = file->private_data;
1394 ide_drive_t *drive = tape->drive;
1395 struct mtop mtop;
1396 struct mtget mtget;
1397 struct mtpos mtpos;
1398 int block_offset = 0, position = tape->first_frame;
1399 void __user *argp = (void __user *)arg;
1400
1401 ide_debug_log(IDE_DBG_FUNC, "cmd: 0x%x", cmd);
1402
1403 if (tape->chrdev_dir == IDETAPE_DIR_WRITE) {
1404 ide_tape_flush_merge_buffer(drive);
1405 idetape_flush_tape_buffers(drive);
1406 }
1407 if (cmd == MTIOCGET || cmd == MTIOCPOS) {
1408 block_offset = tape->valid /
1409 (tape->blk_size * tape->user_bs_factor);
1410 position = ide_tape_read_position(drive);
1411 if (position < 0)
1412 return -EIO;
1413 }
1414 switch (cmd) {
1415 case MTIOCTOP:
1416 if (copy_from_user(&mtop, argp, sizeof(struct mtop)))
1417 return -EFAULT;
1418 return idetape_mtioctop(drive, mtop.mt_op, mtop.mt_count);
1419 case MTIOCGET:
1420 memset(&mtget, 0, sizeof(struct mtget));
1421 mtget.mt_type = MT_ISSCSI2;
1422 mtget.mt_blkno = position / tape->user_bs_factor - block_offset;
1423 mtget.mt_dsreg =
1424 ((tape->blk_size * tape->user_bs_factor)
1425 << MT_ST_BLKSIZE_SHIFT) & MT_ST_BLKSIZE_MASK;
1426
1427 if (tape->drv_write_prot)
1428 mtget.mt_gstat |= GMT_WR_PROT(0xffffffff);
1429
1430 if (copy_to_user(argp, &mtget, sizeof(struct mtget)))
1431 return -EFAULT;
1432 return 0;
1433 case MTIOCPOS:
1434 mtpos.mt_blkno = position / tape->user_bs_factor - block_offset;
1435 if (copy_to_user(argp, &mtpos, sizeof(struct mtpos)))
1436 return -EFAULT;
1437 return 0;
1438 default:
1439 if (tape->chrdev_dir == IDETAPE_DIR_READ)
1440 ide_tape_discard_merge_buffer(drive, 1);
1441 return idetape_blkdev_ioctl(drive, cmd, arg);
1442 }
1443 }
1444
1445 static long idetape_chrdev_ioctl(struct file *file,
1446 unsigned int cmd, unsigned long arg)
1447 {
1448 long ret;
1449 mutex_lock(&ide_tape_mutex);
1450 ret = do_idetape_chrdev_ioctl(file, cmd, arg);
1451 mutex_unlock(&ide_tape_mutex);
1452 return ret;
1453 }
1454
1455 /*
1456 * Do a mode sense page 0 with block descriptor and if it succeeds set the tape
1457 * block size with the reported value.
1458 */
1459 static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
1460 {
1461 idetape_tape_t *tape = drive->driver_data;
1462 struct ide_atapi_pc pc;
1463 u8 buf[12];
1464
1465 idetape_create_mode_sense_cmd(&pc, IDETAPE_BLOCK_DESCRIPTOR);
1466 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) {
1467 printk(KERN_ERR "ide-tape: Can't get block descriptor\n");
1468 if (tape->blk_size == 0) {
1469 printk(KERN_WARNING "ide-tape: Cannot deal with zero "
1470 "block size, assuming 32k\n");
1471 tape->blk_size = 32768;
1472 }
1473 return;
1474 }
1475 tape->blk_size = (buf[4 + 5] << 16) +
1476 (buf[4 + 6] << 8) +
1477 buf[4 + 7];
1478 tape->drv_write_prot = (buf[2] & 0x80) >> 7;
1479
1480 ide_debug_log(IDE_DBG_FUNC, "blk_size: %d, write_prot: %d",
1481 tape->blk_size, tape->drv_write_prot);
1482 }
1483
1484 static int idetape_chrdev_open(struct inode *inode, struct file *filp)
1485 {
1486 unsigned int minor = iminor(inode), i = minor & ~0xc0;
1487 ide_drive_t *drive;
1488 idetape_tape_t *tape;
1489 int retval;
1490
1491 if (i >= MAX_HWIFS * MAX_DRIVES)
1492 return -ENXIO;
1493
1494 mutex_lock(&idetape_chrdev_mutex);
1495
1496 tape = ide_tape_get(NULL, true, i);
1497 if (!tape) {
1498 mutex_unlock(&idetape_chrdev_mutex);
1499 return -ENXIO;
1500 }
1501
1502 drive = tape->drive;
1503 filp->private_data = tape;
1504
1505 ide_debug_log(IDE_DBG_FUNC, "enter");
1506
1507 /*
1508 * We really want to do nonseekable_open(inode, filp); here, but some
1509 * versions of tar incorrectly call lseek on tapes and bail out if that
1510 * fails. So we disallow pread() and pwrite(), but permit lseeks.
1511 */
1512 filp->f_mode &= ~(FMODE_PREAD | FMODE_PWRITE);
1513
1514
1515 if (test_and_set_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags)) {
1516 retval = -EBUSY;
1517 goto out_put_tape;
1518 }
1519
1520 retval = idetape_wait_ready(drive, 60 * HZ);
1521 if (retval) {
1522 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1523 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
1524 goto out_put_tape;
1525 }
1526
1527 ide_tape_read_position(drive);
1528 if (!test_bit(ilog2(IDE_AFLAG_ADDRESS_VALID), &drive->atapi_flags))
1529 (void)idetape_rewind_tape(drive);
1530
1531 /* Read block size and write protect status from drive. */
1532 ide_tape_get_bsize_from_bdesc(drive);
1533
1534 /* Set write protect flag if device is opened as read-only. */
1535 if ((filp->f_flags & O_ACCMODE) == O_RDONLY)
1536 tape->write_prot = 1;
1537 else
1538 tape->write_prot = tape->drv_write_prot;
1539
1540 /* Make sure drive isn't write protected if user wants to write. */
1541 if (tape->write_prot) {
1542 if ((filp->f_flags & O_ACCMODE) == O_WRONLY ||
1543 (filp->f_flags & O_ACCMODE) == O_RDWR) {
1544 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1545 retval = -EROFS;
1546 goto out_put_tape;
1547 }
1548 }
1549
1550 /* Lock the tape drive door so user can't eject. */
1551 if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
1552 if (!ide_set_media_lock(drive, tape->disk, 1)) {
1553 if (tape->door_locked != DOOR_EXPLICITLY_LOCKED)
1554 tape->door_locked = DOOR_LOCKED;
1555 }
1556 }
1557 mutex_unlock(&idetape_chrdev_mutex);
1558
1559 return 0;
1560
1561 out_put_tape:
1562 ide_tape_put(tape);
1563
1564 mutex_unlock(&idetape_chrdev_mutex);
1565
1566 return retval;
1567 }
1568
1569 static void idetape_write_release(ide_drive_t *drive, unsigned int minor)
1570 {
1571 idetape_tape_t *tape = drive->driver_data;
1572
1573 ide_tape_flush_merge_buffer(drive);
1574 tape->buf = kmalloc(tape->buffer_size, GFP_KERNEL);
1575 if (tape->buf != NULL) {
1576 idetape_pad_zeros(drive, tape->blk_size *
1577 (tape->user_bs_factor - 1));
1578 kfree(tape->buf);
1579 tape->buf = NULL;
1580 }
1581 idetape_write_filemark(drive);
1582 idetape_flush_tape_buffers(drive);
1583 idetape_flush_tape_buffers(drive);
1584 }
1585
1586 static int idetape_chrdev_release(struct inode *inode, struct file *filp)
1587 {
1588 struct ide_tape_obj *tape = filp->private_data;
1589 ide_drive_t *drive = tape->drive;
1590 unsigned int minor = iminor(inode);
1591
1592 mutex_lock(&idetape_chrdev_mutex);
1593
1594 tape = drive->driver_data;
1595
1596 ide_debug_log(IDE_DBG_FUNC, "enter");
1597
1598 if (tape->chrdev_dir == IDETAPE_DIR_WRITE)
1599 idetape_write_release(drive, minor);
1600 if (tape->chrdev_dir == IDETAPE_DIR_READ) {
1601 if (minor < 128)
1602 ide_tape_discard_merge_buffer(drive, 1);
1603 }
1604
1605 if (minor < 128 && test_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT),
1606 &drive->atapi_flags))
1607 (void) idetape_rewind_tape(drive);
1608
1609 if (tape->chrdev_dir == IDETAPE_DIR_NONE) {
1610 if (tape->door_locked == DOOR_LOCKED) {
1611 if (!ide_set_media_lock(drive, tape->disk, 0))
1612 tape->door_locked = DOOR_UNLOCKED;
1613 }
1614 }
1615 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1616 ide_tape_put(tape);
1617
1618 mutex_unlock(&idetape_chrdev_mutex);
1619
1620 return 0;
1621 }
1622
1623 static void idetape_get_inquiry_results(ide_drive_t *drive)
1624 {
1625 idetape_tape_t *tape = drive->driver_data;
1626 struct ide_atapi_pc pc;
1627 u8 pc_buf[256];
1628 char fw_rev[4], vendor_id[8], product_id[16];
1629
1630 idetape_create_inquiry_cmd(&pc);
1631 if (ide_queue_pc_tail(drive, tape->disk, &pc, pc_buf, pc.req_xfer)) {
1632 printk(KERN_ERR "ide-tape: %s: can't get INQUIRY results\n",
1633 tape->name);
1634 return;
1635 }
1636 memcpy(vendor_id, &pc_buf[8], 8);
1637 memcpy(product_id, &pc_buf[16], 16);
1638 memcpy(fw_rev, &pc_buf[32], 4);
1639
1640 ide_fixstring(vendor_id, 8, 0);
1641 ide_fixstring(product_id, 16, 0);
1642 ide_fixstring(fw_rev, 4, 0);
1643
1644 printk(KERN_INFO "ide-tape: %s <-> %s: %.8s %.16s rev %.4s\n",
1645 drive->name, tape->name, vendor_id, product_id, fw_rev);
1646 }
1647
1648 /*
1649 * Ask the tape about its various parameters. In particular, we will adjust our
1650 * data transfer buffer size to the recommended value as returned by the tape.
1651 */
1652 static void idetape_get_mode_sense_results(ide_drive_t *drive)
1653 {
1654 idetape_tape_t *tape = drive->driver_data;
1655 struct ide_atapi_pc pc;
1656 u8 buf[24], *caps;
1657 u8 speed, max_speed;
1658
1659 idetape_create_mode_sense_cmd(&pc, IDETAPE_CAPABILITIES_PAGE);
1660 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) {
1661 printk(KERN_ERR "ide-tape: Can't get tape parameters - assuming"
1662 " some default values\n");
1663 tape->blk_size = 512;
1664 put_unaligned(52, (u16 *)&tape->caps[12]);
1665 put_unaligned(540, (u16 *)&tape->caps[14]);
1666 put_unaligned(6*52, (u16 *)&tape->caps[16]);
1667 return;
1668 }
1669 caps = buf + 4 + buf[3];
1670
1671 /* convert to host order and save for later use */
1672 speed = be16_to_cpup((__be16 *)&caps[14]);
1673 max_speed = be16_to_cpup((__be16 *)&caps[8]);
1674
1675 *(u16 *)&caps[8] = max_speed;
1676 *(u16 *)&caps[12] = be16_to_cpup((__be16 *)&caps[12]);
1677 *(u16 *)&caps[14] = speed;
1678 *(u16 *)&caps[16] = be16_to_cpup((__be16 *)&caps[16]);
1679
1680 if (!speed) {
1681 printk(KERN_INFO "ide-tape: %s: invalid tape speed "
1682 "(assuming 650KB/sec)\n", drive->name);
1683 *(u16 *)&caps[14] = 650;
1684 }
1685 if (!max_speed) {
1686 printk(KERN_INFO "ide-tape: %s: invalid max_speed "
1687 "(assuming 650KB/sec)\n", drive->name);
1688 *(u16 *)&caps[8] = 650;
1689 }
1690
1691 memcpy(&tape->caps, caps, 20);
1692
1693 /* device lacks locking support according to capabilities page */
1694 if ((caps[6] & 1) == 0)
1695 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
1696
1697 if (caps[7] & 0x02)
1698 tape->blk_size = 512;
1699 else if (caps[7] & 0x04)
1700 tape->blk_size = 1024;
1701 }
1702
1703 #ifdef CONFIG_IDE_PROC_FS
1704 #define ide_tape_devset_get(name, field) \
1705 static int get_##name(ide_drive_t *drive) \
1706 { \
1707 idetape_tape_t *tape = drive->driver_data; \
1708 return tape->field; \
1709 }
1710
1711 #define ide_tape_devset_set(name, field) \
1712 static int set_##name(ide_drive_t *drive, int arg) \
1713 { \
1714 idetape_tape_t *tape = drive->driver_data; \
1715 tape->field = arg; \
1716 return 0; \
1717 }
1718
1719 #define ide_tape_devset_rw_field(_name, _field) \
1720 ide_tape_devset_get(_name, _field) \
1721 ide_tape_devset_set(_name, _field) \
1722 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
1723
1724 #define ide_tape_devset_r_field(_name, _field) \
1725 ide_tape_devset_get(_name, _field) \
1726 IDE_DEVSET(_name, 0, get_##_name, NULL)
1727
1728 static int mulf_tdsc(ide_drive_t *drive) { return 1000; }
1729 static int divf_tdsc(ide_drive_t *drive) { return HZ; }
1730 static int divf_buffer(ide_drive_t *drive) { return 2; }
1731 static int divf_buffer_size(ide_drive_t *drive) { return 1024; }
1732
1733 ide_devset_rw_flag(dsc_overlap, IDE_DFLAG_DSC_OVERLAP);
1734
1735 ide_tape_devset_rw_field(tdsc, best_dsc_rw_freq);
1736
1737 ide_tape_devset_r_field(avg_speed, avg_speed);
1738 ide_tape_devset_r_field(speed, caps[14]);
1739 ide_tape_devset_r_field(buffer, caps[16]);
1740 ide_tape_devset_r_field(buffer_size, buffer_size);
1741
1742 static const struct ide_proc_devset idetape_settings[] = {
1743 __IDE_PROC_DEVSET(avg_speed, 0, 0xffff, NULL, NULL),
1744 __IDE_PROC_DEVSET(buffer, 0, 0xffff, NULL, divf_buffer),
1745 __IDE_PROC_DEVSET(buffer_size, 0, 0xffff, NULL, divf_buffer_size),
1746 __IDE_PROC_DEVSET(dsc_overlap, 0, 1, NULL, NULL),
1747 __IDE_PROC_DEVSET(speed, 0, 0xffff, NULL, NULL),
1748 __IDE_PROC_DEVSET(tdsc, IDETAPE_DSC_RW_MIN, IDETAPE_DSC_RW_MAX,
1749 mulf_tdsc, divf_tdsc),
1750 { NULL },
1751 };
1752 #endif
1753
1754 /*
1755 * The function below is called to:
1756 *
1757 * 1. Initialize our various state variables.
1758 * 2. Ask the tape for its capabilities.
1759 * 3. Allocate a buffer which will be used for data transfer. The buffer size
1760 * is chosen based on the recommendation which we received in step 2.
1761 *
1762 * Note that at this point ide.c already assigned us an irq, so that we can
1763 * queue requests here and wait for their completion.
1764 */
1765 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor)
1766 {
1767 unsigned long t;
1768 int speed;
1769 int buffer_size;
1770 u16 *ctl = (u16 *)&tape->caps[12];
1771
1772 ide_debug_log(IDE_DBG_FUNC, "minor: %d", minor);
1773
1774 drive->pc_callback = ide_tape_callback;
1775
1776 drive->dev_flags |= IDE_DFLAG_DSC_OVERLAP;
1777
1778 if (drive->hwif->host_flags & IDE_HFLAG_NO_DSC) {
1779 printk(KERN_INFO "ide-tape: %s: disabling DSC overlap\n",
1780 tape->name);
1781 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1782 }
1783
1784 /* Seagate Travan drives do not support DSC overlap. */
1785 if (strstr((char *)&drive->id[ATA_ID_PROD], "Seagate STT3401"))
1786 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1787
1788 tape->minor = minor;
1789 tape->name[0] = 'h';
1790 tape->name[1] = 't';
1791 tape->name[2] = '0' + minor;
1792 tape->chrdev_dir = IDETAPE_DIR_NONE;
1793
1794 idetape_get_inquiry_results(drive);
1795 idetape_get_mode_sense_results(drive);
1796 ide_tape_get_bsize_from_bdesc(drive);
1797 tape->user_bs_factor = 1;
1798 tape->buffer_size = *ctl * tape->blk_size;
1799 while (tape->buffer_size > 0xffff) {
1800 printk(KERN_NOTICE "ide-tape: decreasing stage size\n");
1801 *ctl /= 2;
1802 tape->buffer_size = *ctl * tape->blk_size;
1803 }
1804 buffer_size = tape->buffer_size;
1805
1806 /* select the "best" DSC read/write polling freq */
1807 speed = max(*(u16 *)&tape->caps[14], *(u16 *)&tape->caps[8]);
1808
1809 t = (IDETAPE_FIFO_THRESHOLD * tape->buffer_size * HZ) / (speed * 1000);
1810
1811 /*
1812 * Ensure that the number we got makes sense; limit it within
1813 * IDETAPE_DSC_RW_MIN and IDETAPE_DSC_RW_MAX.
1814 */
1815 tape->best_dsc_rw_freq = clamp_t(unsigned long, t, IDETAPE_DSC_RW_MIN,
1816 IDETAPE_DSC_RW_MAX);
1817 printk(KERN_INFO "ide-tape: %s <-> %s: %dKBps, %d*%dkB buffer, "
1818 "%ums tDSC%s\n",
1819 drive->name, tape->name, *(u16 *)&tape->caps[14],
1820 (*(u16 *)&tape->caps[16] * 512) / tape->buffer_size,
1821 tape->buffer_size / 1024,
1822 jiffies_to_msecs(tape->best_dsc_rw_freq),
1823 (drive->dev_flags & IDE_DFLAG_USING_DMA) ? ", DMA" : "");
1824
1825 ide_proc_register_driver(drive, tape->driver);
1826 }
1827
1828 static void ide_tape_remove(ide_drive_t *drive)
1829 {
1830 idetape_tape_t *tape = drive->driver_data;
1831
1832 ide_proc_unregister_driver(drive, tape->driver);
1833 device_del(&tape->dev);
1834 ide_unregister_region(tape->disk);
1835
1836 mutex_lock(&idetape_ref_mutex);
1837 put_device(&tape->dev);
1838 mutex_unlock(&idetape_ref_mutex);
1839 }
1840
1841 static void ide_tape_release(struct device *dev)
1842 {
1843 struct ide_tape_obj *tape = to_ide_drv(dev, ide_tape_obj);
1844 ide_drive_t *drive = tape->drive;
1845 struct gendisk *g = tape->disk;
1846
1847 BUG_ON(tape->valid);
1848
1849 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1850 drive->driver_data = NULL;
1851 device_destroy(idetape_sysfs_class, MKDEV(IDETAPE_MAJOR, tape->minor));
1852 device_destroy(idetape_sysfs_class,
1853 MKDEV(IDETAPE_MAJOR, tape->minor + 128));
1854 idetape_devs[tape->minor] = NULL;
1855 g->private_data = NULL;
1856 put_disk(g);
1857 kfree(tape);
1858 }
1859
1860 #ifdef CONFIG_IDE_PROC_FS
1861 static int idetape_name_proc_show(struct seq_file *m, void *v)
1862 {
1863 ide_drive_t *drive = (ide_drive_t *) m->private;
1864 idetape_tape_t *tape = drive->driver_data;
1865
1866 seq_printf(m, "%s\n", tape->name);
1867 return 0;
1868 }
1869
1870 static int idetape_name_proc_open(struct inode *inode, struct file *file)
1871 {
1872 return single_open(file, idetape_name_proc_show, PDE_DATA(inode));
1873 }
1874
1875 static const struct file_operations idetape_name_proc_fops = {
1876 .owner = THIS_MODULE,
1877 .open = idetape_name_proc_open,
1878 .read = seq_read,
1879 .llseek = seq_lseek,
1880 .release = single_release,
1881 };
1882
1883 static ide_proc_entry_t idetape_proc[] = {
1884 { "capacity", S_IFREG|S_IRUGO, &ide_capacity_proc_fops },
1885 { "name", S_IFREG|S_IRUGO, &idetape_name_proc_fops },
1886 {}
1887 };
1888
1889 static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)
1890 {
1891 return idetape_proc;
1892 }
1893
1894 static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)
1895 {
1896 return idetape_settings;
1897 }
1898 #endif
1899
1900 static int ide_tape_probe(ide_drive_t *);
1901
1902 static struct ide_driver idetape_driver = {
1903 .gen_driver = {
1904 .owner = THIS_MODULE,
1905 .name = "ide-tape",
1906 .bus = &ide_bus_type,
1907 },
1908 .probe = ide_tape_probe,
1909 .remove = ide_tape_remove,
1910 .version = IDETAPE_VERSION,
1911 .do_request = idetape_do_request,
1912 #ifdef CONFIG_IDE_PROC_FS
1913 .proc_entries = ide_tape_proc_entries,
1914 .proc_devsets = ide_tape_proc_devsets,
1915 #endif
1916 };
1917
1918 /* Our character device supporting functions, passed to register_chrdev. */
1919 static const struct file_operations idetape_fops = {
1920 .owner = THIS_MODULE,
1921 .read = idetape_chrdev_read,
1922 .write = idetape_chrdev_write,
1923 .unlocked_ioctl = idetape_chrdev_ioctl,
1924 .open = idetape_chrdev_open,
1925 .release = idetape_chrdev_release,
1926 .llseek = noop_llseek,
1927 };
1928
1929 static int idetape_open(struct block_device *bdev, fmode_t mode)
1930 {
1931 struct ide_tape_obj *tape;
1932
1933 mutex_lock(&ide_tape_mutex);
1934 tape = ide_tape_get(bdev->bd_disk, false, 0);
1935 mutex_unlock(&ide_tape_mutex);
1936
1937 if (!tape)
1938 return -ENXIO;
1939
1940 return 0;
1941 }
1942
1943 static void idetape_release(struct gendisk *disk, fmode_t mode)
1944 {
1945 struct ide_tape_obj *tape = ide_drv_g(disk, ide_tape_obj);
1946
1947 mutex_lock(&ide_tape_mutex);
1948 ide_tape_put(tape);
1949 mutex_unlock(&ide_tape_mutex);
1950 }
1951
1952 static int idetape_ioctl(struct block_device *bdev, fmode_t mode,
1953 unsigned int cmd, unsigned long arg)
1954 {
1955 struct ide_tape_obj *tape = ide_drv_g(bdev->bd_disk, ide_tape_obj);
1956 ide_drive_t *drive = tape->drive;
1957 int err;
1958
1959 mutex_lock(&ide_tape_mutex);
1960 err = generic_ide_ioctl(drive, bdev, cmd, arg);
1961 if (err == -EINVAL)
1962 err = idetape_blkdev_ioctl(drive, cmd, arg);
1963 mutex_unlock(&ide_tape_mutex);
1964
1965 return err;
1966 }
1967
1968 static const struct block_device_operations idetape_block_ops = {
1969 .owner = THIS_MODULE,
1970 .open = idetape_open,
1971 .release = idetape_release,
1972 .ioctl = idetape_ioctl,
1973 };
1974
1975 static int ide_tape_probe(ide_drive_t *drive)
1976 {
1977 idetape_tape_t *tape;
1978 struct gendisk *g;
1979 int minor;
1980
1981 ide_debug_log(IDE_DBG_FUNC, "enter");
1982
1983 if (!strstr(DRV_NAME, drive->driver_req))
1984 goto failed;
1985
1986 if (drive->media != ide_tape)
1987 goto failed;
1988
1989 if ((drive->dev_flags & IDE_DFLAG_ID_READ) &&
1990 ide_check_atapi_device(drive, DRV_NAME) == 0) {
1991 printk(KERN_ERR "ide-tape: %s: not supported by this version of"
1992 " the driver\n", drive->name);
1993 goto failed;
1994 }
1995 tape = kzalloc(sizeof(idetape_tape_t), GFP_KERNEL);
1996 if (tape == NULL) {
1997 printk(KERN_ERR "ide-tape: %s: Can't allocate a tape struct\n",
1998 drive->name);
1999 goto failed;
2000 }
2001
2002 g = alloc_disk(1 << PARTN_BITS);
2003 if (!g)
2004 goto out_free_tape;
2005
2006 ide_init_disk(g, drive);
2007
2008 tape->dev.parent = &drive->gendev;
2009 tape->dev.release = ide_tape_release;
2010 dev_set_name(&tape->dev, "%s", dev_name(&drive->gendev));
2011
2012 if (device_register(&tape->dev))
2013 goto out_free_disk;
2014
2015 tape->drive = drive;
2016 tape->driver = &idetape_driver;
2017 tape->disk = g;
2018
2019 g->private_data = &tape->driver;
2020
2021 drive->driver_data = tape;
2022
2023 mutex_lock(&idetape_ref_mutex);
2024 for (minor = 0; idetape_devs[minor]; minor++)
2025 ;
2026 idetape_devs[minor] = tape;
2027 mutex_unlock(&idetape_ref_mutex);
2028
2029 idetape_setup(drive, tape, minor);
2030
2031 device_create(idetape_sysfs_class, &drive->gendev,
2032 MKDEV(IDETAPE_MAJOR, minor), NULL, "%s", tape->name);
2033 device_create(idetape_sysfs_class, &drive->gendev,
2034 MKDEV(IDETAPE_MAJOR, minor + 128), NULL,
2035 "n%s", tape->name);
2036
2037 g->fops = &idetape_block_ops;
2038 ide_register_region(g);
2039
2040 return 0;
2041
2042 out_free_disk:
2043 put_disk(g);
2044 out_free_tape:
2045 kfree(tape);
2046 failed:
2047 return -ENODEV;
2048 }
2049
2050 static void __exit idetape_exit(void)
2051 {
2052 driver_unregister(&idetape_driver.gen_driver);
2053 class_destroy(idetape_sysfs_class);
2054 unregister_chrdev(IDETAPE_MAJOR, "ht");
2055 }
2056
2057 static int __init idetape_init(void)
2058 {
2059 int error = 1;
2060 idetape_sysfs_class = class_create(THIS_MODULE, "ide_tape");
2061 if (IS_ERR(idetape_sysfs_class)) {
2062 idetape_sysfs_class = NULL;
2063 printk(KERN_ERR "Unable to create sysfs class for ide tapes\n");
2064 error = -EBUSY;
2065 goto out;
2066 }
2067
2068 if (register_chrdev(IDETAPE_MAJOR, "ht", &idetape_fops)) {
2069 printk(KERN_ERR "ide-tape: Failed to register chrdev"
2070 " interface\n");
2071 error = -EBUSY;
2072 goto out_free_class;
2073 }
2074
2075 error = driver_register(&idetape_driver.gen_driver);
2076 if (error)
2077 goto out_free_driver;
2078
2079 return 0;
2080
2081 out_free_driver:
2082 driver_unregister(&idetape_driver.gen_driver);
2083 out_free_class:
2084 class_destroy(idetape_sysfs_class);
2085 out:
2086 return error;
2087 }
2088
2089 MODULE_ALIAS("ide:*m-tape*");
2090 module_init(idetape_init);
2091 module_exit(idetape_exit);
2092 MODULE_ALIAS_CHARDEV_MAJOR(IDETAPE_MAJOR);
2093 MODULE_DESCRIPTION("ATAPI Streaming TAPE Driver");
2094 MODULE_LICENSE("GPL");
2095
2096
2097
2098
2099
2100 /* LDV_COMMENT_BEGIN_MAIN */
2101 #ifdef LDV_MAIN0_sequence_infinite_withcheck_stateful
2102
2103 /*###########################################################################*/
2104
2105 /*############## Driver Environment Generator 0.2 output ####################*/
2106
2107 /*###########################################################################*/
2108
2109
2110
2111 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test if all kernel resources are correctly released by driver before driver will be unloaded. */
2112 void ldv_check_final_state(void);
2113
2114 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result. */
2115 void ldv_check_return_value(int res);
2116
2117 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Test correct return result of probe() function. */
2118 void ldv_check_return_value_probe(int res);
2119
2120 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Initializes the model. */
2121 void ldv_initialize(void);
2122
2123 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Reinitializes the model between distinct model function calls. */
2124 void ldv_handler_precall(void);
2125
2126 /* LDV_COMMENT_FUNCTION_DECLARE_LDV Special function for LDV verifier. Returns arbitrary interger value. */
2127 int nondet_int(void);
2128
2129 /* LDV_COMMENT_VAR_DECLARE_LDV Special variable for LDV verifier. */
2130 int LDV_IN_INTERRUPT;
2131
2132 /* LDV_COMMENT_FUNCTION_MAIN Main function for LDV verifier. */
2133 void ldv_main0_sequence_infinite_withcheck_stateful(void) {
2134
2135
2136
2137 /* LDV_COMMENT_BEGIN_VARIABLE_DECLARATION_PART */
2138 /*============================= VARIABLE DECLARATION PART =============================*/
2139 /** STRUCT: struct type: file_operations, struct name: idetape_name_proc_fops **/
2140 /* content: static int idetape_name_proc_open(struct inode *inode, struct file *file)*/
2141 /* LDV_COMMENT_BEGIN_PREP */
2142 #define DRV_NAME "ide-tape"
2143 #define IDETAPE_VERSION "1.20"
2144 #undef IDETAPE_DEBUG_LOG
2145 #ifdef IDETAPE_DEBUG_LOG
2146 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2147 #else
2148 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2149 #endif
2150 #define IDETAPE_MAX_PC_RETRIES 3
2151 #define IDETAPE_FIFO_THRESHOLD 2
2152 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2153 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2154 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2155 #define IDETAPE_DSC_MA_FAST 2*HZ
2156 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2157 #define IDETAPE_DSC_MA_SLOW 30*HZ
2158 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2159 #define DOOR_UNLOCKED 0
2160 #define DOOR_LOCKED 1
2161 #define DOOR_EXPLICITLY_LOCKED 2
2162 #define IDETAPE_SPACE_OVER_FILEMARK 1
2163 #define IDETAPE_SPACE_TO_EOD 3
2164 #define IDETAPE_LU_LOAD_MASK 1
2165 #define IDETAPE_LU_RETENSION_MASK 2
2166 #define IDETAPE_LU_EOT_MASK 4
2167 #define IDETAPE_BLOCK_DESCRIPTOR 0
2168 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2169 #ifdef CONFIG_IDE_PROC_FS
2170 #define ide_tape_devset_get(name, field) \
2171 static int get_##name(ide_drive_t *drive) \
2172 { \
2173 idetape_tape_t *tape = drive->driver_data; \
2174 return tape->field; \
2175 }
2176 #define ide_tape_devset_set(name, field) \
2177 static int set_##name(ide_drive_t *drive, int arg) \
2178 { \
2179 idetape_tape_t *tape = drive->driver_data; \
2180 tape->field = arg; \
2181 return 0; \
2182 }
2183 #define ide_tape_devset_rw_field(_name, _field) \
2184 ide_tape_devset_get(_name, _field) \
2185 ide_tape_devset_set(_name, _field) \
2186 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2187 #define ide_tape_devset_r_field(_name, _field) \
2188 ide_tape_devset_get(_name, _field) \
2189 IDE_DEVSET(_name, 0, get_##_name, NULL)
2190 #endif
2191 #ifdef CONFIG_IDE_PROC_FS
2192 /* LDV_COMMENT_END_PREP */
2193 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_name_proc_open" */
2194 struct inode * var_group1;
2195 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_name_proc_open" */
2196 struct file * var_group2;
2197 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_name_proc_open" */
2198 static int res_idetape_name_proc_open_50;
2199 /* LDV_COMMENT_BEGIN_PREP */
2200 #endif
2201 #ifdef CONFIG_IDE_PROC_FS
2202 #endif
2203 /* LDV_COMMENT_END_PREP */
2204
2205 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
2206 /* content: static int ide_tape_probe(ide_drive_t *drive)*/
2207 /* LDV_COMMENT_BEGIN_PREP */
2208 #define DRV_NAME "ide-tape"
2209 #define IDETAPE_VERSION "1.20"
2210 #undef IDETAPE_DEBUG_LOG
2211 #ifdef IDETAPE_DEBUG_LOG
2212 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2213 #else
2214 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2215 #endif
2216 #define IDETAPE_MAX_PC_RETRIES 3
2217 #define IDETAPE_FIFO_THRESHOLD 2
2218 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2219 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2220 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2221 #define IDETAPE_DSC_MA_FAST 2*HZ
2222 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2223 #define IDETAPE_DSC_MA_SLOW 30*HZ
2224 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2225 #define DOOR_UNLOCKED 0
2226 #define DOOR_LOCKED 1
2227 #define DOOR_EXPLICITLY_LOCKED 2
2228 #define IDETAPE_SPACE_OVER_FILEMARK 1
2229 #define IDETAPE_SPACE_TO_EOD 3
2230 #define IDETAPE_LU_LOAD_MASK 1
2231 #define IDETAPE_LU_RETENSION_MASK 2
2232 #define IDETAPE_LU_EOT_MASK 4
2233 #define IDETAPE_BLOCK_DESCRIPTOR 0
2234 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2235 #ifdef CONFIG_IDE_PROC_FS
2236 #define ide_tape_devset_get(name, field) \
2237 static int get_##name(ide_drive_t *drive) \
2238 { \
2239 idetape_tape_t *tape = drive->driver_data; \
2240 return tape->field; \
2241 }
2242 #define ide_tape_devset_set(name, field) \
2243 static int set_##name(ide_drive_t *drive, int arg) \
2244 { \
2245 idetape_tape_t *tape = drive->driver_data; \
2246 tape->field = arg; \
2247 return 0; \
2248 }
2249 #define ide_tape_devset_rw_field(_name, _field) \
2250 ide_tape_devset_get(_name, _field) \
2251 ide_tape_devset_set(_name, _field) \
2252 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2253 #define ide_tape_devset_r_field(_name, _field) \
2254 ide_tape_devset_get(_name, _field) \
2255 IDE_DEVSET(_name, 0, get_##_name, NULL)
2256 #endif
2257 #ifdef CONFIG_IDE_PROC_FS
2258 #endif
2259 #ifdef CONFIG_IDE_PROC_FS
2260 #endif
2261 /* LDV_COMMENT_END_PREP */
2262 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_probe" */
2263 ide_drive_t * var_ide_tape_probe_56_p0;
2264 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "ide_tape_probe" */
2265 static int res_ide_tape_probe_56;
2266 /* content: static void ide_tape_remove(ide_drive_t *drive)*/
2267 /* LDV_COMMENT_BEGIN_PREP */
2268 #define DRV_NAME "ide-tape"
2269 #define IDETAPE_VERSION "1.20"
2270 #undef IDETAPE_DEBUG_LOG
2271 #ifdef IDETAPE_DEBUG_LOG
2272 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2273 #else
2274 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2275 #endif
2276 #define IDETAPE_MAX_PC_RETRIES 3
2277 #define IDETAPE_FIFO_THRESHOLD 2
2278 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2279 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2280 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2281 #define IDETAPE_DSC_MA_FAST 2*HZ
2282 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2283 #define IDETAPE_DSC_MA_SLOW 30*HZ
2284 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2285 #define DOOR_UNLOCKED 0
2286 #define DOOR_LOCKED 1
2287 #define DOOR_EXPLICITLY_LOCKED 2
2288 #define IDETAPE_SPACE_OVER_FILEMARK 1
2289 #define IDETAPE_SPACE_TO_EOD 3
2290 #define IDETAPE_LU_LOAD_MASK 1
2291 #define IDETAPE_LU_RETENSION_MASK 2
2292 #define IDETAPE_LU_EOT_MASK 4
2293 #define IDETAPE_BLOCK_DESCRIPTOR 0
2294 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2295 #ifdef CONFIG_IDE_PROC_FS
2296 #define ide_tape_devset_get(name, field) \
2297 static int get_##name(ide_drive_t *drive) \
2298 { \
2299 idetape_tape_t *tape = drive->driver_data; \
2300 return tape->field; \
2301 }
2302 #define ide_tape_devset_set(name, field) \
2303 static int set_##name(ide_drive_t *drive, int arg) \
2304 { \
2305 idetape_tape_t *tape = drive->driver_data; \
2306 tape->field = arg; \
2307 return 0; \
2308 }
2309 #define ide_tape_devset_rw_field(_name, _field) \
2310 ide_tape_devset_get(_name, _field) \
2311 ide_tape_devset_set(_name, _field) \
2312 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2313 #define ide_tape_devset_r_field(_name, _field) \
2314 ide_tape_devset_get(_name, _field) \
2315 IDE_DEVSET(_name, 0, get_##_name, NULL)
2316 #endif
2317 /* LDV_COMMENT_END_PREP */
2318 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_remove" */
2319 ide_drive_t * var_ide_tape_remove_47_p0;
2320 /* LDV_COMMENT_BEGIN_PREP */
2321 #ifdef CONFIG_IDE_PROC_FS
2322 #endif
2323 #ifdef CONFIG_IDE_PROC_FS
2324 #endif
2325 /* LDV_COMMENT_END_PREP */
2326 /* content: static ide_startstop_t idetape_do_request(ide_drive_t *drive, struct request *rq, sector_t block)*/
2327 /* LDV_COMMENT_BEGIN_PREP */
2328 #define DRV_NAME "ide-tape"
2329 #define IDETAPE_VERSION "1.20"
2330 #undef IDETAPE_DEBUG_LOG
2331 #ifdef IDETAPE_DEBUG_LOG
2332 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2333 #else
2334 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2335 #endif
2336 #define IDETAPE_MAX_PC_RETRIES 3
2337 #define IDETAPE_FIFO_THRESHOLD 2
2338 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2339 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2340 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2341 #define IDETAPE_DSC_MA_FAST 2*HZ
2342 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2343 #define IDETAPE_DSC_MA_SLOW 30*HZ
2344 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2345 #define DOOR_UNLOCKED 0
2346 #define DOOR_LOCKED 1
2347 #define DOOR_EXPLICITLY_LOCKED 2
2348 #define IDETAPE_SPACE_OVER_FILEMARK 1
2349 #define IDETAPE_SPACE_TO_EOD 3
2350 #define IDETAPE_LU_LOAD_MASK 1
2351 #define IDETAPE_LU_RETENSION_MASK 2
2352 #define IDETAPE_LU_EOT_MASK 4
2353 #define IDETAPE_BLOCK_DESCRIPTOR 0
2354 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2355 /* LDV_COMMENT_END_PREP */
2356 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_do_request" */
2357 ide_drive_t * var_idetape_do_request_10_p0;
2358 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_do_request" */
2359 struct request * var_group3;
2360 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_do_request" */
2361 sector_t var_idetape_do_request_10_p2;
2362 /* LDV_COMMENT_BEGIN_PREP */
2363 #ifdef CONFIG_IDE_PROC_FS
2364 #define ide_tape_devset_get(name, field) \
2365 static int get_##name(ide_drive_t *drive) \
2366 { \
2367 idetape_tape_t *tape = drive->driver_data; \
2368 return tape->field; \
2369 }
2370 #define ide_tape_devset_set(name, field) \
2371 static int set_##name(ide_drive_t *drive, int arg) \
2372 { \
2373 idetape_tape_t *tape = drive->driver_data; \
2374 tape->field = arg; \
2375 return 0; \
2376 }
2377 #define ide_tape_devset_rw_field(_name, _field) \
2378 ide_tape_devset_get(_name, _field) \
2379 ide_tape_devset_set(_name, _field) \
2380 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2381 #define ide_tape_devset_r_field(_name, _field) \
2382 ide_tape_devset_get(_name, _field) \
2383 IDE_DEVSET(_name, 0, get_##_name, NULL)
2384 #endif
2385 #ifdef CONFIG_IDE_PROC_FS
2386 #endif
2387 #ifdef CONFIG_IDE_PROC_FS
2388 #endif
2389 /* LDV_COMMENT_END_PREP */
2390 /* content: static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)*/
2391 /* LDV_COMMENT_BEGIN_PREP */
2392 #define DRV_NAME "ide-tape"
2393 #define IDETAPE_VERSION "1.20"
2394 #undef IDETAPE_DEBUG_LOG
2395 #ifdef IDETAPE_DEBUG_LOG
2396 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2397 #else
2398 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2399 #endif
2400 #define IDETAPE_MAX_PC_RETRIES 3
2401 #define IDETAPE_FIFO_THRESHOLD 2
2402 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2403 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2404 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2405 #define IDETAPE_DSC_MA_FAST 2*HZ
2406 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2407 #define IDETAPE_DSC_MA_SLOW 30*HZ
2408 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2409 #define DOOR_UNLOCKED 0
2410 #define DOOR_LOCKED 1
2411 #define DOOR_EXPLICITLY_LOCKED 2
2412 #define IDETAPE_SPACE_OVER_FILEMARK 1
2413 #define IDETAPE_SPACE_TO_EOD 3
2414 #define IDETAPE_LU_LOAD_MASK 1
2415 #define IDETAPE_LU_RETENSION_MASK 2
2416 #define IDETAPE_LU_EOT_MASK 4
2417 #define IDETAPE_BLOCK_DESCRIPTOR 0
2418 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2419 #ifdef CONFIG_IDE_PROC_FS
2420 #define ide_tape_devset_get(name, field) \
2421 static int get_##name(ide_drive_t *drive) \
2422 { \
2423 idetape_tape_t *tape = drive->driver_data; \
2424 return tape->field; \
2425 }
2426 #define ide_tape_devset_set(name, field) \
2427 static int set_##name(ide_drive_t *drive, int arg) \
2428 { \
2429 idetape_tape_t *tape = drive->driver_data; \
2430 tape->field = arg; \
2431 return 0; \
2432 }
2433 #define ide_tape_devset_rw_field(_name, _field) \
2434 ide_tape_devset_get(_name, _field) \
2435 ide_tape_devset_set(_name, _field) \
2436 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2437 #define ide_tape_devset_r_field(_name, _field) \
2438 ide_tape_devset_get(_name, _field) \
2439 IDE_DEVSET(_name, 0, get_##_name, NULL)
2440 #endif
2441 #ifdef CONFIG_IDE_PROC_FS
2442 /* LDV_COMMENT_END_PREP */
2443 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_proc_entries" */
2444 ide_drive_t * var_ide_tape_proc_entries_51_p0;
2445 /* LDV_COMMENT_BEGIN_PREP */
2446 #endif
2447 #ifdef CONFIG_IDE_PROC_FS
2448 #endif
2449 /* LDV_COMMENT_END_PREP */
2450 /* content: static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)*/
2451 /* LDV_COMMENT_BEGIN_PREP */
2452 #define DRV_NAME "ide-tape"
2453 #define IDETAPE_VERSION "1.20"
2454 #undef IDETAPE_DEBUG_LOG
2455 #ifdef IDETAPE_DEBUG_LOG
2456 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2457 #else
2458 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2459 #endif
2460 #define IDETAPE_MAX_PC_RETRIES 3
2461 #define IDETAPE_FIFO_THRESHOLD 2
2462 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2463 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2464 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2465 #define IDETAPE_DSC_MA_FAST 2*HZ
2466 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2467 #define IDETAPE_DSC_MA_SLOW 30*HZ
2468 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2469 #define DOOR_UNLOCKED 0
2470 #define DOOR_LOCKED 1
2471 #define DOOR_EXPLICITLY_LOCKED 2
2472 #define IDETAPE_SPACE_OVER_FILEMARK 1
2473 #define IDETAPE_SPACE_TO_EOD 3
2474 #define IDETAPE_LU_LOAD_MASK 1
2475 #define IDETAPE_LU_RETENSION_MASK 2
2476 #define IDETAPE_LU_EOT_MASK 4
2477 #define IDETAPE_BLOCK_DESCRIPTOR 0
2478 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2479 #ifdef CONFIG_IDE_PROC_FS
2480 #define ide_tape_devset_get(name, field) \
2481 static int get_##name(ide_drive_t *drive) \
2482 { \
2483 idetape_tape_t *tape = drive->driver_data; \
2484 return tape->field; \
2485 }
2486 #define ide_tape_devset_set(name, field) \
2487 static int set_##name(ide_drive_t *drive, int arg) \
2488 { \
2489 idetape_tape_t *tape = drive->driver_data; \
2490 tape->field = arg; \
2491 return 0; \
2492 }
2493 #define ide_tape_devset_rw_field(_name, _field) \
2494 ide_tape_devset_get(_name, _field) \
2495 ide_tape_devset_set(_name, _field) \
2496 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2497 #define ide_tape_devset_r_field(_name, _field) \
2498 ide_tape_devset_get(_name, _field) \
2499 IDE_DEVSET(_name, 0, get_##_name, NULL)
2500 #endif
2501 #ifdef CONFIG_IDE_PROC_FS
2502 /* LDV_COMMENT_END_PREP */
2503 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "ide_tape_proc_devsets" */
2504 ide_drive_t * var_ide_tape_proc_devsets_52_p0;
2505 /* LDV_COMMENT_BEGIN_PREP */
2506 #endif
2507 #ifdef CONFIG_IDE_PROC_FS
2508 #endif
2509 /* LDV_COMMENT_END_PREP */
2510
2511 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
2512 /* content: static ssize_t idetape_chrdev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/
2513 /* LDV_COMMENT_BEGIN_PREP */
2514 #define DRV_NAME "ide-tape"
2515 #define IDETAPE_VERSION "1.20"
2516 #undef IDETAPE_DEBUG_LOG
2517 #ifdef IDETAPE_DEBUG_LOG
2518 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2519 #else
2520 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2521 #endif
2522 #define IDETAPE_MAX_PC_RETRIES 3
2523 #define IDETAPE_FIFO_THRESHOLD 2
2524 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2525 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2526 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2527 #define IDETAPE_DSC_MA_FAST 2*HZ
2528 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2529 #define IDETAPE_DSC_MA_SLOW 30*HZ
2530 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2531 #define DOOR_UNLOCKED 0
2532 #define DOOR_LOCKED 1
2533 #define DOOR_EXPLICITLY_LOCKED 2
2534 #define IDETAPE_SPACE_OVER_FILEMARK 1
2535 #define IDETAPE_SPACE_TO_EOD 3
2536 #define IDETAPE_LU_LOAD_MASK 1
2537 #define IDETAPE_LU_RETENSION_MASK 2
2538 #define IDETAPE_LU_EOT_MASK 4
2539 #define IDETAPE_BLOCK_DESCRIPTOR 0
2540 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2541 /* LDV_COMMENT_END_PREP */
2542 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_read" */
2543 char __user * var_idetape_chrdev_read_30_p1;
2544 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_read" */
2545 size_t var_idetape_chrdev_read_30_p2;
2546 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_read" */
2547 loff_t * var_idetape_chrdev_read_30_p3;
2548 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_chrdev_read" */
2549 static ssize_t res_idetape_chrdev_read_30;
2550 /* LDV_COMMENT_BEGIN_PREP */
2551 #ifdef CONFIG_IDE_PROC_FS
2552 #define ide_tape_devset_get(name, field) \
2553 static int get_##name(ide_drive_t *drive) \
2554 { \
2555 idetape_tape_t *tape = drive->driver_data; \
2556 return tape->field; \
2557 }
2558 #define ide_tape_devset_set(name, field) \
2559 static int set_##name(ide_drive_t *drive, int arg) \
2560 { \
2561 idetape_tape_t *tape = drive->driver_data; \
2562 tape->field = arg; \
2563 return 0; \
2564 }
2565 #define ide_tape_devset_rw_field(_name, _field) \
2566 ide_tape_devset_get(_name, _field) \
2567 ide_tape_devset_set(_name, _field) \
2568 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2569 #define ide_tape_devset_r_field(_name, _field) \
2570 ide_tape_devset_get(_name, _field) \
2571 IDE_DEVSET(_name, 0, get_##_name, NULL)
2572 #endif
2573 #ifdef CONFIG_IDE_PROC_FS
2574 #endif
2575 #ifdef CONFIG_IDE_PROC_FS
2576 #endif
2577 /* LDV_COMMENT_END_PREP */
2578 /* content: static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)*/
2579 /* LDV_COMMENT_BEGIN_PREP */
2580 #define DRV_NAME "ide-tape"
2581 #define IDETAPE_VERSION "1.20"
2582 #undef IDETAPE_DEBUG_LOG
2583 #ifdef IDETAPE_DEBUG_LOG
2584 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2585 #else
2586 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2587 #endif
2588 #define IDETAPE_MAX_PC_RETRIES 3
2589 #define IDETAPE_FIFO_THRESHOLD 2
2590 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2591 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2592 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2593 #define IDETAPE_DSC_MA_FAST 2*HZ
2594 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2595 #define IDETAPE_DSC_MA_SLOW 30*HZ
2596 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2597 #define DOOR_UNLOCKED 0
2598 #define DOOR_LOCKED 1
2599 #define DOOR_EXPLICITLY_LOCKED 2
2600 #define IDETAPE_SPACE_OVER_FILEMARK 1
2601 #define IDETAPE_SPACE_TO_EOD 3
2602 #define IDETAPE_LU_LOAD_MASK 1
2603 #define IDETAPE_LU_RETENSION_MASK 2
2604 #define IDETAPE_LU_EOT_MASK 4
2605 #define IDETAPE_BLOCK_DESCRIPTOR 0
2606 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2607 /* LDV_COMMENT_END_PREP */
2608 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_write" */
2609 const char __user * var_idetape_chrdev_write_31_p1;
2610 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_write" */
2611 size_t var_idetape_chrdev_write_31_p2;
2612 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_write" */
2613 loff_t * var_idetape_chrdev_write_31_p3;
2614 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_chrdev_write" */
2615 static ssize_t res_idetape_chrdev_write_31;
2616 /* LDV_COMMENT_BEGIN_PREP */
2617 #ifdef CONFIG_IDE_PROC_FS
2618 #define ide_tape_devset_get(name, field) \
2619 static int get_##name(ide_drive_t *drive) \
2620 { \
2621 idetape_tape_t *tape = drive->driver_data; \
2622 return tape->field; \
2623 }
2624 #define ide_tape_devset_set(name, field) \
2625 static int set_##name(ide_drive_t *drive, int arg) \
2626 { \
2627 idetape_tape_t *tape = drive->driver_data; \
2628 tape->field = arg; \
2629 return 0; \
2630 }
2631 #define ide_tape_devset_rw_field(_name, _field) \
2632 ide_tape_devset_get(_name, _field) \
2633 ide_tape_devset_set(_name, _field) \
2634 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2635 #define ide_tape_devset_r_field(_name, _field) \
2636 ide_tape_devset_get(_name, _field) \
2637 IDE_DEVSET(_name, 0, get_##_name, NULL)
2638 #endif
2639 #ifdef CONFIG_IDE_PROC_FS
2640 #endif
2641 #ifdef CONFIG_IDE_PROC_FS
2642 #endif
2643 /* LDV_COMMENT_END_PREP */
2644 /* content: static long idetape_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)*/
2645 /* LDV_COMMENT_BEGIN_PREP */
2646 #define DRV_NAME "ide-tape"
2647 #define IDETAPE_VERSION "1.20"
2648 #undef IDETAPE_DEBUG_LOG
2649 #ifdef IDETAPE_DEBUG_LOG
2650 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2651 #else
2652 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2653 #endif
2654 #define IDETAPE_MAX_PC_RETRIES 3
2655 #define IDETAPE_FIFO_THRESHOLD 2
2656 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2657 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2658 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2659 #define IDETAPE_DSC_MA_FAST 2*HZ
2660 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2661 #define IDETAPE_DSC_MA_SLOW 30*HZ
2662 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2663 #define DOOR_UNLOCKED 0
2664 #define DOOR_LOCKED 1
2665 #define DOOR_EXPLICITLY_LOCKED 2
2666 #define IDETAPE_SPACE_OVER_FILEMARK 1
2667 #define IDETAPE_SPACE_TO_EOD 3
2668 #define IDETAPE_LU_LOAD_MASK 1
2669 #define IDETAPE_LU_RETENSION_MASK 2
2670 #define IDETAPE_LU_EOT_MASK 4
2671 #define IDETAPE_BLOCK_DESCRIPTOR 0
2672 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2673 /* LDV_COMMENT_END_PREP */
2674 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_ioctl" */
2675 unsigned int var_idetape_chrdev_ioctl_35_p1;
2676 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_chrdev_ioctl" */
2677 unsigned long var_idetape_chrdev_ioctl_35_p2;
2678 /* LDV_COMMENT_BEGIN_PREP */
2679 #ifdef CONFIG_IDE_PROC_FS
2680 #define ide_tape_devset_get(name, field) \
2681 static int get_##name(ide_drive_t *drive) \
2682 { \
2683 idetape_tape_t *tape = drive->driver_data; \
2684 return tape->field; \
2685 }
2686 #define ide_tape_devset_set(name, field) \
2687 static int set_##name(ide_drive_t *drive, int arg) \
2688 { \
2689 idetape_tape_t *tape = drive->driver_data; \
2690 tape->field = arg; \
2691 return 0; \
2692 }
2693 #define ide_tape_devset_rw_field(_name, _field) \
2694 ide_tape_devset_get(_name, _field) \
2695 ide_tape_devset_set(_name, _field) \
2696 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2697 #define ide_tape_devset_r_field(_name, _field) \
2698 ide_tape_devset_get(_name, _field) \
2699 IDE_DEVSET(_name, 0, get_##_name, NULL)
2700 #endif
2701 #ifdef CONFIG_IDE_PROC_FS
2702 #endif
2703 #ifdef CONFIG_IDE_PROC_FS
2704 #endif
2705 /* LDV_COMMENT_END_PREP */
2706 /* content: static int idetape_chrdev_open(struct inode *inode, struct file *filp)*/
2707 /* LDV_COMMENT_BEGIN_PREP */
2708 #define DRV_NAME "ide-tape"
2709 #define IDETAPE_VERSION "1.20"
2710 #undef IDETAPE_DEBUG_LOG
2711 #ifdef IDETAPE_DEBUG_LOG
2712 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2713 #else
2714 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2715 #endif
2716 #define IDETAPE_MAX_PC_RETRIES 3
2717 #define IDETAPE_FIFO_THRESHOLD 2
2718 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2719 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2720 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2721 #define IDETAPE_DSC_MA_FAST 2*HZ
2722 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2723 #define IDETAPE_DSC_MA_SLOW 30*HZ
2724 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2725 #define DOOR_UNLOCKED 0
2726 #define DOOR_LOCKED 1
2727 #define DOOR_EXPLICITLY_LOCKED 2
2728 #define IDETAPE_SPACE_OVER_FILEMARK 1
2729 #define IDETAPE_SPACE_TO_EOD 3
2730 #define IDETAPE_LU_LOAD_MASK 1
2731 #define IDETAPE_LU_RETENSION_MASK 2
2732 #define IDETAPE_LU_EOT_MASK 4
2733 #define IDETAPE_BLOCK_DESCRIPTOR 0
2734 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2735 /* LDV_COMMENT_END_PREP */
2736 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_chrdev_open" */
2737 static int res_idetape_chrdev_open_37;
2738 /* LDV_COMMENT_BEGIN_PREP */
2739 #ifdef CONFIG_IDE_PROC_FS
2740 #define ide_tape_devset_get(name, field) \
2741 static int get_##name(ide_drive_t *drive) \
2742 { \
2743 idetape_tape_t *tape = drive->driver_data; \
2744 return tape->field; \
2745 }
2746 #define ide_tape_devset_set(name, field) \
2747 static int set_##name(ide_drive_t *drive, int arg) \
2748 { \
2749 idetape_tape_t *tape = drive->driver_data; \
2750 tape->field = arg; \
2751 return 0; \
2752 }
2753 #define ide_tape_devset_rw_field(_name, _field) \
2754 ide_tape_devset_get(_name, _field) \
2755 ide_tape_devset_set(_name, _field) \
2756 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2757 #define ide_tape_devset_r_field(_name, _field) \
2758 ide_tape_devset_get(_name, _field) \
2759 IDE_DEVSET(_name, 0, get_##_name, NULL)
2760 #endif
2761 #ifdef CONFIG_IDE_PROC_FS
2762 #endif
2763 #ifdef CONFIG_IDE_PROC_FS
2764 #endif
2765 /* LDV_COMMENT_END_PREP */
2766 /* content: static int idetape_chrdev_release(struct inode *inode, struct file *filp)*/
2767 /* LDV_COMMENT_BEGIN_PREP */
2768 #define DRV_NAME "ide-tape"
2769 #define IDETAPE_VERSION "1.20"
2770 #undef IDETAPE_DEBUG_LOG
2771 #ifdef IDETAPE_DEBUG_LOG
2772 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2773 #else
2774 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2775 #endif
2776 #define IDETAPE_MAX_PC_RETRIES 3
2777 #define IDETAPE_FIFO_THRESHOLD 2
2778 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2779 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2780 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2781 #define IDETAPE_DSC_MA_FAST 2*HZ
2782 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2783 #define IDETAPE_DSC_MA_SLOW 30*HZ
2784 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2785 #define DOOR_UNLOCKED 0
2786 #define DOOR_LOCKED 1
2787 #define DOOR_EXPLICITLY_LOCKED 2
2788 #define IDETAPE_SPACE_OVER_FILEMARK 1
2789 #define IDETAPE_SPACE_TO_EOD 3
2790 #define IDETAPE_LU_LOAD_MASK 1
2791 #define IDETAPE_LU_RETENSION_MASK 2
2792 #define IDETAPE_LU_EOT_MASK 4
2793 #define IDETAPE_BLOCK_DESCRIPTOR 0
2794 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2795 /* LDV_COMMENT_END_PREP */
2796 /* LDV_COMMENT_BEGIN_PREP */
2797 #ifdef CONFIG_IDE_PROC_FS
2798 #define ide_tape_devset_get(name, field) \
2799 static int get_##name(ide_drive_t *drive) \
2800 { \
2801 idetape_tape_t *tape = drive->driver_data; \
2802 return tape->field; \
2803 }
2804 #define ide_tape_devset_set(name, field) \
2805 static int set_##name(ide_drive_t *drive, int arg) \
2806 { \
2807 idetape_tape_t *tape = drive->driver_data; \
2808 tape->field = arg; \
2809 return 0; \
2810 }
2811 #define ide_tape_devset_rw_field(_name, _field) \
2812 ide_tape_devset_get(_name, _field) \
2813 ide_tape_devset_set(_name, _field) \
2814 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2815 #define ide_tape_devset_r_field(_name, _field) \
2816 ide_tape_devset_get(_name, _field) \
2817 IDE_DEVSET(_name, 0, get_##_name, NULL)
2818 #endif
2819 #ifdef CONFIG_IDE_PROC_FS
2820 #endif
2821 #ifdef CONFIG_IDE_PROC_FS
2822 #endif
2823 /* LDV_COMMENT_END_PREP */
2824
2825 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
2826 /* content: static int idetape_open(struct block_device *bdev, fmode_t mode)*/
2827 /* LDV_COMMENT_BEGIN_PREP */
2828 #define DRV_NAME "ide-tape"
2829 #define IDETAPE_VERSION "1.20"
2830 #undef IDETAPE_DEBUG_LOG
2831 #ifdef IDETAPE_DEBUG_LOG
2832 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2833 #else
2834 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2835 #endif
2836 #define IDETAPE_MAX_PC_RETRIES 3
2837 #define IDETAPE_FIFO_THRESHOLD 2
2838 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2839 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2840 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2841 #define IDETAPE_DSC_MA_FAST 2*HZ
2842 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2843 #define IDETAPE_DSC_MA_SLOW 30*HZ
2844 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2845 #define DOOR_UNLOCKED 0
2846 #define DOOR_LOCKED 1
2847 #define DOOR_EXPLICITLY_LOCKED 2
2848 #define IDETAPE_SPACE_OVER_FILEMARK 1
2849 #define IDETAPE_SPACE_TO_EOD 3
2850 #define IDETAPE_LU_LOAD_MASK 1
2851 #define IDETAPE_LU_RETENSION_MASK 2
2852 #define IDETAPE_LU_EOT_MASK 4
2853 #define IDETAPE_BLOCK_DESCRIPTOR 0
2854 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2855 #ifdef CONFIG_IDE_PROC_FS
2856 #define ide_tape_devset_get(name, field) \
2857 static int get_##name(ide_drive_t *drive) \
2858 { \
2859 idetape_tape_t *tape = drive->driver_data; \
2860 return tape->field; \
2861 }
2862 #define ide_tape_devset_set(name, field) \
2863 static int set_##name(ide_drive_t *drive, int arg) \
2864 { \
2865 idetape_tape_t *tape = drive->driver_data; \
2866 tape->field = arg; \
2867 return 0; \
2868 }
2869 #define ide_tape_devset_rw_field(_name, _field) \
2870 ide_tape_devset_get(_name, _field) \
2871 ide_tape_devset_set(_name, _field) \
2872 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2873 #define ide_tape_devset_r_field(_name, _field) \
2874 ide_tape_devset_get(_name, _field) \
2875 IDE_DEVSET(_name, 0, get_##_name, NULL)
2876 #endif
2877 #ifdef CONFIG_IDE_PROC_FS
2878 #endif
2879 #ifdef CONFIG_IDE_PROC_FS
2880 #endif
2881 /* LDV_COMMENT_END_PREP */
2882 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_open" */
2883 struct block_device * var_group4;
2884 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_open" */
2885 fmode_t var_idetape_open_53_p1;
2886 /* LDV_COMMENT_VAR_DECLARE Variable declaration for test return result from function call "idetape_open" */
2887 static int res_idetape_open_53;
2888 /* content: static void idetape_release(struct gendisk *disk, fmode_t mode)*/
2889 /* LDV_COMMENT_BEGIN_PREP */
2890 #define DRV_NAME "ide-tape"
2891 #define IDETAPE_VERSION "1.20"
2892 #undef IDETAPE_DEBUG_LOG
2893 #ifdef IDETAPE_DEBUG_LOG
2894 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2895 #else
2896 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2897 #endif
2898 #define IDETAPE_MAX_PC_RETRIES 3
2899 #define IDETAPE_FIFO_THRESHOLD 2
2900 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2901 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2902 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2903 #define IDETAPE_DSC_MA_FAST 2*HZ
2904 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2905 #define IDETAPE_DSC_MA_SLOW 30*HZ
2906 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2907 #define DOOR_UNLOCKED 0
2908 #define DOOR_LOCKED 1
2909 #define DOOR_EXPLICITLY_LOCKED 2
2910 #define IDETAPE_SPACE_OVER_FILEMARK 1
2911 #define IDETAPE_SPACE_TO_EOD 3
2912 #define IDETAPE_LU_LOAD_MASK 1
2913 #define IDETAPE_LU_RETENSION_MASK 2
2914 #define IDETAPE_LU_EOT_MASK 4
2915 #define IDETAPE_BLOCK_DESCRIPTOR 0
2916 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2917 #ifdef CONFIG_IDE_PROC_FS
2918 #define ide_tape_devset_get(name, field) \
2919 static int get_##name(ide_drive_t *drive) \
2920 { \
2921 idetape_tape_t *tape = drive->driver_data; \
2922 return tape->field; \
2923 }
2924 #define ide_tape_devset_set(name, field) \
2925 static int set_##name(ide_drive_t *drive, int arg) \
2926 { \
2927 idetape_tape_t *tape = drive->driver_data; \
2928 tape->field = arg; \
2929 return 0; \
2930 }
2931 #define ide_tape_devset_rw_field(_name, _field) \
2932 ide_tape_devset_get(_name, _field) \
2933 ide_tape_devset_set(_name, _field) \
2934 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2935 #define ide_tape_devset_r_field(_name, _field) \
2936 ide_tape_devset_get(_name, _field) \
2937 IDE_DEVSET(_name, 0, get_##_name, NULL)
2938 #endif
2939 #ifdef CONFIG_IDE_PROC_FS
2940 #endif
2941 #ifdef CONFIG_IDE_PROC_FS
2942 #endif
2943 /* LDV_COMMENT_END_PREP */
2944 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_release" */
2945 struct gendisk * var_group5;
2946 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_release" */
2947 fmode_t var_idetape_release_54_p1;
2948 /* content: static int idetape_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)*/
2949 /* LDV_COMMENT_BEGIN_PREP */
2950 #define DRV_NAME "ide-tape"
2951 #define IDETAPE_VERSION "1.20"
2952 #undef IDETAPE_DEBUG_LOG
2953 #ifdef IDETAPE_DEBUG_LOG
2954 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
2955 #else
2956 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
2957 #endif
2958 #define IDETAPE_MAX_PC_RETRIES 3
2959 #define IDETAPE_FIFO_THRESHOLD 2
2960 #define IDETAPE_DSC_RW_MIN 5*HZ/100
2961 #define IDETAPE_DSC_RW_MAX 40*HZ/100
2962 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
2963 #define IDETAPE_DSC_MA_FAST 2*HZ
2964 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
2965 #define IDETAPE_DSC_MA_SLOW 30*HZ
2966 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
2967 #define DOOR_UNLOCKED 0
2968 #define DOOR_LOCKED 1
2969 #define DOOR_EXPLICITLY_LOCKED 2
2970 #define IDETAPE_SPACE_OVER_FILEMARK 1
2971 #define IDETAPE_SPACE_TO_EOD 3
2972 #define IDETAPE_LU_LOAD_MASK 1
2973 #define IDETAPE_LU_RETENSION_MASK 2
2974 #define IDETAPE_LU_EOT_MASK 4
2975 #define IDETAPE_BLOCK_DESCRIPTOR 0
2976 #define IDETAPE_CAPABILITIES_PAGE 0x2a
2977 #ifdef CONFIG_IDE_PROC_FS
2978 #define ide_tape_devset_get(name, field) \
2979 static int get_##name(ide_drive_t *drive) \
2980 { \
2981 idetape_tape_t *tape = drive->driver_data; \
2982 return tape->field; \
2983 }
2984 #define ide_tape_devset_set(name, field) \
2985 static int set_##name(ide_drive_t *drive, int arg) \
2986 { \
2987 idetape_tape_t *tape = drive->driver_data; \
2988 tape->field = arg; \
2989 return 0; \
2990 }
2991 #define ide_tape_devset_rw_field(_name, _field) \
2992 ide_tape_devset_get(_name, _field) \
2993 ide_tape_devset_set(_name, _field) \
2994 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
2995 #define ide_tape_devset_r_field(_name, _field) \
2996 ide_tape_devset_get(_name, _field) \
2997 IDE_DEVSET(_name, 0, get_##_name, NULL)
2998 #endif
2999 #ifdef CONFIG_IDE_PROC_FS
3000 #endif
3001 #ifdef CONFIG_IDE_PROC_FS
3002 #endif
3003 /* LDV_COMMENT_END_PREP */
3004 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_ioctl" */
3005 fmode_t var_idetape_ioctl_55_p1;
3006 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_ioctl" */
3007 unsigned int var_idetape_ioctl_55_p2;
3008 /* LDV_COMMENT_VAR_DECLARE Variable declaration for function "idetape_ioctl" */
3009 unsigned long var_idetape_ioctl_55_p3;
3010
3011
3012
3013
3014 /* LDV_COMMENT_END_VARIABLE_DECLARATION_PART */
3015 /* LDV_COMMENT_BEGIN_VARIABLE_INITIALIZING_PART */
3016 /*============================= VARIABLE INITIALIZING PART =============================*/
3017 LDV_IN_INTERRUPT=1;
3018
3019
3020
3021
3022 /* LDV_COMMENT_END_VARIABLE_INITIALIZING_PART */
3023 /* LDV_COMMENT_BEGIN_FUNCTION_CALL_SECTION */
3024 /*============================= FUNCTION CALL SECTION =============================*/
3025 /* LDV_COMMENT_FUNCTION_CALL Initialize LDV model. */
3026 ldv_initialize();
3027
3028 /** INIT: init_type: ST_MODULE_INIT **/
3029 /* content: static int __init idetape_init(void)*/
3030 /* LDV_COMMENT_BEGIN_PREP */
3031 #define DRV_NAME "ide-tape"
3032 #define IDETAPE_VERSION "1.20"
3033 #undef IDETAPE_DEBUG_LOG
3034 #ifdef IDETAPE_DEBUG_LOG
3035 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3036 #else
3037 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3038 #endif
3039 #define IDETAPE_MAX_PC_RETRIES 3
3040 #define IDETAPE_FIFO_THRESHOLD 2
3041 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3042 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3043 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3044 #define IDETAPE_DSC_MA_FAST 2*HZ
3045 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3046 #define IDETAPE_DSC_MA_SLOW 30*HZ
3047 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3048 #define DOOR_UNLOCKED 0
3049 #define DOOR_LOCKED 1
3050 #define DOOR_EXPLICITLY_LOCKED 2
3051 #define IDETAPE_SPACE_OVER_FILEMARK 1
3052 #define IDETAPE_SPACE_TO_EOD 3
3053 #define IDETAPE_LU_LOAD_MASK 1
3054 #define IDETAPE_LU_RETENSION_MASK 2
3055 #define IDETAPE_LU_EOT_MASK 4
3056 #define IDETAPE_BLOCK_DESCRIPTOR 0
3057 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3058 #ifdef CONFIG_IDE_PROC_FS
3059 #define ide_tape_devset_get(name, field) \
3060 static int get_##name(ide_drive_t *drive) \
3061 { \
3062 idetape_tape_t *tape = drive->driver_data; \
3063 return tape->field; \
3064 }
3065 #define ide_tape_devset_set(name, field) \
3066 static int set_##name(ide_drive_t *drive, int arg) \
3067 { \
3068 idetape_tape_t *tape = drive->driver_data; \
3069 tape->field = arg; \
3070 return 0; \
3071 }
3072 #define ide_tape_devset_rw_field(_name, _field) \
3073 ide_tape_devset_get(_name, _field) \
3074 ide_tape_devset_set(_name, _field) \
3075 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3076 #define ide_tape_devset_r_field(_name, _field) \
3077 ide_tape_devset_get(_name, _field) \
3078 IDE_DEVSET(_name, 0, get_##_name, NULL)
3079 #endif
3080 #ifdef CONFIG_IDE_PROC_FS
3081 #endif
3082 #ifdef CONFIG_IDE_PROC_FS
3083 #endif
3084 /* LDV_COMMENT_END_PREP */
3085 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver init function after driver loading to kernel. This function declared as "MODULE_INIT(function name)". */
3086 ldv_handler_precall();
3087 if(idetape_init())
3088 goto ldv_final;
3089 int ldv_s_idetape_name_proc_fops_file_operations = 0;
3090
3091 int ldv_s_idetape_driver_ide_driver = 0;
3092
3093
3094 int ldv_s_idetape_fops_file_operations = 0;
3095
3096
3097 int ldv_s_idetape_block_ops_block_device_operations = 0;
3098
3099
3100
3101 while( nondet_int()
3102 || !(ldv_s_idetape_name_proc_fops_file_operations == 0)
3103 || !(ldv_s_idetape_driver_ide_driver == 0)
3104 || !(ldv_s_idetape_fops_file_operations == 0)
3105 || !(ldv_s_idetape_block_ops_block_device_operations == 0)
3106 ) {
3107
3108 switch(nondet_int()) {
3109
3110 case 0: {
3111
3112 /** STRUCT: struct type: file_operations, struct name: idetape_name_proc_fops **/
3113 if(ldv_s_idetape_name_proc_fops_file_operations==0) {
3114
3115 /* content: static int idetape_name_proc_open(struct inode *inode, struct file *file)*/
3116 /* LDV_COMMENT_BEGIN_PREP */
3117 #define DRV_NAME "ide-tape"
3118 #define IDETAPE_VERSION "1.20"
3119 #undef IDETAPE_DEBUG_LOG
3120 #ifdef IDETAPE_DEBUG_LOG
3121 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3122 #else
3123 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3124 #endif
3125 #define IDETAPE_MAX_PC_RETRIES 3
3126 #define IDETAPE_FIFO_THRESHOLD 2
3127 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3128 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3129 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3130 #define IDETAPE_DSC_MA_FAST 2*HZ
3131 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3132 #define IDETAPE_DSC_MA_SLOW 30*HZ
3133 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3134 #define DOOR_UNLOCKED 0
3135 #define DOOR_LOCKED 1
3136 #define DOOR_EXPLICITLY_LOCKED 2
3137 #define IDETAPE_SPACE_OVER_FILEMARK 1
3138 #define IDETAPE_SPACE_TO_EOD 3
3139 #define IDETAPE_LU_LOAD_MASK 1
3140 #define IDETAPE_LU_RETENSION_MASK 2
3141 #define IDETAPE_LU_EOT_MASK 4
3142 #define IDETAPE_BLOCK_DESCRIPTOR 0
3143 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3144 #ifdef CONFIG_IDE_PROC_FS
3145 #define ide_tape_devset_get(name, field) \
3146 static int get_##name(ide_drive_t *drive) \
3147 { \
3148 idetape_tape_t *tape = drive->driver_data; \
3149 return tape->field; \
3150 }
3151 #define ide_tape_devset_set(name, field) \
3152 static int set_##name(ide_drive_t *drive, int arg) \
3153 { \
3154 idetape_tape_t *tape = drive->driver_data; \
3155 tape->field = arg; \
3156 return 0; \
3157 }
3158 #define ide_tape_devset_rw_field(_name, _field) \
3159 ide_tape_devset_get(_name, _field) \
3160 ide_tape_devset_set(_name, _field) \
3161 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3162 #define ide_tape_devset_r_field(_name, _field) \
3163 ide_tape_devset_get(_name, _field) \
3164 IDE_DEVSET(_name, 0, get_##_name, NULL)
3165 #endif
3166 #ifdef CONFIG_IDE_PROC_FS
3167 /* LDV_COMMENT_END_PREP */
3168 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "idetape_name_proc_fops". Standart function test for correct return result. */
3169 ldv_handler_precall();
3170 res_idetape_name_proc_open_50 = idetape_name_proc_open( var_group1, var_group2);
3171 ldv_check_return_value(res_idetape_name_proc_open_50);
3172 if(res_idetape_name_proc_open_50)
3173 goto ldv_module_exit;
3174 /* LDV_COMMENT_BEGIN_PREP */
3175 #endif
3176 #ifdef CONFIG_IDE_PROC_FS
3177 #endif
3178 /* LDV_COMMENT_END_PREP */
3179 ldv_s_idetape_name_proc_fops_file_operations=0;
3180
3181 }
3182
3183 }
3184
3185 break;
3186 case 1: {
3187
3188 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3189 if(ldv_s_idetape_driver_ide_driver==0) {
3190
3191 /* content: static int ide_tape_probe(ide_drive_t *drive)*/
3192 /* LDV_COMMENT_BEGIN_PREP */
3193 #define DRV_NAME "ide-tape"
3194 #define IDETAPE_VERSION "1.20"
3195 #undef IDETAPE_DEBUG_LOG
3196 #ifdef IDETAPE_DEBUG_LOG
3197 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3198 #else
3199 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3200 #endif
3201 #define IDETAPE_MAX_PC_RETRIES 3
3202 #define IDETAPE_FIFO_THRESHOLD 2
3203 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3204 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3205 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3206 #define IDETAPE_DSC_MA_FAST 2*HZ
3207 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3208 #define IDETAPE_DSC_MA_SLOW 30*HZ
3209 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3210 #define DOOR_UNLOCKED 0
3211 #define DOOR_LOCKED 1
3212 #define DOOR_EXPLICITLY_LOCKED 2
3213 #define IDETAPE_SPACE_OVER_FILEMARK 1
3214 #define IDETAPE_SPACE_TO_EOD 3
3215 #define IDETAPE_LU_LOAD_MASK 1
3216 #define IDETAPE_LU_RETENSION_MASK 2
3217 #define IDETAPE_LU_EOT_MASK 4
3218 #define IDETAPE_BLOCK_DESCRIPTOR 0
3219 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3220 #ifdef CONFIG_IDE_PROC_FS
3221 #define ide_tape_devset_get(name, field) \
3222 static int get_##name(ide_drive_t *drive) \
3223 { \
3224 idetape_tape_t *tape = drive->driver_data; \
3225 return tape->field; \
3226 }
3227 #define ide_tape_devset_set(name, field) \
3228 static int set_##name(ide_drive_t *drive, int arg) \
3229 { \
3230 idetape_tape_t *tape = drive->driver_data; \
3231 tape->field = arg; \
3232 return 0; \
3233 }
3234 #define ide_tape_devset_rw_field(_name, _field) \
3235 ide_tape_devset_get(_name, _field) \
3236 ide_tape_devset_set(_name, _field) \
3237 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3238 #define ide_tape_devset_r_field(_name, _field) \
3239 ide_tape_devset_get(_name, _field) \
3240 IDE_DEVSET(_name, 0, get_##_name, NULL)
3241 #endif
3242 #ifdef CONFIG_IDE_PROC_FS
3243 #endif
3244 #ifdef CONFIG_IDE_PROC_FS
3245 #endif
3246 /* LDV_COMMENT_END_PREP */
3247 /* LDV_COMMENT_FUNCTION_CALL Function from field "probe" from driver structure with callbacks "idetape_driver". Standart function test for correct return result. */
3248 res_ide_tape_probe_56 = ide_tape_probe( var_ide_tape_probe_56_p0);
3249 ldv_check_return_value(res_ide_tape_probe_56);
3250 ldv_check_return_value_probe(res_ide_tape_probe_56);
3251 if(res_ide_tape_probe_56)
3252 goto ldv_module_exit;
3253 ldv_s_idetape_driver_ide_driver++;
3254
3255 }
3256
3257 }
3258
3259 break;
3260 case 2: {
3261
3262 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3263 if(ldv_s_idetape_driver_ide_driver==1) {
3264
3265 /* content: static void ide_tape_remove(ide_drive_t *drive)*/
3266 /* LDV_COMMENT_BEGIN_PREP */
3267 #define DRV_NAME "ide-tape"
3268 #define IDETAPE_VERSION "1.20"
3269 #undef IDETAPE_DEBUG_LOG
3270 #ifdef IDETAPE_DEBUG_LOG
3271 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3272 #else
3273 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3274 #endif
3275 #define IDETAPE_MAX_PC_RETRIES 3
3276 #define IDETAPE_FIFO_THRESHOLD 2
3277 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3278 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3279 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3280 #define IDETAPE_DSC_MA_FAST 2*HZ
3281 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3282 #define IDETAPE_DSC_MA_SLOW 30*HZ
3283 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3284 #define DOOR_UNLOCKED 0
3285 #define DOOR_LOCKED 1
3286 #define DOOR_EXPLICITLY_LOCKED 2
3287 #define IDETAPE_SPACE_OVER_FILEMARK 1
3288 #define IDETAPE_SPACE_TO_EOD 3
3289 #define IDETAPE_LU_LOAD_MASK 1
3290 #define IDETAPE_LU_RETENSION_MASK 2
3291 #define IDETAPE_LU_EOT_MASK 4
3292 #define IDETAPE_BLOCK_DESCRIPTOR 0
3293 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3294 #ifdef CONFIG_IDE_PROC_FS
3295 #define ide_tape_devset_get(name, field) \
3296 static int get_##name(ide_drive_t *drive) \
3297 { \
3298 idetape_tape_t *tape = drive->driver_data; \
3299 return tape->field; \
3300 }
3301 #define ide_tape_devset_set(name, field) \
3302 static int set_##name(ide_drive_t *drive, int arg) \
3303 { \
3304 idetape_tape_t *tape = drive->driver_data; \
3305 tape->field = arg; \
3306 return 0; \
3307 }
3308 #define ide_tape_devset_rw_field(_name, _field) \
3309 ide_tape_devset_get(_name, _field) \
3310 ide_tape_devset_set(_name, _field) \
3311 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3312 #define ide_tape_devset_r_field(_name, _field) \
3313 ide_tape_devset_get(_name, _field) \
3314 IDE_DEVSET(_name, 0, get_##_name, NULL)
3315 #endif
3316 /* LDV_COMMENT_END_PREP */
3317 /* LDV_COMMENT_FUNCTION_CALL Function from field "remove" from driver structure with callbacks "idetape_driver" */
3318 ldv_handler_precall();
3319 ide_tape_remove( var_ide_tape_remove_47_p0);
3320 /* LDV_COMMENT_BEGIN_PREP */
3321 #ifdef CONFIG_IDE_PROC_FS
3322 #endif
3323 #ifdef CONFIG_IDE_PROC_FS
3324 #endif
3325 /* LDV_COMMENT_END_PREP */
3326 ldv_s_idetape_driver_ide_driver=0;
3327
3328 }
3329
3330 }
3331
3332 break;
3333 case 3: {
3334
3335 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3336
3337
3338 /* content: static ide_startstop_t idetape_do_request(ide_drive_t *drive, struct request *rq, sector_t block)*/
3339 /* LDV_COMMENT_BEGIN_PREP */
3340 #define DRV_NAME "ide-tape"
3341 #define IDETAPE_VERSION "1.20"
3342 #undef IDETAPE_DEBUG_LOG
3343 #ifdef IDETAPE_DEBUG_LOG
3344 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3345 #else
3346 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3347 #endif
3348 #define IDETAPE_MAX_PC_RETRIES 3
3349 #define IDETAPE_FIFO_THRESHOLD 2
3350 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3351 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3352 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3353 #define IDETAPE_DSC_MA_FAST 2*HZ
3354 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3355 #define IDETAPE_DSC_MA_SLOW 30*HZ
3356 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3357 #define DOOR_UNLOCKED 0
3358 #define DOOR_LOCKED 1
3359 #define DOOR_EXPLICITLY_LOCKED 2
3360 #define IDETAPE_SPACE_OVER_FILEMARK 1
3361 #define IDETAPE_SPACE_TO_EOD 3
3362 #define IDETAPE_LU_LOAD_MASK 1
3363 #define IDETAPE_LU_RETENSION_MASK 2
3364 #define IDETAPE_LU_EOT_MASK 4
3365 #define IDETAPE_BLOCK_DESCRIPTOR 0
3366 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3367 /* LDV_COMMENT_END_PREP */
3368 /* LDV_COMMENT_FUNCTION_CALL Function from field "do_request" from driver structure with callbacks "idetape_driver" */
3369 ldv_handler_precall();
3370 idetape_do_request( var_idetape_do_request_10_p0, var_group3, var_idetape_do_request_10_p2);
3371 /* LDV_COMMENT_BEGIN_PREP */
3372 #ifdef CONFIG_IDE_PROC_FS
3373 #define ide_tape_devset_get(name, field) \
3374 static int get_##name(ide_drive_t *drive) \
3375 { \
3376 idetape_tape_t *tape = drive->driver_data; \
3377 return tape->field; \
3378 }
3379 #define ide_tape_devset_set(name, field) \
3380 static int set_##name(ide_drive_t *drive, int arg) \
3381 { \
3382 idetape_tape_t *tape = drive->driver_data; \
3383 tape->field = arg; \
3384 return 0; \
3385 }
3386 #define ide_tape_devset_rw_field(_name, _field) \
3387 ide_tape_devset_get(_name, _field) \
3388 ide_tape_devset_set(_name, _field) \
3389 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3390 #define ide_tape_devset_r_field(_name, _field) \
3391 ide_tape_devset_get(_name, _field) \
3392 IDE_DEVSET(_name, 0, get_##_name, NULL)
3393 #endif
3394 #ifdef CONFIG_IDE_PROC_FS
3395 #endif
3396 #ifdef CONFIG_IDE_PROC_FS
3397 #endif
3398 /* LDV_COMMENT_END_PREP */
3399
3400
3401
3402
3403 }
3404
3405 break;
3406 case 4: {
3407
3408 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3409
3410
3411 /* content: static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)*/
3412 /* LDV_COMMENT_BEGIN_PREP */
3413 #define DRV_NAME "ide-tape"
3414 #define IDETAPE_VERSION "1.20"
3415 #undef IDETAPE_DEBUG_LOG
3416 #ifdef IDETAPE_DEBUG_LOG
3417 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3418 #else
3419 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3420 #endif
3421 #define IDETAPE_MAX_PC_RETRIES 3
3422 #define IDETAPE_FIFO_THRESHOLD 2
3423 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3424 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3425 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3426 #define IDETAPE_DSC_MA_FAST 2*HZ
3427 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3428 #define IDETAPE_DSC_MA_SLOW 30*HZ
3429 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3430 #define DOOR_UNLOCKED 0
3431 #define DOOR_LOCKED 1
3432 #define DOOR_EXPLICITLY_LOCKED 2
3433 #define IDETAPE_SPACE_OVER_FILEMARK 1
3434 #define IDETAPE_SPACE_TO_EOD 3
3435 #define IDETAPE_LU_LOAD_MASK 1
3436 #define IDETAPE_LU_RETENSION_MASK 2
3437 #define IDETAPE_LU_EOT_MASK 4
3438 #define IDETAPE_BLOCK_DESCRIPTOR 0
3439 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3440 #ifdef CONFIG_IDE_PROC_FS
3441 #define ide_tape_devset_get(name, field) \
3442 static int get_##name(ide_drive_t *drive) \
3443 { \
3444 idetape_tape_t *tape = drive->driver_data; \
3445 return tape->field; \
3446 }
3447 #define ide_tape_devset_set(name, field) \
3448 static int set_##name(ide_drive_t *drive, int arg) \
3449 { \
3450 idetape_tape_t *tape = drive->driver_data; \
3451 tape->field = arg; \
3452 return 0; \
3453 }
3454 #define ide_tape_devset_rw_field(_name, _field) \
3455 ide_tape_devset_get(_name, _field) \
3456 ide_tape_devset_set(_name, _field) \
3457 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3458 #define ide_tape_devset_r_field(_name, _field) \
3459 ide_tape_devset_get(_name, _field) \
3460 IDE_DEVSET(_name, 0, get_##_name, NULL)
3461 #endif
3462 #ifdef CONFIG_IDE_PROC_FS
3463 /* LDV_COMMENT_END_PREP */
3464 /* LDV_COMMENT_FUNCTION_CALL Function from field "proc_entries" from driver structure with callbacks "idetape_driver" */
3465 ldv_handler_precall();
3466 ide_tape_proc_entries( var_ide_tape_proc_entries_51_p0);
3467 /* LDV_COMMENT_BEGIN_PREP */
3468 #endif
3469 #ifdef CONFIG_IDE_PROC_FS
3470 #endif
3471 /* LDV_COMMENT_END_PREP */
3472
3473
3474
3475
3476 }
3477
3478 break;
3479 case 5: {
3480
3481 /** STRUCT: struct type: ide_driver, struct name: idetape_driver **/
3482
3483
3484 /* content: static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)*/
3485 /* LDV_COMMENT_BEGIN_PREP */
3486 #define DRV_NAME "ide-tape"
3487 #define IDETAPE_VERSION "1.20"
3488 #undef IDETAPE_DEBUG_LOG
3489 #ifdef IDETAPE_DEBUG_LOG
3490 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3491 #else
3492 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3493 #endif
3494 #define IDETAPE_MAX_PC_RETRIES 3
3495 #define IDETAPE_FIFO_THRESHOLD 2
3496 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3497 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3498 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3499 #define IDETAPE_DSC_MA_FAST 2*HZ
3500 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3501 #define IDETAPE_DSC_MA_SLOW 30*HZ
3502 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3503 #define DOOR_UNLOCKED 0
3504 #define DOOR_LOCKED 1
3505 #define DOOR_EXPLICITLY_LOCKED 2
3506 #define IDETAPE_SPACE_OVER_FILEMARK 1
3507 #define IDETAPE_SPACE_TO_EOD 3
3508 #define IDETAPE_LU_LOAD_MASK 1
3509 #define IDETAPE_LU_RETENSION_MASK 2
3510 #define IDETAPE_LU_EOT_MASK 4
3511 #define IDETAPE_BLOCK_DESCRIPTOR 0
3512 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3513 #ifdef CONFIG_IDE_PROC_FS
3514 #define ide_tape_devset_get(name, field) \
3515 static int get_##name(ide_drive_t *drive) \
3516 { \
3517 idetape_tape_t *tape = drive->driver_data; \
3518 return tape->field; \
3519 }
3520 #define ide_tape_devset_set(name, field) \
3521 static int set_##name(ide_drive_t *drive, int arg) \
3522 { \
3523 idetape_tape_t *tape = drive->driver_data; \
3524 tape->field = arg; \
3525 return 0; \
3526 }
3527 #define ide_tape_devset_rw_field(_name, _field) \
3528 ide_tape_devset_get(_name, _field) \
3529 ide_tape_devset_set(_name, _field) \
3530 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3531 #define ide_tape_devset_r_field(_name, _field) \
3532 ide_tape_devset_get(_name, _field) \
3533 IDE_DEVSET(_name, 0, get_##_name, NULL)
3534 #endif
3535 #ifdef CONFIG_IDE_PROC_FS
3536 /* LDV_COMMENT_END_PREP */
3537 /* LDV_COMMENT_FUNCTION_CALL Function from field "proc_devsets" from driver structure with callbacks "idetape_driver" */
3538 ldv_handler_precall();
3539 ide_tape_proc_devsets( var_ide_tape_proc_devsets_52_p0);
3540 /* LDV_COMMENT_BEGIN_PREP */
3541 #endif
3542 #ifdef CONFIG_IDE_PROC_FS
3543 #endif
3544 /* LDV_COMMENT_END_PREP */
3545
3546
3547
3548
3549 }
3550
3551 break;
3552 case 6: {
3553
3554 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3555 if(ldv_s_idetape_fops_file_operations==0) {
3556
3557 /* content: static int idetape_chrdev_open(struct inode *inode, struct file *filp)*/
3558 /* LDV_COMMENT_BEGIN_PREP */
3559 #define DRV_NAME "ide-tape"
3560 #define IDETAPE_VERSION "1.20"
3561 #undef IDETAPE_DEBUG_LOG
3562 #ifdef IDETAPE_DEBUG_LOG
3563 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3564 #else
3565 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3566 #endif
3567 #define IDETAPE_MAX_PC_RETRIES 3
3568 #define IDETAPE_FIFO_THRESHOLD 2
3569 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3570 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3571 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3572 #define IDETAPE_DSC_MA_FAST 2*HZ
3573 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3574 #define IDETAPE_DSC_MA_SLOW 30*HZ
3575 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3576 #define DOOR_UNLOCKED 0
3577 #define DOOR_LOCKED 1
3578 #define DOOR_EXPLICITLY_LOCKED 2
3579 #define IDETAPE_SPACE_OVER_FILEMARK 1
3580 #define IDETAPE_SPACE_TO_EOD 3
3581 #define IDETAPE_LU_LOAD_MASK 1
3582 #define IDETAPE_LU_RETENSION_MASK 2
3583 #define IDETAPE_LU_EOT_MASK 4
3584 #define IDETAPE_BLOCK_DESCRIPTOR 0
3585 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3586 /* LDV_COMMENT_END_PREP */
3587 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "idetape_fops". Standart function test for correct return result. */
3588 ldv_handler_precall();
3589 res_idetape_chrdev_open_37 = idetape_chrdev_open( var_group1, var_group2);
3590 ldv_check_return_value(res_idetape_chrdev_open_37);
3591 if(res_idetape_chrdev_open_37)
3592 goto ldv_module_exit;
3593 /* LDV_COMMENT_BEGIN_PREP */
3594 #ifdef CONFIG_IDE_PROC_FS
3595 #define ide_tape_devset_get(name, field) \
3596 static int get_##name(ide_drive_t *drive) \
3597 { \
3598 idetape_tape_t *tape = drive->driver_data; \
3599 return tape->field; \
3600 }
3601 #define ide_tape_devset_set(name, field) \
3602 static int set_##name(ide_drive_t *drive, int arg) \
3603 { \
3604 idetape_tape_t *tape = drive->driver_data; \
3605 tape->field = arg; \
3606 return 0; \
3607 }
3608 #define ide_tape_devset_rw_field(_name, _field) \
3609 ide_tape_devset_get(_name, _field) \
3610 ide_tape_devset_set(_name, _field) \
3611 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3612 #define ide_tape_devset_r_field(_name, _field) \
3613 ide_tape_devset_get(_name, _field) \
3614 IDE_DEVSET(_name, 0, get_##_name, NULL)
3615 #endif
3616 #ifdef CONFIG_IDE_PROC_FS
3617 #endif
3618 #ifdef CONFIG_IDE_PROC_FS
3619 #endif
3620 /* LDV_COMMENT_END_PREP */
3621 ldv_s_idetape_fops_file_operations++;
3622
3623 }
3624
3625 }
3626
3627 break;
3628 case 7: {
3629
3630 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3631 if(ldv_s_idetape_fops_file_operations==1) {
3632
3633 /* content: static ssize_t idetape_chrdev_read(struct file *file, char __user *buf, size_t count, loff_t *ppos)*/
3634 /* LDV_COMMENT_BEGIN_PREP */
3635 #define DRV_NAME "ide-tape"
3636 #define IDETAPE_VERSION "1.20"
3637 #undef IDETAPE_DEBUG_LOG
3638 #ifdef IDETAPE_DEBUG_LOG
3639 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3640 #else
3641 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3642 #endif
3643 #define IDETAPE_MAX_PC_RETRIES 3
3644 #define IDETAPE_FIFO_THRESHOLD 2
3645 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3646 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3647 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3648 #define IDETAPE_DSC_MA_FAST 2*HZ
3649 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3650 #define IDETAPE_DSC_MA_SLOW 30*HZ
3651 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3652 #define DOOR_UNLOCKED 0
3653 #define DOOR_LOCKED 1
3654 #define DOOR_EXPLICITLY_LOCKED 2
3655 #define IDETAPE_SPACE_OVER_FILEMARK 1
3656 #define IDETAPE_SPACE_TO_EOD 3
3657 #define IDETAPE_LU_LOAD_MASK 1
3658 #define IDETAPE_LU_RETENSION_MASK 2
3659 #define IDETAPE_LU_EOT_MASK 4
3660 #define IDETAPE_BLOCK_DESCRIPTOR 0
3661 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3662 /* LDV_COMMENT_END_PREP */
3663 /* LDV_COMMENT_FUNCTION_CALL Function from field "read" from driver structure with callbacks "idetape_fops". Standart function test for correct return result. */
3664 ldv_handler_precall();
3665 res_idetape_chrdev_read_30 = idetape_chrdev_read( var_group2, var_idetape_chrdev_read_30_p1, var_idetape_chrdev_read_30_p2, var_idetape_chrdev_read_30_p3);
3666 ldv_check_return_value(res_idetape_chrdev_read_30);
3667 if(res_idetape_chrdev_read_30 < 0)
3668 goto ldv_module_exit;
3669 /* LDV_COMMENT_BEGIN_PREP */
3670 #ifdef CONFIG_IDE_PROC_FS
3671 #define ide_tape_devset_get(name, field) \
3672 static int get_##name(ide_drive_t *drive) \
3673 { \
3674 idetape_tape_t *tape = drive->driver_data; \
3675 return tape->field; \
3676 }
3677 #define ide_tape_devset_set(name, field) \
3678 static int set_##name(ide_drive_t *drive, int arg) \
3679 { \
3680 idetape_tape_t *tape = drive->driver_data; \
3681 tape->field = arg; \
3682 return 0; \
3683 }
3684 #define ide_tape_devset_rw_field(_name, _field) \
3685 ide_tape_devset_get(_name, _field) \
3686 ide_tape_devset_set(_name, _field) \
3687 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3688 #define ide_tape_devset_r_field(_name, _field) \
3689 ide_tape_devset_get(_name, _field) \
3690 IDE_DEVSET(_name, 0, get_##_name, NULL)
3691 #endif
3692 #ifdef CONFIG_IDE_PROC_FS
3693 #endif
3694 #ifdef CONFIG_IDE_PROC_FS
3695 #endif
3696 /* LDV_COMMENT_END_PREP */
3697 ldv_s_idetape_fops_file_operations++;
3698
3699 }
3700
3701 }
3702
3703 break;
3704 case 8: {
3705
3706 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3707 if(ldv_s_idetape_fops_file_operations==2) {
3708
3709 /* content: static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos)*/
3710 /* LDV_COMMENT_BEGIN_PREP */
3711 #define DRV_NAME "ide-tape"
3712 #define IDETAPE_VERSION "1.20"
3713 #undef IDETAPE_DEBUG_LOG
3714 #ifdef IDETAPE_DEBUG_LOG
3715 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3716 #else
3717 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3718 #endif
3719 #define IDETAPE_MAX_PC_RETRIES 3
3720 #define IDETAPE_FIFO_THRESHOLD 2
3721 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3722 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3723 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3724 #define IDETAPE_DSC_MA_FAST 2*HZ
3725 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3726 #define IDETAPE_DSC_MA_SLOW 30*HZ
3727 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3728 #define DOOR_UNLOCKED 0
3729 #define DOOR_LOCKED 1
3730 #define DOOR_EXPLICITLY_LOCKED 2
3731 #define IDETAPE_SPACE_OVER_FILEMARK 1
3732 #define IDETAPE_SPACE_TO_EOD 3
3733 #define IDETAPE_LU_LOAD_MASK 1
3734 #define IDETAPE_LU_RETENSION_MASK 2
3735 #define IDETAPE_LU_EOT_MASK 4
3736 #define IDETAPE_BLOCK_DESCRIPTOR 0
3737 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3738 /* LDV_COMMENT_END_PREP */
3739 /* LDV_COMMENT_FUNCTION_CALL Function from field "write" from driver structure with callbacks "idetape_fops". Standart function test for correct return result. */
3740 ldv_handler_precall();
3741 res_idetape_chrdev_write_31 = idetape_chrdev_write( var_group2, var_idetape_chrdev_write_31_p1, var_idetape_chrdev_write_31_p2, var_idetape_chrdev_write_31_p3);
3742 ldv_check_return_value(res_idetape_chrdev_write_31);
3743 if(res_idetape_chrdev_write_31 < 0)
3744 goto ldv_module_exit;
3745 /* LDV_COMMENT_BEGIN_PREP */
3746 #ifdef CONFIG_IDE_PROC_FS
3747 #define ide_tape_devset_get(name, field) \
3748 static int get_##name(ide_drive_t *drive) \
3749 { \
3750 idetape_tape_t *tape = drive->driver_data; \
3751 return tape->field; \
3752 }
3753 #define ide_tape_devset_set(name, field) \
3754 static int set_##name(ide_drive_t *drive, int arg) \
3755 { \
3756 idetape_tape_t *tape = drive->driver_data; \
3757 tape->field = arg; \
3758 return 0; \
3759 }
3760 #define ide_tape_devset_rw_field(_name, _field) \
3761 ide_tape_devset_get(_name, _field) \
3762 ide_tape_devset_set(_name, _field) \
3763 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3764 #define ide_tape_devset_r_field(_name, _field) \
3765 ide_tape_devset_get(_name, _field) \
3766 IDE_DEVSET(_name, 0, get_##_name, NULL)
3767 #endif
3768 #ifdef CONFIG_IDE_PROC_FS
3769 #endif
3770 #ifdef CONFIG_IDE_PROC_FS
3771 #endif
3772 /* LDV_COMMENT_END_PREP */
3773 ldv_s_idetape_fops_file_operations++;
3774
3775 }
3776
3777 }
3778
3779 break;
3780 case 9: {
3781
3782 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3783 if(ldv_s_idetape_fops_file_operations==3) {
3784
3785 /* content: static int idetape_chrdev_release(struct inode *inode, struct file *filp)*/
3786 /* LDV_COMMENT_BEGIN_PREP */
3787 #define DRV_NAME "ide-tape"
3788 #define IDETAPE_VERSION "1.20"
3789 #undef IDETAPE_DEBUG_LOG
3790 #ifdef IDETAPE_DEBUG_LOG
3791 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3792 #else
3793 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3794 #endif
3795 #define IDETAPE_MAX_PC_RETRIES 3
3796 #define IDETAPE_FIFO_THRESHOLD 2
3797 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3798 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3799 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3800 #define IDETAPE_DSC_MA_FAST 2*HZ
3801 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3802 #define IDETAPE_DSC_MA_SLOW 30*HZ
3803 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3804 #define DOOR_UNLOCKED 0
3805 #define DOOR_LOCKED 1
3806 #define DOOR_EXPLICITLY_LOCKED 2
3807 #define IDETAPE_SPACE_OVER_FILEMARK 1
3808 #define IDETAPE_SPACE_TO_EOD 3
3809 #define IDETAPE_LU_LOAD_MASK 1
3810 #define IDETAPE_LU_RETENSION_MASK 2
3811 #define IDETAPE_LU_EOT_MASK 4
3812 #define IDETAPE_BLOCK_DESCRIPTOR 0
3813 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3814 /* LDV_COMMENT_END_PREP */
3815 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "idetape_fops" */
3816 ldv_handler_precall();
3817 idetape_chrdev_release( var_group1, var_group2);
3818 /* LDV_COMMENT_BEGIN_PREP */
3819 #ifdef CONFIG_IDE_PROC_FS
3820 #define ide_tape_devset_get(name, field) \
3821 static int get_##name(ide_drive_t *drive) \
3822 { \
3823 idetape_tape_t *tape = drive->driver_data; \
3824 return tape->field; \
3825 }
3826 #define ide_tape_devset_set(name, field) \
3827 static int set_##name(ide_drive_t *drive, int arg) \
3828 { \
3829 idetape_tape_t *tape = drive->driver_data; \
3830 tape->field = arg; \
3831 return 0; \
3832 }
3833 #define ide_tape_devset_rw_field(_name, _field) \
3834 ide_tape_devset_get(_name, _field) \
3835 ide_tape_devset_set(_name, _field) \
3836 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3837 #define ide_tape_devset_r_field(_name, _field) \
3838 ide_tape_devset_get(_name, _field) \
3839 IDE_DEVSET(_name, 0, get_##_name, NULL)
3840 #endif
3841 #ifdef CONFIG_IDE_PROC_FS
3842 #endif
3843 #ifdef CONFIG_IDE_PROC_FS
3844 #endif
3845 /* LDV_COMMENT_END_PREP */
3846 ldv_s_idetape_fops_file_operations=0;
3847
3848 }
3849
3850 }
3851
3852 break;
3853 case 10: {
3854
3855 /** STRUCT: struct type: file_operations, struct name: idetape_fops **/
3856
3857
3858 /* content: static long idetape_chrdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)*/
3859 /* LDV_COMMENT_BEGIN_PREP */
3860 #define DRV_NAME "ide-tape"
3861 #define IDETAPE_VERSION "1.20"
3862 #undef IDETAPE_DEBUG_LOG
3863 #ifdef IDETAPE_DEBUG_LOG
3864 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3865 #else
3866 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3867 #endif
3868 #define IDETAPE_MAX_PC_RETRIES 3
3869 #define IDETAPE_FIFO_THRESHOLD 2
3870 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3871 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3872 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3873 #define IDETAPE_DSC_MA_FAST 2*HZ
3874 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3875 #define IDETAPE_DSC_MA_SLOW 30*HZ
3876 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3877 #define DOOR_UNLOCKED 0
3878 #define DOOR_LOCKED 1
3879 #define DOOR_EXPLICITLY_LOCKED 2
3880 #define IDETAPE_SPACE_OVER_FILEMARK 1
3881 #define IDETAPE_SPACE_TO_EOD 3
3882 #define IDETAPE_LU_LOAD_MASK 1
3883 #define IDETAPE_LU_RETENSION_MASK 2
3884 #define IDETAPE_LU_EOT_MASK 4
3885 #define IDETAPE_BLOCK_DESCRIPTOR 0
3886 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3887 /* LDV_COMMENT_END_PREP */
3888 /* LDV_COMMENT_FUNCTION_CALL Function from field "unlocked_ioctl" from driver structure with callbacks "idetape_fops" */
3889 ldv_handler_precall();
3890 idetape_chrdev_ioctl( var_group2, var_idetape_chrdev_ioctl_35_p1, var_idetape_chrdev_ioctl_35_p2);
3891 /* LDV_COMMENT_BEGIN_PREP */
3892 #ifdef CONFIG_IDE_PROC_FS
3893 #define ide_tape_devset_get(name, field) \
3894 static int get_##name(ide_drive_t *drive) \
3895 { \
3896 idetape_tape_t *tape = drive->driver_data; \
3897 return tape->field; \
3898 }
3899 #define ide_tape_devset_set(name, field) \
3900 static int set_##name(ide_drive_t *drive, int arg) \
3901 { \
3902 idetape_tape_t *tape = drive->driver_data; \
3903 tape->field = arg; \
3904 return 0; \
3905 }
3906 #define ide_tape_devset_rw_field(_name, _field) \
3907 ide_tape_devset_get(_name, _field) \
3908 ide_tape_devset_set(_name, _field) \
3909 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3910 #define ide_tape_devset_r_field(_name, _field) \
3911 ide_tape_devset_get(_name, _field) \
3912 IDE_DEVSET(_name, 0, get_##_name, NULL)
3913 #endif
3914 #ifdef CONFIG_IDE_PROC_FS
3915 #endif
3916 #ifdef CONFIG_IDE_PROC_FS
3917 #endif
3918 /* LDV_COMMENT_END_PREP */
3919
3920
3921
3922
3923 }
3924
3925 break;
3926 case 11: {
3927
3928 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
3929 if(ldv_s_idetape_block_ops_block_device_operations==0) {
3930
3931 /* content: static int idetape_open(struct block_device *bdev, fmode_t mode)*/
3932 /* LDV_COMMENT_BEGIN_PREP */
3933 #define DRV_NAME "ide-tape"
3934 #define IDETAPE_VERSION "1.20"
3935 #undef IDETAPE_DEBUG_LOG
3936 #ifdef IDETAPE_DEBUG_LOG
3937 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
3938 #else
3939 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
3940 #endif
3941 #define IDETAPE_MAX_PC_RETRIES 3
3942 #define IDETAPE_FIFO_THRESHOLD 2
3943 #define IDETAPE_DSC_RW_MIN 5*HZ/100
3944 #define IDETAPE_DSC_RW_MAX 40*HZ/100
3945 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
3946 #define IDETAPE_DSC_MA_FAST 2*HZ
3947 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
3948 #define IDETAPE_DSC_MA_SLOW 30*HZ
3949 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
3950 #define DOOR_UNLOCKED 0
3951 #define DOOR_LOCKED 1
3952 #define DOOR_EXPLICITLY_LOCKED 2
3953 #define IDETAPE_SPACE_OVER_FILEMARK 1
3954 #define IDETAPE_SPACE_TO_EOD 3
3955 #define IDETAPE_LU_LOAD_MASK 1
3956 #define IDETAPE_LU_RETENSION_MASK 2
3957 #define IDETAPE_LU_EOT_MASK 4
3958 #define IDETAPE_BLOCK_DESCRIPTOR 0
3959 #define IDETAPE_CAPABILITIES_PAGE 0x2a
3960 #ifdef CONFIG_IDE_PROC_FS
3961 #define ide_tape_devset_get(name, field) \
3962 static int get_##name(ide_drive_t *drive) \
3963 { \
3964 idetape_tape_t *tape = drive->driver_data; \
3965 return tape->field; \
3966 }
3967 #define ide_tape_devset_set(name, field) \
3968 static int set_##name(ide_drive_t *drive, int arg) \
3969 { \
3970 idetape_tape_t *tape = drive->driver_data; \
3971 tape->field = arg; \
3972 return 0; \
3973 }
3974 #define ide_tape_devset_rw_field(_name, _field) \
3975 ide_tape_devset_get(_name, _field) \
3976 ide_tape_devset_set(_name, _field) \
3977 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
3978 #define ide_tape_devset_r_field(_name, _field) \
3979 ide_tape_devset_get(_name, _field) \
3980 IDE_DEVSET(_name, 0, get_##_name, NULL)
3981 #endif
3982 #ifdef CONFIG_IDE_PROC_FS
3983 #endif
3984 #ifdef CONFIG_IDE_PROC_FS
3985 #endif
3986 /* LDV_COMMENT_END_PREP */
3987 /* LDV_COMMENT_FUNCTION_CALL Function from field "open" from driver structure with callbacks "idetape_block_ops". Standart function test for correct return result. */
3988 ldv_handler_precall();
3989 res_idetape_open_53 = idetape_open( var_group4, var_idetape_open_53_p1);
3990 ldv_check_return_value(res_idetape_open_53);
3991 if(res_idetape_open_53)
3992 goto ldv_module_exit;
3993 ldv_s_idetape_block_ops_block_device_operations++;
3994
3995 }
3996
3997 }
3998
3999 break;
4000 case 12: {
4001
4002 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
4003 if(ldv_s_idetape_block_ops_block_device_operations==1) {
4004
4005 /* content: static void idetape_release(struct gendisk *disk, fmode_t mode)*/
4006 /* LDV_COMMENT_BEGIN_PREP */
4007 #define DRV_NAME "ide-tape"
4008 #define IDETAPE_VERSION "1.20"
4009 #undef IDETAPE_DEBUG_LOG
4010 #ifdef IDETAPE_DEBUG_LOG
4011 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
4012 #else
4013 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
4014 #endif
4015 #define IDETAPE_MAX_PC_RETRIES 3
4016 #define IDETAPE_FIFO_THRESHOLD 2
4017 #define IDETAPE_DSC_RW_MIN 5*HZ/100
4018 #define IDETAPE_DSC_RW_MAX 40*HZ/100
4019 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
4020 #define IDETAPE_DSC_MA_FAST 2*HZ
4021 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
4022 #define IDETAPE_DSC_MA_SLOW 30*HZ
4023 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
4024 #define DOOR_UNLOCKED 0
4025 #define DOOR_LOCKED 1
4026 #define DOOR_EXPLICITLY_LOCKED 2
4027 #define IDETAPE_SPACE_OVER_FILEMARK 1
4028 #define IDETAPE_SPACE_TO_EOD 3
4029 #define IDETAPE_LU_LOAD_MASK 1
4030 #define IDETAPE_LU_RETENSION_MASK 2
4031 #define IDETAPE_LU_EOT_MASK 4
4032 #define IDETAPE_BLOCK_DESCRIPTOR 0
4033 #define IDETAPE_CAPABILITIES_PAGE 0x2a
4034 #ifdef CONFIG_IDE_PROC_FS
4035 #define ide_tape_devset_get(name, field) \
4036 static int get_##name(ide_drive_t *drive) \
4037 { \
4038 idetape_tape_t *tape = drive->driver_data; \
4039 return tape->field; \
4040 }
4041 #define ide_tape_devset_set(name, field) \
4042 static int set_##name(ide_drive_t *drive, int arg) \
4043 { \
4044 idetape_tape_t *tape = drive->driver_data; \
4045 tape->field = arg; \
4046 return 0; \
4047 }
4048 #define ide_tape_devset_rw_field(_name, _field) \
4049 ide_tape_devset_get(_name, _field) \
4050 ide_tape_devset_set(_name, _field) \
4051 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
4052 #define ide_tape_devset_r_field(_name, _field) \
4053 ide_tape_devset_get(_name, _field) \
4054 IDE_DEVSET(_name, 0, get_##_name, NULL)
4055 #endif
4056 #ifdef CONFIG_IDE_PROC_FS
4057 #endif
4058 #ifdef CONFIG_IDE_PROC_FS
4059 #endif
4060 /* LDV_COMMENT_END_PREP */
4061 /* LDV_COMMENT_FUNCTION_CALL Function from field "release" from driver structure with callbacks "idetape_block_ops" */
4062 ldv_handler_precall();
4063 idetape_release( var_group5, var_idetape_release_54_p1);
4064 ldv_s_idetape_block_ops_block_device_operations=0;
4065
4066 }
4067
4068 }
4069
4070 break;
4071 case 13: {
4072
4073 /** STRUCT: struct type: block_device_operations, struct name: idetape_block_ops **/
4074
4075
4076 /* content: static int idetape_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg)*/
4077 /* LDV_COMMENT_BEGIN_PREP */
4078 #define DRV_NAME "ide-tape"
4079 #define IDETAPE_VERSION "1.20"
4080 #undef IDETAPE_DEBUG_LOG
4081 #ifdef IDETAPE_DEBUG_LOG
4082 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
4083 #else
4084 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
4085 #endif
4086 #define IDETAPE_MAX_PC_RETRIES 3
4087 #define IDETAPE_FIFO_THRESHOLD 2
4088 #define IDETAPE_DSC_RW_MIN 5*HZ/100
4089 #define IDETAPE_DSC_RW_MAX 40*HZ/100
4090 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
4091 #define IDETAPE_DSC_MA_FAST 2*HZ
4092 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
4093 #define IDETAPE_DSC_MA_SLOW 30*HZ
4094 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
4095 #define DOOR_UNLOCKED 0
4096 #define DOOR_LOCKED 1
4097 #define DOOR_EXPLICITLY_LOCKED 2
4098 #define IDETAPE_SPACE_OVER_FILEMARK 1
4099 #define IDETAPE_SPACE_TO_EOD 3
4100 #define IDETAPE_LU_LOAD_MASK 1
4101 #define IDETAPE_LU_RETENSION_MASK 2
4102 #define IDETAPE_LU_EOT_MASK 4
4103 #define IDETAPE_BLOCK_DESCRIPTOR 0
4104 #define IDETAPE_CAPABILITIES_PAGE 0x2a
4105 #ifdef CONFIG_IDE_PROC_FS
4106 #define ide_tape_devset_get(name, field) \
4107 static int get_##name(ide_drive_t *drive) \
4108 { \
4109 idetape_tape_t *tape = drive->driver_data; \
4110 return tape->field; \
4111 }
4112 #define ide_tape_devset_set(name, field) \
4113 static int set_##name(ide_drive_t *drive, int arg) \
4114 { \
4115 idetape_tape_t *tape = drive->driver_data; \
4116 tape->field = arg; \
4117 return 0; \
4118 }
4119 #define ide_tape_devset_rw_field(_name, _field) \
4120 ide_tape_devset_get(_name, _field) \
4121 ide_tape_devset_set(_name, _field) \
4122 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
4123 #define ide_tape_devset_r_field(_name, _field) \
4124 ide_tape_devset_get(_name, _field) \
4125 IDE_DEVSET(_name, 0, get_##_name, NULL)
4126 #endif
4127 #ifdef CONFIG_IDE_PROC_FS
4128 #endif
4129 #ifdef CONFIG_IDE_PROC_FS
4130 #endif
4131 /* LDV_COMMENT_END_PREP */
4132 /* LDV_COMMENT_FUNCTION_CALL Function from field "ioctl" from driver structure with callbacks "idetape_block_ops" */
4133 ldv_handler_precall();
4134 idetape_ioctl( var_group4, var_idetape_ioctl_55_p1, var_idetape_ioctl_55_p2, var_idetape_ioctl_55_p3);
4135
4136
4137
4138
4139 }
4140
4141 break;
4142 default: break;
4143
4144 }
4145
4146 }
4147
4148 ldv_module_exit:
4149
4150 /** INIT: init_type: ST_MODULE_EXIT **/
4151 /* content: static void __exit idetape_exit(void)*/
4152 /* LDV_COMMENT_BEGIN_PREP */
4153 #define DRV_NAME "ide-tape"
4154 #define IDETAPE_VERSION "1.20"
4155 #undef IDETAPE_DEBUG_LOG
4156 #ifdef IDETAPE_DEBUG_LOG
4157 #define ide_debug_log(lvl, fmt, args...) __ide_debug_log(lvl, fmt, ## args)
4158 #else
4159 #define ide_debug_log(lvl, fmt, args...) do {} while (0)
4160 #endif
4161 #define IDETAPE_MAX_PC_RETRIES 3
4162 #define IDETAPE_FIFO_THRESHOLD 2
4163 #define IDETAPE_DSC_RW_MIN 5*HZ/100
4164 #define IDETAPE_DSC_RW_MAX 40*HZ/100
4165 #define IDETAPE_DSC_RW_TIMEOUT 2*60*HZ
4166 #define IDETAPE_DSC_MA_FAST 2*HZ
4167 #define IDETAPE_DSC_MA_THRESHOLD 5*60*HZ
4168 #define IDETAPE_DSC_MA_SLOW 30*HZ
4169 #define IDETAPE_DSC_MA_TIMEOUT 2*60*60*HZ
4170 #define DOOR_UNLOCKED 0
4171 #define DOOR_LOCKED 1
4172 #define DOOR_EXPLICITLY_LOCKED 2
4173 #define IDETAPE_SPACE_OVER_FILEMARK 1
4174 #define IDETAPE_SPACE_TO_EOD 3
4175 #define IDETAPE_LU_LOAD_MASK 1
4176 #define IDETAPE_LU_RETENSION_MASK 2
4177 #define IDETAPE_LU_EOT_MASK 4
4178 #define IDETAPE_BLOCK_DESCRIPTOR 0
4179 #define IDETAPE_CAPABILITIES_PAGE 0x2a
4180 #ifdef CONFIG_IDE_PROC_FS
4181 #define ide_tape_devset_get(name, field) \
4182 static int get_##name(ide_drive_t *drive) \
4183 { \
4184 idetape_tape_t *tape = drive->driver_data; \
4185 return tape->field; \
4186 }
4187 #define ide_tape_devset_set(name, field) \
4188 static int set_##name(ide_drive_t *drive, int arg) \
4189 { \
4190 idetape_tape_t *tape = drive->driver_data; \
4191 tape->field = arg; \
4192 return 0; \
4193 }
4194 #define ide_tape_devset_rw_field(_name, _field) \
4195 ide_tape_devset_get(_name, _field) \
4196 ide_tape_devset_set(_name, _field) \
4197 IDE_DEVSET(_name, DS_SYNC, get_##_name, set_##_name)
4198 #define ide_tape_devset_r_field(_name, _field) \
4199 ide_tape_devset_get(_name, _field) \
4200 IDE_DEVSET(_name, 0, get_##_name, NULL)
4201 #endif
4202 #ifdef CONFIG_IDE_PROC_FS
4203 #endif
4204 #ifdef CONFIG_IDE_PROC_FS
4205 #endif
4206 /* LDV_COMMENT_END_PREP */
4207 /* LDV_COMMENT_FUNCTION_CALL Kernel calls driver release function before driver will be uploaded from kernel. This function declared as "MODULE_EXIT(function name)". */
4208 ldv_handler_precall();
4209 idetape_exit();
4210
4211 /* LDV_COMMENT_FUNCTION_CALL Checks that all resources and locks are correctly released before the driver will be unloaded. */
4212 ldv_final: ldv_check_final_state();
4213
4214 /* LDV_COMMENT_END_FUNCTION_CALL_SECTION */
4215 return;
4216
4217 }
4218 #endif
4219
4220 /* LDV_COMMENT_END_MAIN */
4221
4222 #line 21 "/home/ubuntu/launches/work/current--X--drivers--X--defaultlinux-4.7-rc1.tar.xz--X--106_1a--X--cpachecker/linux-4.7-rc1.tar.xz/csd_deg_dscv/8139/dscv_tempdir/dscv/ri/106_1a/drivers/ide/ide-tape.o.c.prepared" 1
2
3 #include <verifier/rcv.h>
4 #include <kernel-model/ERR.inc>
5
6 // There are 2 possible states of usb gadget class registration.
7 enum
8 {
9 LDV_USB_GADGET_CLASS_ZERO_STATE, // Usb gadget class is not registered.
10 LDV_USB_GADGET_CLASS_REGISTERED // Usb gadget class is registered.
11 };
12
13 // There are 2 possible states of char device region registration.
14 enum
15 {
16 LDV_USB_GADGET_CHRDEV_ZERO_STATE, // Char device region is not registered for usb gadget.
17 LDV_USB_GADGET_CHRDEV_REGISTERED // Char device region is registered for usb gadget.
18 };
19
20 // There are 2 possible states of usb gadget registration.
21 enum
22 {
23 LDV_USB_GADGET_ZERO_STATE, // Usb gadget is not registered.
24 LDV_USB_GADGET_REGISTERED // Usb gadget is registered.
25 };
26
27 /* LDV_COMMENT_CHANGE_STATE Usb gadget class is not registered at the beginning. */
28 int ldv_usb_gadget_class = LDV_USB_GADGET_CLASS_ZERO_STATE;
29
30 /* LDV_COMMENT_CHANGE_STATE Char device region is not registered at the beginning. */
31 int ldv_usb_gadget_chrdev = LDV_USB_GADGET_CHRDEV_ZERO_STATE;
32
33 /* LDV_COMMENT_CHANGE_STATE Usb gadget is not registered at the beginning. */
34 int ldv_usb_gadget = LDV_USB_GADGET_ZERO_STATE;
35
36
37 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_create_class') Check that usb gadget class was not registered. Then create and register class for it. */
38 void *ldv_create_class(void)
39 {
40 void *is_got;
41
42 /* LDV_COMMENT_OTHER Get blk request in the nondeterministic way. */
43 is_got = ldv_undef_ptr();
44
45 /* LDV_COMMENT_ASSERT Get blk request just in case when an error did not happen. */
46 if (is_got <= LDV_PTR_MAX)
47 {
48 /* LDV_COMMENT_ASSERT Registring usb gadget class is only allowed if usb gadget is not registered. */
49 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
50 /* LDV_COMMENT_ASSERT Check that usb gadget class is unregistered. */
51 ldv_assert(ldv_usb_gadget_class == LDV_USB_GADGET_CLASS_ZERO_STATE);
52 /* LDV_COMMENT_CHANGE_STATE Register class for usb gadget. */
53 ldv_usb_gadget_class = LDV_USB_GADGET_CLASS_REGISTERED;
54 }
55
56 /* LDV_COMMENT_RETURN Return obtained blk request. */
57 return is_got;
58 }
59
60 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_register_class') Check that usb gadget class was not registered and register class for it. */
61 int ldv_register_class(void)
62 {
63 int is_reg;
64
65 /* LDV_COMMENT_OTHER Register gadget class in the nondeterministic way. */
66 is_reg = ldv_undef_int_nonpositive();
67
68 /* LDV_COMMENT_ASSERT Get blk request just in case when an error did not happen. */
69 if (!is_reg)
70 {
71 /* LDV_COMMENT_ASSERT Registering usb gadget class is only allowed if usb gadget is not registered. */
72 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
73 /* LDV_COMMENT_ASSERT Check that usb gadget class is unregistered. */
74 ldv_assert(ldv_usb_gadget_class == LDV_USB_GADGET_CLASS_ZERO_STATE);
75 /* LDV_COMMENT_CHANGE_STATE Register class for usb gadget. */
76 ldv_usb_gadget_class = LDV_USB_GADGET_CLASS_REGISTERED;
77 }
78
79 /* LDV_COMMENT_RETURN Return registration status (0 is success). */
80 return is_reg;
81 }
82
83 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_unregister_class') Check that usb gadget class was registered and unregister it. */
84 void ldv_unregister_class(void)
85 {
86 /* LDV_COMMENT_ASSERT Unregistering usb gadget class is only allowed if usb gadget is not registered. */
87 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
88 /* LDV_COMMENT_ASSERT Check that usb gadget class is registered. */
89 ldv_assert(ldv_usb_gadget_class == LDV_USB_GADGET_CLASS_REGISTERED);
90 /* LDV_COMMENT_CHANGE_STATE Unregister class for usb gadget. */
91 ldv_usb_gadget_class = LDV_USB_GADGET_CLASS_ZERO_STATE;
92 }
93
94 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_register_chrdev') Check that chrdev region was not registered and register it. */
95 int ldv_register_chrdev(int major)
96 {
97 int is_reg;
98
99 /* LDV_COMMENT_OTHER Register chrdev in the nondeterministic way. */
100 is_reg = ldv_undef_int_nonpositive();
101
102 /* LDV_COMMENT_ASSERT Register chrdev just in case when an error did not happen. */
103 if (!is_reg)
104 {
105 /* LDV_COMMENT_ASSERT Usb gadget should be unregistered at this point. */
106 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
107 /* LDV_COMMENT_ASSERT Check that chrdev region is unregistered. */
108 ldv_assert(ldv_usb_gadget_chrdev == LDV_USB_GADGET_CHRDEV_ZERO_STATE);
109 /* LDV_COMMENT_CHANGE_STATE Register chrdev region for usb gadget. */
110 ldv_usb_gadget_chrdev = LDV_USB_GADGET_CHRDEV_REGISTERED;
111 if (major == 0)
112 {
113 /* LDV_COMMENT_OTHER Function returns allocated major number. */
114 is_reg = ldv_undef_int();
115 ldv_assume (is_reg > 0);
116 }
117 }
118
119 /* LDV_COMMENT_RETURN Return registration status (0 is success). */
120 return is_reg;
121 }
122
123 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_register_chrdev_region') Check that chrdev region was not registered and register it. */
124 int ldv_register_chrdev_region(void)
125 {
126 int is_reg;
127
128 /* LDV_COMMENT_OTHER Register chrdev in the nondeterministic way. */
129 is_reg = ldv_undef_int_nonpositive();
130
131 /* LDV_COMMENT_ASSERT Register chrdev just in case when an error did not happen. */
132 if (!is_reg)
133 {
134 /* LDV_COMMENT_ASSERT Usb gadget should be unregistered at this point. */
135 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
136 /* LDV_COMMENT_ASSERT Check that chrdev region is unregistered. */
137 ldv_assert(ldv_usb_gadget_chrdev == LDV_USB_GADGET_CHRDEV_ZERO_STATE);
138 /* LDV_COMMENT_CHANGE_STATE Register chrdev region for usb gadget. */
139 ldv_usb_gadget_chrdev = LDV_USB_GADGET_CHRDEV_REGISTERED;
140 }
141
142 /* LDV_COMMENT_RETURN Return registration status (0 is success). */
143 return is_reg;
144 }
145
146 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_unregister_chrdev_region') Check that chrdev region was registered and unregister it. */
147 void ldv_unregister_chrdev_region(void)
148 {
149 /* LDV_COMMENT_ASSERT Usb gadget should not be registered at this point. */
150 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
151 /* LDV_COMMENT_ASSERT Check that chrdev region is registered. */
152 ldv_assert(ldv_usb_gadget_chrdev == LDV_USB_GADGET_CHRDEV_REGISTERED);
153 /* LDV_COMMENT_CHANGE_STATE Unregister chrdev. */
154 ldv_usb_gadget_chrdev = LDV_USB_GADGET_CHRDEV_ZERO_STATE;
155 }
156
157 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_register_usb_gadget') Check that usb gadget was not registered and register it. */
158 int ldv_register_usb_gadget(void)
159 {
160 int is_reg;
161
162 /* LDV_COMMENT_OTHER Register usb gadget in the nondeterministic way. */
163 is_reg = ldv_undef_int_nonpositive();
164
165 /* LDV_COMMENT_ASSERT Register usb gadget just in case when an error did not happen. */
166 if (!is_reg)
167 {
168 /* LDV_COMMENT_ASSERT Gadget should not be registered at this point. */
169 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
170 /* LDV_COMMENT_CHANGE_STATE Register usb gadget. */
171 ldv_usb_gadget = LDV_USB_GADGET_REGISTERED;
172 }
173
174 /* LDV_COMMENT_RETURN Return registration status (0 is success). */
175 return is_reg;
176 }
177
178 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_unregister_usb_gadget') Check that usb gadget was registered and unregister it. */
179 void ldv_unregister_usb_gadget(void)
180 {
181 /* LDV_COMMENT_ASSERT Usb gadget should be registered at this point. */
182 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_REGISTERED);
183 /* LDV_COMMENT_CHANGE_STATE Unregister usb gadget. */
184 ldv_usb_gadget = LDV_USB_GADGET_ZERO_STATE;
185 }
186
187 /* LDV_COMMENT_MODEL_FUNCTION_DEFINITION(name='ldv_check_final_state') Check that usb gadget is fully unregistered at the end. */
188 void ldv_check_final_state(void)
189 {
190 /* LDV_COMMENT_ASSERT Usb gadget class should be unregistered at the end. */
191 ldv_assert(ldv_usb_gadget_class == LDV_USB_GADGET_CLASS_ZERO_STATE);
192 /* LDV_COMMENT_ASSERT Chrdev region should be unregistered at the end. */
193 ldv_assert(ldv_usb_gadget_chrdev == LDV_USB_GADGET_CHRDEV_ZERO_STATE);
194 /* LDV_COMMENT_ASSERT Usb gadget should be unregistered at the end. */
195 ldv_assert(ldv_usb_gadget == LDV_USB_GADGET_ZERO_STATE);
196 } 1 #ifndef _LDV_ERR_
2 #define _LDV_ERR_
3
4 #include <linux/kernel.h>
5
6 /* LDV_COMMENT_MODEL_FUNCTION_DEFENITION(name='ldv_is_err') This function return result of checking if pointer is impossible. */
7 bool ldv_is_err(const void *ptr)
8 {
9 /*LDV_COMMENT_RETURN Return value of function ldv_is_err_val().*/
10 return ((unsigned long)ptr > LDV_PTR_MAX);
11 }
12
13 /* LDV_COMMENT_MODEL_FUNCTION_DEFENITION(name='ldv_err_ptr') This function return pointer. */
14 void* ldv_err_ptr(long error)
15 {
16 /*LDV_COMMENT_RETURN Return error pointer.*/
17 return (void *)(LDV_PTR_MAX - error);
18 }
19
20 /* LDV_COMMENT_MODEL_FUNCTION_DEFENITION(name='ldv_ptr_err') This function return error if pointer is impossible. */
21 long ldv_ptr_err(const void *ptr)
22 {
23 /*LDV_COMMENT_RETURN Return error code.*/
24 return (long)(LDV_PTR_MAX - (unsigned long)ptr);
25 }
26
27 /* LDV_COMMENT_MODEL_FUNCTION_DEFENITION(name='ldv_is_err_or_null') This function check if pointer is impossible or null. */
28 bool ldv_is_err_or_null(const void *ptr)
29 {
30 /*LDV_COMMENT_RETURN Return 0 if pointer is possible and not zero, and 1 in other cases*/
31 return !ptr || ldv_is_err((unsigned long)ptr);
32 }
33
34 #endif /* _LDV_ERR_ */ 1 #ifndef _LDV_RCV_H_
2 #define _LDV_RCV_H_
3
4 /* If expr evaluates to zero, ldv_assert() causes a program to reach the error
5 label like the standard assert(). */
6 #define ldv_assert(expr) ((expr) ? 0 : ldv_error())
7
8 /* The error label wrapper. It is used because of some static verifiers (like
9 BLAST) don't accept multiple error labels through a program. */
10 static inline void ldv_error(void)
11 {
12 LDV_ERROR: goto LDV_ERROR;
13 }
14
15 /* If expr evaluates to zero, ldv_assume() causes an infinite loop that is
16 avoided by verifiers. */
17 #define ldv_assume(expr) ((expr) ? 0 : ldv_stop())
18
19 /* Infinite loop, that causes verifiers to skip such paths. */
20 static inline void ldv_stop(void) {
21 LDV_STOP: goto LDV_STOP;
22 }
23
24 /* Special nondeterministic functions. */
25 int ldv_undef_int(void);
26 void *ldv_undef_ptr(void);
27 unsigned long ldv_undef_ulong(void);
28 long ldv_undef_long(void);
29 /* Return nondeterministic negative integer number. */
30 static inline int ldv_undef_int_negative(void)
31 {
32 int ret = ldv_undef_int();
33
34 ldv_assume(ret < 0);
35
36 return ret;
37 }
38 /* Return nondeterministic nonpositive integer number. */
39 static inline int ldv_undef_int_nonpositive(void)
40 {
41 int ret = ldv_undef_int();
42
43 ldv_assume(ret <= 0);
44
45 return ret;
46 }
47
48 /* Add explicit model for __builin_expect GCC function. Without the model a
49 return value will be treated as nondetermined by verifiers. */
50 static inline long __builtin_expect(long exp, long c)
51 {
52 return exp;
53 }
54
55 /* This function causes the program to exit abnormally. GCC implements this
56 function by using a target-dependent mechanism (such as intentionally executing
57 an illegal instruction) or by calling abort. The mechanism used may vary from
58 release to release so you should not rely on any particular implementation.
59 http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html */
60 static inline void __builtin_trap(void)
61 {
62 ldv_assert(0);
63 }
64
65 /* The constant is for simulating an error of ldv_undef_ptr() function. */
66 #define LDV_PTR_MAX 2012
67
68 #endif /* _LDV_RCV_H_ */ 1 #ifndef _LINUX_FS_H
2 #define _LINUX_FS_H
3
4 #include <linux/linkage.h>
5 #include <linux/wait.h>
6 #include <linux/kdev_t.h>
7 #include <linux/dcache.h>
8 #include <linux/path.h>
9 #include <linux/stat.h>
10 #include <linux/cache.h>
11 #include <linux/list.h>
12 #include <linux/list_lru.h>
13 #include <linux/llist.h>
14 #include <linux/radix-tree.h>
15 #include <linux/rbtree.h>
16 #include <linux/init.h>
17 #include <linux/pid.h>
18 #include <linux/bug.h>
19 #include <linux/mutex.h>
20 #include <linux/rwsem.h>
21 #include <linux/capability.h>
22 #include <linux/semaphore.h>
23 #include <linux/fiemap.h>
24 #include <linux/rculist_bl.h>
25 #include <linux/atomic.h>
26 #include <linux/shrinker.h>
27 #include <linux/migrate_mode.h>
28 #include <linux/uidgid.h>
29 #include <linux/lockdep.h>
30 #include <linux/percpu-rwsem.h>
31 #include <linux/blk_types.h>
32 #include <linux/workqueue.h>
33 #include <linux/percpu-rwsem.h>
34 #include <linux/delayed_call.h>
35
36 #include <asm/byteorder.h>
37 #include <uapi/linux/fs.h>
38
39 struct backing_dev_info;
40 struct bdi_writeback;
41 struct export_operations;
42 struct hd_geometry;
43 struct iovec;
44 struct kiocb;
45 struct kobject;
46 struct pipe_inode_info;
47 struct poll_table_struct;
48 struct kstatfs;
49 struct vm_area_struct;
50 struct vfsmount;
51 struct cred;
52 struct swap_info_struct;
53 struct seq_file;
54 struct workqueue_struct;
55 struct iov_iter;
56 struct fscrypt_info;
57 struct fscrypt_operations;
58
59 extern void __init inode_init(void);
60 extern void __init inode_init_early(void);
61 extern void __init files_init(void);
62 extern void __init files_maxfiles_init(void);
63
64 extern struct files_stat_struct files_stat;
65 extern unsigned long get_max_files(void);
66 extern int sysctl_nr_open;
67 extern struct inodes_stat_t inodes_stat;
68 extern int leases_enable, lease_break_time;
69 extern int sysctl_protected_symlinks;
70 extern int sysctl_protected_hardlinks;
71
72 struct buffer_head;
73 typedef int (get_block_t)(struct inode *inode, sector_t iblock,
74 struct buffer_head *bh_result, int create);
75 typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
76 ssize_t bytes, void *private);
77
78 #define MAY_EXEC 0x00000001
79 #define MAY_WRITE 0x00000002
80 #define MAY_READ 0x00000004
81 #define MAY_APPEND 0x00000008
82 #define MAY_ACCESS 0x00000010
83 #define MAY_OPEN 0x00000020
84 #define MAY_CHDIR 0x00000040
85 /* called from RCU mode, don't block */
86 #define MAY_NOT_BLOCK 0x00000080
87
88 /*
89 * flags in file.f_mode. Note that FMODE_READ and FMODE_WRITE must correspond
90 * to O_WRONLY and O_RDWR via the strange trick in __dentry_open()
91 */
92
93 /* file is open for reading */
94 #define FMODE_READ ((__force fmode_t)0x1)
95 /* file is open for writing */
96 #define FMODE_WRITE ((__force fmode_t)0x2)
97 /* file is seekable */
98 #define FMODE_LSEEK ((__force fmode_t)0x4)
99 /* file can be accessed using pread */
100 #define FMODE_PREAD ((__force fmode_t)0x8)
101 /* file can be accessed using pwrite */
102 #define FMODE_PWRITE ((__force fmode_t)0x10)
103 /* File is opened for execution with sys_execve / sys_uselib */
104 #define FMODE_EXEC ((__force fmode_t)0x20)
105 /* File is opened with O_NDELAY (only set for block devices) */
106 #define FMODE_NDELAY ((__force fmode_t)0x40)
107 /* File is opened with O_EXCL (only set for block devices) */
108 #define FMODE_EXCL ((__force fmode_t)0x80)
109 /* File is opened using open(.., 3, ..) and is writeable only for ioctls
110 (specialy hack for floppy.c) */
111 #define FMODE_WRITE_IOCTL ((__force fmode_t)0x100)
112 /* 32bit hashes as llseek() offset (for directories) */
113 #define FMODE_32BITHASH ((__force fmode_t)0x200)
114 /* 64bit hashes as llseek() offset (for directories) */
115 #define FMODE_64BITHASH ((__force fmode_t)0x400)
116
117 /*
118 * Don't update ctime and mtime.
119 *
120 * Currently a special hack for the XFS open_by_handle ioctl, but we'll
121 * hopefully graduate it to a proper O_CMTIME flag supported by open(2) soon.
122 */
123 #define FMODE_NOCMTIME ((__force fmode_t)0x800)
124
125 /* Expect random access pattern */
126 #define FMODE_RANDOM ((__force fmode_t)0x1000)
127
128 /* File is huge (eg. /dev/kmem): treat loff_t as unsigned */
129 #define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000)
130
131 /* File is opened with O_PATH; almost nothing can be done with it */
132 #define FMODE_PATH ((__force fmode_t)0x4000)
133
134 /* File needs atomic accesses to f_pos */
135 #define FMODE_ATOMIC_POS ((__force fmode_t)0x8000)
136 /* Write access to underlying fs */
137 #define FMODE_WRITER ((__force fmode_t)0x10000)
138 /* Has read method(s) */
139 #define FMODE_CAN_READ ((__force fmode_t)0x20000)
140 /* Has write method(s) */
141 #define FMODE_CAN_WRITE ((__force fmode_t)0x40000)
142
143 /* File was opened by fanotify and shouldn't generate fanotify events */
144 #define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
145
146 /*
147 * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector
148 * that indicates that they should check the contents of the iovec are
149 * valid, but not check the memory that the iovec elements
150 * points too.
151 */
152 #define CHECK_IOVEC_ONLY -1
153
154 /*
155 * The below are the various read and write types that we support. Some of
156 * them include behavioral modifiers that send information down to the
157 * block layer and IO scheduler. Terminology:
158 *
159 * The block layer uses device plugging to defer IO a little bit, in
160 * the hope that we will see more IO very shortly. This increases
161 * coalescing of adjacent IO and thus reduces the number of IOs we
162 * have to send to the device. It also allows for better queuing,
163 * if the IO isn't mergeable. If the caller is going to be waiting
164 * for the IO, then he must ensure that the device is unplugged so
165 * that the IO is dispatched to the driver.
166 *
167 * All IO is handled async in Linux. This is fine for background
168 * writes, but for reads or writes that someone waits for completion
169 * on, we want to notify the block layer and IO scheduler so that they
170 * know about it. That allows them to make better scheduling
171 * decisions. So when the below references 'sync' and 'async', it
172 * is referencing this priority hint.
173 *
174 * With that in mind, the available types are:
175 *
176 * READ A normal read operation. Device will be plugged.
177 * READ_SYNC A synchronous read. Device is not plugged, caller can
178 * immediately wait on this read without caring about
179 * unplugging.
180 * READA Used for read-ahead operations. Lower priority, and the
181 * block layer could (in theory) choose to ignore this
182 * request if it runs into resource problems.
183 * WRITE A normal async write. Device will be plugged.
184 * WRITE_SYNC Synchronous write. Identical to WRITE, but passes down
185 * the hint that someone will be waiting on this IO
186 * shortly. The write equivalent of READ_SYNC.
187 * WRITE_ODIRECT Special case write for O_DIRECT only.
188 * WRITE_FLUSH Like WRITE_SYNC but with preceding cache flush.
189 * WRITE_FUA Like WRITE_SYNC but data is guaranteed to be on
190 * non-volatile media on completion.
191 * WRITE_FLUSH_FUA Combination of WRITE_FLUSH and FUA. The IO is preceded
192 * by a cache flush and data is guaranteed to be on
193 * non-volatile media on completion.
194 *
195 */
196 #define RW_MASK REQ_WRITE
197 #define RWA_MASK REQ_RAHEAD
198
199 #define READ 0
200 #define WRITE RW_MASK
201 #define READA RWA_MASK
202
203 #define READ_SYNC (READ | REQ_SYNC)
204 #define WRITE_SYNC (WRITE | REQ_SYNC | REQ_NOIDLE)
205 #define WRITE_ODIRECT (WRITE | REQ_SYNC)
206 #define WRITE_FLUSH (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH)
207 #define WRITE_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FUA)
208 #define WRITE_FLUSH_FUA (WRITE | REQ_SYNC | REQ_NOIDLE | REQ_FLUSH | REQ_FUA)
209
210 /*
211 * Attribute flags. These should be or-ed together to figure out what
212 * has been changed!
213 */
214 #define ATTR_MODE (1 << 0)
215 #define ATTR_UID (1 << 1)
216 #define ATTR_GID (1 << 2)
217 #define ATTR_SIZE (1 << 3)
218 #define ATTR_ATIME (1 << 4)
219 #define ATTR_MTIME (1 << 5)
220 #define ATTR_CTIME (1 << 6)
221 #define ATTR_ATIME_SET (1 << 7)
222 #define ATTR_MTIME_SET (1 << 8)
223 #define ATTR_FORCE (1 << 9) /* Not a change, but a change it */
224 #define ATTR_ATTR_FLAG (1 << 10)
225 #define ATTR_KILL_SUID (1 << 11)
226 #define ATTR_KILL_SGID (1 << 12)
227 #define ATTR_FILE (1 << 13)
228 #define ATTR_KILL_PRIV (1 << 14)
229 #define ATTR_OPEN (1 << 15) /* Truncating from open(O_TRUNC) */
230 #define ATTR_TIMES_SET (1 << 16)
231
232 /*
233 * Whiteout is represented by a char device. The following constants define the
234 * mode and device number to use.
235 */
236 #define WHITEOUT_MODE 0
237 #define WHITEOUT_DEV 0
238
239 /*
240 * This is the Inode Attributes structure, used for notify_change(). It
241 * uses the above definitions as flags, to know which values have changed.
242 * Also, in this manner, a Filesystem can look at only the values it cares
243 * about. Basically, these are the attributes that the VFS layer can
244 * request to change from the FS layer.
245 *
246 * Derek Atkins <warlord@MIT.EDU> 94-10-20
247 */
248 struct iattr {
249 unsigned int ia_valid;
250 umode_t ia_mode;
251 kuid_t ia_uid;
252 kgid_t ia_gid;
253 loff_t ia_size;
254 struct timespec ia_atime;
255 struct timespec ia_mtime;
256 struct timespec ia_ctime;
257
258 /*
259 * Not an attribute, but an auxiliary info for filesystems wanting to
260 * implement an ftruncate() like method. NOTE: filesystem should
261 * check for (ia_valid & ATTR_FILE), and not for (ia_file != NULL).
262 */
263 struct file *ia_file;
264 };
265
266 /*
267 * Includes for diskquotas.
268 */
269 #include <linux/quota.h>
270
271 /*
272 * Maximum number of layers of fs stack. Needs to be limited to
273 * prevent kernel stack overflow
274 */
275 #define FILESYSTEM_MAX_STACK_DEPTH 2
276
277 /**
278 * enum positive_aop_returns - aop return codes with specific semantics
279 *
280 * @AOP_WRITEPAGE_ACTIVATE: Informs the caller that page writeback has
281 * completed, that the page is still locked, and
282 * should be considered active. The VM uses this hint
283 * to return the page to the active list -- it won't
284 * be a candidate for writeback again in the near
285 * future. Other callers must be careful to unlock
286 * the page if they get this return. Returned by
287 * writepage();
288 *
289 * @AOP_TRUNCATED_PAGE: The AOP method that was handed a locked page has
290 * unlocked it and the page might have been truncated.
291 * The caller should back up to acquiring a new page and
292 * trying again. The aop will be taking reasonable
293 * precautions not to livelock. If the caller held a page
294 * reference, it should drop it before retrying. Returned
295 * by readpage().
296 *
297 * address_space_operation functions return these large constants to indicate
298 * special semantics to the caller. These are much larger than the bytes in a
299 * page to allow for functions that return the number of bytes operated on in a
300 * given page.
301 */
302
303 enum positive_aop_returns {
304 AOP_WRITEPAGE_ACTIVATE = 0x80000,
305 AOP_TRUNCATED_PAGE = 0x80001,
306 };
307
308 #define AOP_FLAG_UNINTERRUPTIBLE 0x0001 /* will not do a short write */
309 #define AOP_FLAG_CONT_EXPAND 0x0002 /* called from cont_expand */
310 #define AOP_FLAG_NOFS 0x0004 /* used by filesystem to direct
311 * helper code (eg buffer layer)
312 * to clear GFP_FS from alloc */
313
314 /*
315 * oh the beauties of C type declarations.
316 */
317 struct page;
318 struct address_space;
319 struct writeback_control;
320
321 #define IOCB_EVENTFD (1 << 0)
322 #define IOCB_APPEND (1 << 1)
323 #define IOCB_DIRECT (1 << 2)
324 #define IOCB_HIPRI (1 << 3)
325 #define IOCB_DSYNC (1 << 4)
326 #define IOCB_SYNC (1 << 5)
327
328 struct kiocb {
329 struct file *ki_filp;
330 loff_t ki_pos;
331 void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
332 void *private;
333 int ki_flags;
334 };
335
336 static inline bool is_sync_kiocb(struct kiocb *kiocb)
337 {
338 return kiocb->ki_complete == NULL;
339 }
340
341 static inline int iocb_flags(struct file *file);
342
343 static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
344 {
345 *kiocb = (struct kiocb) {
346 .ki_filp = filp,
347 .ki_flags = iocb_flags(filp),
348 };
349 }
350
351 /*
352 * "descriptor" for what we're up to with a read.
353 * This allows us to use the same read code yet
354 * have multiple different users of the data that
355 * we read from a file.
356 *
357 * The simplest case just copies the data to user
358 * mode.
359 */
360 typedef struct {
361 size_t written;
362 size_t count;
363 union {
364 char __user *buf;
365 void *data;
366 } arg;
367 int error;
368 } read_descriptor_t;
369
370 typedef int (*read_actor_t)(read_descriptor_t *, struct page *,
371 unsigned long, unsigned long);
372
373 struct address_space_operations {
374 int (*writepage)(struct page *page, struct writeback_control *wbc);
375 int (*readpage)(struct file *, struct page *);
376
377 /* Write back some dirty pages from this mapping. */
378 int (*writepages)(struct address_space *, struct writeback_control *);
379
380 /* Set a page dirty. Return true if this dirtied it */
381 int (*set_page_dirty)(struct page *page);
382
383 int (*readpages)(struct file *filp, struct address_space *mapping,
384 struct list_head *pages, unsigned nr_pages);
385
386 int (*write_begin)(struct file *, struct address_space *mapping,
387 loff_t pos, unsigned len, unsigned flags,
388 struct page **pagep, void **fsdata);
389 int (*write_end)(struct file *, struct address_space *mapping,
390 loff_t pos, unsigned len, unsigned copied,
391 struct page *page, void *fsdata);
392
393 /* Unfortunately this kludge is needed for FIBMAP. Don't use it */
394 sector_t (*bmap)(struct address_space *, sector_t);
395 void (*invalidatepage) (struct page *, unsigned int, unsigned int);
396 int (*releasepage) (struct page *, gfp_t);
397 void (*freepage)(struct page *);
398 ssize_t (*direct_IO)(struct kiocb *, struct iov_iter *iter);
399 /*
400 * migrate the contents of a page to the specified target. If
401 * migrate_mode is MIGRATE_ASYNC, it must not block.
402 */
403 int (*migratepage) (struct address_space *,
404 struct page *, struct page *, enum migrate_mode);
405 int (*launder_page) (struct page *);
406 int (*is_partially_uptodate) (struct page *, unsigned long,
407 unsigned long);
408 void (*is_dirty_writeback) (struct page *, bool *, bool *);
409 int (*error_remove_page)(struct address_space *, struct page *);
410
411 /* swapfile support */
412 int (*swap_activate)(struct swap_info_struct *sis, struct file *file,
413 sector_t *span);
414 void (*swap_deactivate)(struct file *file);
415 };
416
417 extern const struct address_space_operations empty_aops;
418
419 /*
420 * pagecache_write_begin/pagecache_write_end must be used by general code
421 * to write into the pagecache.
422 */
423 int pagecache_write_begin(struct file *, struct address_space *mapping,
424 loff_t pos, unsigned len, unsigned flags,
425 struct page **pagep, void **fsdata);
426
427 int pagecache_write_end(struct file *, struct address_space *mapping,
428 loff_t pos, unsigned len, unsigned copied,
429 struct page *page, void *fsdata);
430
431 struct address_space {
432 struct inode *host; /* owner: inode, block_device */
433 struct radix_tree_root page_tree; /* radix tree of all pages */
434 spinlock_t tree_lock; /* and lock protecting it */
435 atomic_t i_mmap_writable;/* count VM_SHARED mappings */
436 struct rb_root i_mmap; /* tree of private and shared mappings */
437 struct rw_semaphore i_mmap_rwsem; /* protect tree, count, list */
438 /* Protected by tree_lock together with the radix tree */
439 unsigned long nrpages; /* number of total pages */
440 /* number of shadow or DAX exceptional entries */
441 unsigned long nrexceptional;
442 pgoff_t writeback_index;/* writeback starts here */
443 const struct address_space_operations *a_ops; /* methods */
444 unsigned long flags; /* error bits/gfp mask */
445 spinlock_t private_lock; /* for use by the address_space */
446 struct list_head private_list; /* ditto */
447 void *private_data; /* ditto */
448 } __attribute__((aligned(sizeof(long))));
449 /*
450 * On most architectures that alignment is already the case; but
451 * must be enforced here for CRIS, to let the least significant bit
452 * of struct page's "mapping" pointer be used for PAGE_MAPPING_ANON.
453 */
454 struct request_queue;
455
456 struct block_device {
457 dev_t bd_dev; /* not a kdev_t - it's a search key */
458 int bd_openers;
459 struct inode * bd_inode; /* will die */
460 struct super_block * bd_super;
461 struct mutex bd_mutex; /* open/close mutex */
462 struct list_head bd_inodes;
463 void * bd_claiming;
464 void * bd_holder;
465 int bd_holders;
466 bool bd_write_holder;
467 #ifdef CONFIG_SYSFS
468 struct list_head bd_holder_disks;
469 #endif
470 struct block_device * bd_contains;
471 unsigned bd_block_size;
472 struct hd_struct * bd_part;
473 /* number of times partitions within this device have been opened. */
474 unsigned bd_part_count;
475 int bd_invalidated;
476 struct gendisk * bd_disk;
477 struct request_queue * bd_queue;
478 struct list_head bd_list;
479 /*
480 * Private data. You must have bd_claim'ed the block_device
481 * to use this. NOTE: bd_claim allows an owner to claim
482 * the same device multiple times, the owner must take special
483 * care to not mess up bd_private for that case.
484 */
485 unsigned long bd_private;
486
487 /* The counter of freeze processes */
488 int bd_fsfreeze_count;
489 /* Mutex for freeze */
490 struct mutex bd_fsfreeze_mutex;
491 };
492
493 /*
494 * Radix-tree tags, for tagging dirty and writeback pages within the pagecache
495 * radix trees
496 */
497 #define PAGECACHE_TAG_DIRTY 0
498 #define PAGECACHE_TAG_WRITEBACK 1
499 #define PAGECACHE_TAG_TOWRITE 2
500
501 int mapping_tagged(struct address_space *mapping, int tag);
502
503 static inline void i_mmap_lock_write(struct address_space *mapping)
504 {
505 down_write(&mapping->i_mmap_rwsem);
506 }
507
508 static inline void i_mmap_unlock_write(struct address_space *mapping)
509 {
510 up_write(&mapping->i_mmap_rwsem);
511 }
512
513 static inline void i_mmap_lock_read(struct address_space *mapping)
514 {
515 down_read(&mapping->i_mmap_rwsem);
516 }
517
518 static inline void i_mmap_unlock_read(struct address_space *mapping)
519 {
520 up_read(&mapping->i_mmap_rwsem);
521 }
522
523 /*
524 * Might pages of this file be mapped into userspace?
525 */
526 static inline int mapping_mapped(struct address_space *mapping)
527 {
528 return !RB_EMPTY_ROOT(&mapping->i_mmap);
529 }
530
531 /*
532 * Might pages of this file have been modified in userspace?
533 * Note that i_mmap_writable counts all VM_SHARED vmas: do_mmap_pgoff
534 * marks vma as VM_SHARED if it is shared, and the file was opened for
535 * writing i.e. vma may be mprotected writable even if now readonly.
536 *
537 * If i_mmap_writable is negative, no new writable mappings are allowed. You
538 * can only deny writable mappings, if none exists right now.
539 */
540 static inline int mapping_writably_mapped(struct address_space *mapping)
541 {
542 return atomic_read(&mapping->i_mmap_writable) > 0;
543 }
544
545 static inline int mapping_map_writable(struct address_space *mapping)
546 {
547 return atomic_inc_unless_negative(&mapping->i_mmap_writable) ?
548 0 : -EPERM;
549 }
550
551 static inline void mapping_unmap_writable(struct address_space *mapping)
552 {
553 atomic_dec(&mapping->i_mmap_writable);
554 }
555
556 static inline int mapping_deny_writable(struct address_space *mapping)
557 {
558 return atomic_dec_unless_positive(&mapping->i_mmap_writable) ?
559 0 : -EBUSY;
560 }
561
562 static inline void mapping_allow_writable(struct address_space *mapping)
563 {
564 atomic_inc(&mapping->i_mmap_writable);
565 }
566
567 /*
568 * Use sequence counter to get consistent i_size on 32-bit processors.
569 */
570 #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
571 #include <linux/seqlock.h>
572 #define __NEED_I_SIZE_ORDERED
573 #define i_size_ordered_init(inode) seqcount_init(&inode->i_size_seqcount)
574 #else
575 #define i_size_ordered_init(inode) do { } while (0)
576 #endif
577
578 struct posix_acl;
579 #define ACL_NOT_CACHED ((void *)(-1))
580
581 static inline struct posix_acl *
582 uncached_acl_sentinel(struct task_struct *task)
583 {
584 return (void *)task + 1;
585 }
586
587 static inline bool
588 is_uncached_acl(struct posix_acl *acl)
589 {
590 return (long)acl & 1;
591 }
592
593 #define IOP_FASTPERM 0x0001
594 #define IOP_LOOKUP 0x0002
595 #define IOP_NOFOLLOW 0x0004
596
597 /*
598 * Keep mostly read-only and often accessed (especially for
599 * the RCU path lookup and 'stat' data) fields at the beginning
600 * of the 'struct inode'
601 */
602 struct inode {
603 umode_t i_mode;
604 unsigned short i_opflags;
605 kuid_t i_uid;
606 kgid_t i_gid;
607 unsigned int i_flags;
608
609 #ifdef CONFIG_FS_POSIX_ACL
610 struct posix_acl *i_acl;
611 struct posix_acl *i_default_acl;
612 #endif
613
614 const struct inode_operations *i_op;
615 struct super_block *i_sb;
616 struct address_space *i_mapping;
617
618 #ifdef CONFIG_SECURITY
619 void *i_security;
620 #endif
621
622 /* Stat data, not accessed from path walking */
623 unsigned long i_ino;
624 /*
625 * Filesystems may only read i_nlink directly. They shall use the
626 * following functions for modification:
627 *
628 * (set|clear|inc|drop)_nlink
629 * inode_(inc|dec)_link_count
630 */
631 union {
632 const unsigned int i_nlink;
633 unsigned int __i_nlink;
634 };
635 dev_t i_rdev;
636 loff_t i_size;
637 struct timespec i_atime;
638 struct timespec i_mtime;
639 struct timespec i_ctime;
640 spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
641 unsigned short i_bytes;
642 unsigned int i_blkbits;
643 blkcnt_t i_blocks;
644
645 #ifdef __NEED_I_SIZE_ORDERED
646 seqcount_t i_size_seqcount;
647 #endif
648
649 /* Misc */
650 unsigned long i_state;
651 struct rw_semaphore i_rwsem;
652
653 unsigned long dirtied_when; /* jiffies of first dirtying */
654 unsigned long dirtied_time_when;
655
656 struct hlist_node i_hash;
657 struct list_head i_io_list; /* backing dev IO list */
658 #ifdef CONFIG_CGROUP_WRITEBACK
659 struct bdi_writeback *i_wb; /* the associated cgroup wb */
660
661 /* foreign inode detection, see wbc_detach_inode() */
662 int i_wb_frn_winner;
663 u16 i_wb_frn_avg_time;
664 u16 i_wb_frn_history;
665 #endif
666 struct list_head i_lru; /* inode LRU list */
667 struct list_head i_sb_list;
668 union {
669 struct hlist_head i_dentry;
670 struct rcu_head i_rcu;
671 };
672 u64 i_version;
673 atomic_t i_count;
674 atomic_t i_dio_count;
675 atomic_t i_writecount;
676 #ifdef CONFIG_IMA
677 atomic_t i_readcount; /* struct files open RO */
678 #endif
679 const struct file_operations *i_fop; /* former ->i_op->default_file_ops */
680 struct file_lock_context *i_flctx;
681 struct address_space i_data;
682 struct list_head i_devices;
683 union {
684 struct pipe_inode_info *i_pipe;
685 struct block_device *i_bdev;
686 struct cdev *i_cdev;
687 char *i_link;
688 unsigned i_dir_seq;
689 };
690
691 __u32 i_generation;
692
693 #ifdef CONFIG_FSNOTIFY
694 __u32 i_fsnotify_mask; /* all events this inode cares about */
695 struct hlist_head i_fsnotify_marks;
696 #endif
697
698 #if IS_ENABLED(CONFIG_FS_ENCRYPTION)
699 struct fscrypt_info *i_crypt_info;
700 #endif
701
702 void *i_private; /* fs or device private pointer */
703 };
704
705 static inline int inode_unhashed(struct inode *inode)
706 {
707 return hlist_unhashed(&inode->i_hash);
708 }
709
710 /*
711 * inode->i_mutex nesting subclasses for the lock validator:
712 *
713 * 0: the object of the current VFS operation
714 * 1: parent
715 * 2: child/target
716 * 3: xattr
717 * 4: second non-directory
718 * 5: second parent (when locking independent directories in rename)
719 *
720 * I_MUTEX_NONDIR2 is for certain operations (such as rename) which lock two
721 * non-directories at once.
722 *
723 * The locking order between these classes is
724 * parent[2] -> child -> grandchild -> normal -> xattr -> second non-directory
725 */
726 enum inode_i_mutex_lock_class
727 {
728 I_MUTEX_NORMAL,
729 I_MUTEX_PARENT,
730 I_MUTEX_CHILD,
731 I_MUTEX_XATTR,
732 I_MUTEX_NONDIR2,
733 I_MUTEX_PARENT2,
734 };
735
736 static inline void inode_lock(struct inode *inode)
737 {
738 down_write(&inode->i_rwsem);
739 }
740
741 static inline void inode_unlock(struct inode *inode)
742 {
743 up_write(&inode->i_rwsem);
744 }
745
746 static inline void inode_lock_shared(struct inode *inode)
747 {
748 down_read(&inode->i_rwsem);
749 }
750
751 static inline void inode_unlock_shared(struct inode *inode)
752 {
753 up_read(&inode->i_rwsem);
754 }
755
756 static inline int inode_trylock(struct inode *inode)
757 {
758 return down_write_trylock(&inode->i_rwsem);
759 }
760
761 static inline int inode_trylock_shared(struct inode *inode)
762 {
763 return down_read_trylock(&inode->i_rwsem);
764 }
765
766 static inline int inode_is_locked(struct inode *inode)
767 {
768 return rwsem_is_locked(&inode->i_rwsem);
769 }
770
771 static inline void inode_lock_nested(struct inode *inode, unsigned subclass)
772 {
773 down_write_nested(&inode->i_rwsem, subclass);
774 }
775
776 void lock_two_nondirectories(struct inode *, struct inode*);
777 void unlock_two_nondirectories(struct inode *, struct inode*);
778
779 /*
780 * NOTE: in a 32bit arch with a preemptable kernel and
781 * an UP compile the i_size_read/write must be atomic
782 * with respect to the local cpu (unlike with preempt disabled),
783 * but they don't need to be atomic with respect to other cpus like in
784 * true SMP (so they need either to either locally disable irq around
785 * the read or for example on x86 they can be still implemented as a
786 * cmpxchg8b without the need of the lock prefix). For SMP compiles
787 * and 64bit archs it makes no difference if preempt is enabled or not.
788 */
789 static inline loff_t i_size_read(const struct inode *inode)
790 {
791 #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
792 loff_t i_size;
793 unsigned int seq;
794
795 do {
796 seq = read_seqcount_begin(&inode->i_size_seqcount);
797 i_size = inode->i_size;
798 } while (read_seqcount_retry(&inode->i_size_seqcount, seq));
799 return i_size;
800 #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
801 loff_t i_size;
802
803 preempt_disable();
804 i_size = inode->i_size;
805 preempt_enable();
806 return i_size;
807 #else
808 return inode->i_size;
809 #endif
810 }
811
812 /*
813 * NOTE: unlike i_size_read(), i_size_write() does need locking around it
814 * (normally i_mutex), otherwise on 32bit/SMP an update of i_size_seqcount
815 * can be lost, resulting in subsequent i_size_read() calls spinning forever.
816 */
817 static inline void i_size_write(struct inode *inode, loff_t i_size)
818 {
819 #if BITS_PER_LONG==32 && defined(CONFIG_SMP)
820 preempt_disable();
821 write_seqcount_begin(&inode->i_size_seqcount);
822 inode->i_size = i_size;
823 write_seqcount_end(&inode->i_size_seqcount);
824 preempt_enable();
825 #elif BITS_PER_LONG==32 && defined(CONFIG_PREEMPT)
826 preempt_disable();
827 inode->i_size = i_size;
828 preempt_enable();
829 #else
830 inode->i_size = i_size;
831 #endif
832 }
833
834 /* Helper functions so that in most cases filesystems will
835 * not need to deal directly with kuid_t and kgid_t and can
836 * instead deal with the raw numeric values that are stored
837 * in the filesystem.
838 */
839 static inline uid_t i_uid_read(const struct inode *inode)
840 {
841 return from_kuid(&init_user_ns, inode->i_uid);
842 }
843
844 static inline gid_t i_gid_read(const struct inode *inode)
845 {
846 return from_kgid(&init_user_ns, inode->i_gid);
847 }
848
849 static inline void i_uid_write(struct inode *inode, uid_t uid)
850 {
851 inode->i_uid = make_kuid(&init_user_ns, uid);
852 }
853
854 static inline void i_gid_write(struct inode *inode, gid_t gid)
855 {
856 inode->i_gid = make_kgid(&init_user_ns, gid);
857 }
858
859 static inline unsigned iminor(const struct inode *inode)
860 {
861 return MINOR(inode->i_rdev);
862 }
863
864 static inline unsigned imajor(const struct inode *inode)
865 {
866 return MAJOR(inode->i_rdev);
867 }
868
869 extern struct block_device *I_BDEV(struct inode *inode);
870
871 struct fown_struct {
872 rwlock_t lock; /* protects pid, uid, euid fields */
873 struct pid *pid; /* pid or -pgrp where SIGIO should be sent */
874 enum pid_type pid_type; /* Kind of process group SIGIO should be sent to */
875 kuid_t uid, euid; /* uid/euid of process setting the owner */
876 int signum; /* posix.1b rt signal to be delivered on IO */
877 };
878
879 /*
880 * Track a single file's readahead state
881 */
882 struct file_ra_state {
883 pgoff_t start; /* where readahead started */
884 unsigned int size; /* # of readahead pages */
885 unsigned int async_size; /* do asynchronous readahead when
886 there are only # of pages ahead */
887
888 unsigned int ra_pages; /* Maximum readahead window */
889 unsigned int mmap_miss; /* Cache miss stat for mmap accesses */
890 loff_t prev_pos; /* Cache last read() position */
891 };
892
893 /*
894 * Check if @index falls in the readahead windows.
895 */
896 static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
897 {
898 return (index >= ra->start &&
899 index < ra->start + ra->size);
900 }
901
902 struct file {
903 union {
904 struct llist_node fu_llist;
905 struct rcu_head fu_rcuhead;
906 } f_u;
907 struct path f_path;
908 struct inode *f_inode; /* cached value */
909 const struct file_operations *f_op;
910
911 /*
912 * Protects f_ep_links, f_flags.
913 * Must not be taken from IRQ context.
914 */
915 spinlock_t f_lock;
916 atomic_long_t f_count;
917 unsigned int f_flags;
918 fmode_t f_mode;
919 struct mutex f_pos_lock;
920 loff_t f_pos;
921 struct fown_struct f_owner;
922 const struct cred *f_cred;
923 struct file_ra_state f_ra;
924
925 u64 f_version;
926 #ifdef CONFIG_SECURITY
927 void *f_security;
928 #endif
929 /* needed for tty driver, and maybe others */
930 void *private_data;
931
932 #ifdef CONFIG_EPOLL
933 /* Used by fs/eventpoll.c to link all the hooks to this file */
934 struct list_head f_ep_links;
935 struct list_head f_tfile_llink;
936 #endif /* #ifdef CONFIG_EPOLL */
937 struct address_space *f_mapping;
938 } __attribute__((aligned(4))); /* lest something weird decides that 2 is OK */
939
940 struct file_handle {
941 __u32 handle_bytes;
942 int handle_type;
943 /* file identifier */
944 unsigned char f_handle[0];
945 };
946
947 static inline struct file *get_file(struct file *f)
948 {
949 atomic_long_inc(&f->f_count);
950 return f;
951 }
952 #define get_file_rcu(x) atomic_long_inc_not_zero(&(x)->f_count)
953 #define fput_atomic(x) atomic_long_add_unless(&(x)->f_count, -1, 1)
954 #define file_count(x) atomic_long_read(&(x)->f_count)
955
956 #define MAX_NON_LFS ((1UL<<31) - 1)
957
958 /* Page cache limit. The filesystems should put that into their s_maxbytes
959 limits, otherwise bad things can happen in VM. */
960 #if BITS_PER_LONG==32
961 #define MAX_LFS_FILESIZE (((loff_t)PAGE_SIZE << (BITS_PER_LONG-1))-1)
962 #elif BITS_PER_LONG==64
963 #define MAX_LFS_FILESIZE ((loff_t)0x7fffffffffffffffLL)
964 #endif
965
966 #define FL_POSIX 1
967 #define FL_FLOCK 2
968 #define FL_DELEG 4 /* NFSv4 delegation */
969 #define FL_ACCESS 8 /* not trying to lock, just looking */
970 #define FL_EXISTS 16 /* when unlocking, test for existence */
971 #define FL_LEASE 32 /* lease held on this file */
972 #define FL_CLOSE 64 /* unlock on close */
973 #define FL_SLEEP 128 /* A blocking lock */
974 #define FL_DOWNGRADE_PENDING 256 /* Lease is being downgraded */
975 #define FL_UNLOCK_PENDING 512 /* Lease is being broken */
976 #define FL_OFDLCK 1024 /* lock is "owned" by struct file */
977 #define FL_LAYOUT 2048 /* outstanding pNFS layout */
978
979 /*
980 * Special return value from posix_lock_file() and vfs_lock_file() for
981 * asynchronous locking.
982 */
983 #define FILE_LOCK_DEFERRED 1
984
985 /* legacy typedef, should eventually be removed */
986 typedef void *fl_owner_t;
987
988 struct file_lock;
989
990 struct file_lock_operations {
991 void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
992 void (*fl_release_private)(struct file_lock *);
993 };
994
995 struct lock_manager_operations {
996 int (*lm_compare_owner)(struct file_lock *, struct file_lock *);
997 unsigned long (*lm_owner_key)(struct file_lock *);
998 fl_owner_t (*lm_get_owner)(fl_owner_t);
999 void (*lm_put_owner)(fl_owner_t);
1000 void (*lm_notify)(struct file_lock *); /* unblock callback */
1001 int (*lm_grant)(struct file_lock *, int);
1002 bool (*lm_break)(struct file_lock *);
1003 int (*lm_change)(struct file_lock *, int, struct list_head *);
1004 void (*lm_setup)(struct file_lock *, void **);
1005 };
1006
1007 struct lock_manager {
1008 struct list_head list;
1009 /*
1010 * NFSv4 and up also want opens blocked during the grace period;
1011 * NLM doesn't care:
1012 */
1013 bool block_opens;
1014 };
1015
1016 struct net;
1017 void locks_start_grace(struct net *, struct lock_manager *);
1018 void locks_end_grace(struct lock_manager *);
1019 int locks_in_grace(struct net *);
1020 int opens_in_grace(struct net *);
1021
1022 /* that will die - we need it for nfs_lock_info */
1023 #include <linux/nfs_fs_i.h>
1024
1025 /*
1026 * struct file_lock represents a generic "file lock". It's used to represent
1027 * POSIX byte range locks, BSD (flock) locks, and leases. It's important to
1028 * note that the same struct is used to represent both a request for a lock and
1029 * the lock itself, but the same object is never used for both.
1030 *
1031 * FIXME: should we create a separate "struct lock_request" to help distinguish
1032 * these two uses?
1033 *
1034 * The varous i_flctx lists are ordered by:
1035 *
1036 * 1) lock owner
1037 * 2) lock range start
1038 * 3) lock range end
1039 *
1040 * Obviously, the last two criteria only matter for POSIX locks.
1041 */
1042 struct file_lock {
1043 struct file_lock *fl_next; /* singly linked list for this inode */
1044 struct list_head fl_list; /* link into file_lock_context */
1045 struct hlist_node fl_link; /* node in global lists */
1046 struct list_head fl_block; /* circular list of blocked processes */
1047 fl_owner_t fl_owner;
1048 unsigned int fl_flags;
1049 unsigned char fl_type;
1050 unsigned int fl_pid;
1051 int fl_link_cpu; /* what cpu's list is this on? */
1052 struct pid *fl_nspid;
1053 wait_queue_head_t fl_wait;
1054 struct file *fl_file;
1055 loff_t fl_start;
1056 loff_t fl_end;
1057
1058 struct fasync_struct * fl_fasync; /* for lease break notifications */
1059 /* for lease breaks: */
1060 unsigned long fl_break_time;
1061 unsigned long fl_downgrade_time;
1062
1063 const struct file_lock_operations *fl_ops; /* Callbacks for filesystems */
1064 const struct lock_manager_operations *fl_lmops; /* Callbacks for lockmanagers */
1065 union {
1066 struct nfs_lock_info nfs_fl;
1067 struct nfs4_lock_info nfs4_fl;
1068 struct {
1069 struct list_head link; /* link in AFS vnode's pending_locks list */
1070 int state; /* state of grant or error if -ve */
1071 } afs;
1072 } fl_u;
1073 };
1074
1075 struct file_lock_context {
1076 spinlock_t flc_lock;
1077 struct list_head flc_flock;
1078 struct list_head flc_posix;
1079 struct list_head flc_lease;
1080 };
1081
1082 /* The following constant reflects the upper bound of the file/locking space */
1083 #ifndef OFFSET_MAX
1084 #define INT_LIMIT(x) (~((x)1 << (sizeof(x)*8 - 1)))
1085 #define OFFSET_MAX INT_LIMIT(loff_t)
1086 #define OFFT_OFFSET_MAX INT_LIMIT(off_t)
1087 #endif
1088
1089 #include <linux/fcntl.h>
1090
1091 extern void send_sigio(struct fown_struct *fown, int fd, int band);
1092
1093 #ifdef CONFIG_FILE_LOCKING
1094 extern int fcntl_getlk(struct file *, unsigned int, struct flock __user *);
1095 extern int fcntl_setlk(unsigned int, struct file *, unsigned int,
1096 struct flock __user *);
1097
1098 #if BITS_PER_LONG == 32
1099 extern int fcntl_getlk64(struct file *, unsigned int, struct flock64 __user *);
1100 extern int fcntl_setlk64(unsigned int, struct file *, unsigned int,
1101 struct flock64 __user *);
1102 #endif
1103
1104 extern int fcntl_setlease(unsigned int fd, struct file *filp, long arg);
1105 extern int fcntl_getlease(struct file *filp);
1106
1107 /* fs/locks.c */
1108 void locks_free_lock_context(struct inode *inode);
1109 void locks_free_lock(struct file_lock *fl);
1110 extern void locks_init_lock(struct file_lock *);
1111 extern struct file_lock * locks_alloc_lock(void);
1112 extern void locks_copy_lock(struct file_lock *, struct file_lock *);
1113 extern void locks_copy_conflock(struct file_lock *, struct file_lock *);
1114 extern void locks_remove_posix(struct file *, fl_owner_t);
1115 extern void locks_remove_file(struct file *);
1116 extern void locks_release_private(struct file_lock *);
1117 extern void posix_test_lock(struct file *, struct file_lock *);
1118 extern int posix_lock_file(struct file *, struct file_lock *, struct file_lock *);
1119 extern int posix_unblock_lock(struct file_lock *);
1120 extern int vfs_test_lock(struct file *, struct file_lock *);
1121 extern int vfs_lock_file(struct file *, unsigned int, struct file_lock *, struct file_lock *);
1122 extern int vfs_cancel_lock(struct file *filp, struct file_lock *fl);
1123 extern int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl);
1124 extern int __break_lease(struct inode *inode, unsigned int flags, unsigned int type);
1125 extern void lease_get_mtime(struct inode *, struct timespec *time);
1126 extern int generic_setlease(struct file *, long, struct file_lock **, void **priv);
1127 extern int vfs_setlease(struct file *, long, struct file_lock **, void **);
1128 extern int lease_modify(struct file_lock *, int, struct list_head *);
1129 struct files_struct;
1130 extern void show_fd_locks(struct seq_file *f,
1131 struct file *filp, struct files_struct *files);
1132 #else /* !CONFIG_FILE_LOCKING */
1133 static inline int fcntl_getlk(struct file *file, unsigned int cmd,
1134 struct flock __user *user)
1135 {
1136 return -EINVAL;
1137 }
1138
1139 static inline int fcntl_setlk(unsigned int fd, struct file *file,
1140 unsigned int cmd, struct flock __user *user)
1141 {
1142 return -EACCES;
1143 }
1144
1145 #if BITS_PER_LONG == 32
1146 static inline int fcntl_getlk64(struct file *file, unsigned int cmd,
1147 struct flock64 __user *user)
1148 {
1149 return -EINVAL;
1150 }
1151
1152 static inline int fcntl_setlk64(unsigned int fd, struct file *file,
1153 unsigned int cmd, struct flock64 __user *user)
1154 {
1155 return -EACCES;
1156 }
1157 #endif
1158 static inline int fcntl_setlease(unsigned int fd, struct file *filp, long arg)
1159 {
1160 return -EINVAL;
1161 }
1162
1163 static inline int fcntl_getlease(struct file *filp)
1164 {
1165 return F_UNLCK;
1166 }
1167
1168 static inline void
1169 locks_free_lock_context(struct inode *inode)
1170 {
1171 }
1172
1173 static inline void locks_init_lock(struct file_lock *fl)
1174 {
1175 return;
1176 }
1177
1178 static inline void locks_copy_conflock(struct file_lock *new, struct file_lock *fl)
1179 {
1180 return;
1181 }
1182
1183 static inline void locks_copy_lock(struct file_lock *new, struct file_lock *fl)
1184 {
1185 return;
1186 }
1187
1188 static inline void locks_remove_posix(struct file *filp, fl_owner_t owner)
1189 {
1190 return;
1191 }
1192
1193 static inline void locks_remove_file(struct file *filp)
1194 {
1195 return;
1196 }
1197
1198 static inline void posix_test_lock(struct file *filp, struct file_lock *fl)
1199 {
1200 return;
1201 }
1202
1203 static inline int posix_lock_file(struct file *filp, struct file_lock *fl,
1204 struct file_lock *conflock)
1205 {
1206 return -ENOLCK;
1207 }
1208
1209 static inline int posix_unblock_lock(struct file_lock *waiter)
1210 {
1211 return -ENOENT;
1212 }
1213
1214 static inline int vfs_test_lock(struct file *filp, struct file_lock *fl)
1215 {
1216 return 0;
1217 }
1218
1219 static inline int vfs_lock_file(struct file *filp, unsigned int cmd,
1220 struct file_lock *fl, struct file_lock *conf)
1221 {
1222 return -ENOLCK;
1223 }
1224
1225 static inline int vfs_cancel_lock(struct file *filp, struct file_lock *fl)
1226 {
1227 return 0;
1228 }
1229
1230 static inline int locks_lock_inode_wait(struct inode *inode, struct file_lock *fl)
1231 {
1232 return -ENOLCK;
1233 }
1234
1235 static inline int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
1236 {
1237 return 0;
1238 }
1239
1240 static inline void lease_get_mtime(struct inode *inode, struct timespec *time)
1241 {
1242 return;
1243 }
1244
1245 static inline int generic_setlease(struct file *filp, long arg,
1246 struct file_lock **flp, void **priv)
1247 {
1248 return -EINVAL;
1249 }
1250
1251 static inline int vfs_setlease(struct file *filp, long arg,
1252 struct file_lock **lease, void **priv)
1253 {
1254 return -EINVAL;
1255 }
1256
1257 static inline int lease_modify(struct file_lock *fl, int arg,
1258 struct list_head *dispose)
1259 {
1260 return -EINVAL;
1261 }
1262
1263 struct files_struct;
1264 static inline void show_fd_locks(struct seq_file *f,
1265 struct file *filp, struct files_struct *files) {}
1266 #endif /* !CONFIG_FILE_LOCKING */
1267
1268 static inline struct inode *file_inode(const struct file *f)
1269 {
1270 return f->f_inode;
1271 }
1272
1273 static inline struct dentry *file_dentry(const struct file *file)
1274 {
1275 struct dentry *dentry = file->f_path.dentry;
1276
1277 if (unlikely(dentry->d_flags & DCACHE_OP_REAL))
1278 return dentry->d_op->d_real(dentry, file_inode(file));
1279 else
1280 return dentry;
1281 }
1282
1283 static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
1284 {
1285 return locks_lock_inode_wait(file_inode(filp), fl);
1286 }
1287
1288 struct fasync_struct {
1289 spinlock_t fa_lock;
1290 int magic;
1291 int fa_fd;
1292 struct fasync_struct *fa_next; /* singly linked list */
1293 struct file *fa_file;
1294 struct rcu_head fa_rcu;
1295 };
1296
1297 #define FASYNC_MAGIC 0x4601
1298
1299 /* SMP safe fasync helpers: */
1300 extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
1301 extern struct fasync_struct *fasync_insert_entry(int, struct file *, struct fasync_struct **, struct fasync_struct *);
1302 extern int fasync_remove_entry(struct file *, struct fasync_struct **);
1303 extern struct fasync_struct *fasync_alloc(void);
1304 extern void fasync_free(struct fasync_struct *);
1305
1306 /* can be called from interrupts */
1307 extern void kill_fasync(struct fasync_struct **, int, int);
1308
1309 extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
1310 extern void f_setown(struct file *filp, unsigned long arg, int force);
1311 extern void f_delown(struct file *filp);
1312 extern pid_t f_getown(struct file *filp);
1313 extern int send_sigurg(struct fown_struct *fown);
1314
1315 struct mm_struct;
1316
1317 /*
1318 * Umount options
1319 */
1320
1321 #define MNT_FORCE 0x00000001 /* Attempt to forcibily umount */
1322 #define MNT_DETACH 0x00000002 /* Just detach from the tree */
1323 #define MNT_EXPIRE 0x00000004 /* Mark for expiry */
1324 #define UMOUNT_NOFOLLOW 0x00000008 /* Don't follow symlink on umount */
1325 #define UMOUNT_UNUSED 0x80000000 /* Flag guaranteed to be unused */
1326
1327 /* sb->s_iflags */
1328 #define SB_I_CGROUPWB 0x00000001 /* cgroup-aware writeback enabled */
1329 #define SB_I_NOEXEC 0x00000002 /* Ignore executables on this fs */
1330
1331 /* Possible states of 'frozen' field */
1332 enum {
1333 SB_UNFROZEN = 0, /* FS is unfrozen */
1334 SB_FREEZE_WRITE = 1, /* Writes, dir ops, ioctls frozen */
1335 SB_FREEZE_PAGEFAULT = 2, /* Page faults stopped as well */
1336 SB_FREEZE_FS = 3, /* For internal FS use (e.g. to stop
1337 * internal threads if needed) */
1338 SB_FREEZE_COMPLETE = 4, /* ->freeze_fs finished successfully */
1339 };
1340
1341 #define SB_FREEZE_LEVELS (SB_FREEZE_COMPLETE - 1)
1342
1343 struct sb_writers {
1344 int frozen; /* Is sb frozen? */
1345 wait_queue_head_t wait_unfrozen; /* for get_super_thawed() */
1346 struct percpu_rw_semaphore rw_sem[SB_FREEZE_LEVELS];
1347 };
1348
1349 struct super_block {
1350 struct list_head s_list; /* Keep this first */
1351 dev_t s_dev; /* search index; _not_ kdev_t */
1352 unsigned char s_blocksize_bits;
1353 unsigned long s_blocksize;
1354 loff_t s_maxbytes; /* Max file size */
1355 struct file_system_type *s_type;
1356 const struct super_operations *s_op;
1357 const struct dquot_operations *dq_op;
1358 const struct quotactl_ops *s_qcop;
1359 const struct export_operations *s_export_op;
1360 unsigned long s_flags;
1361 unsigned long s_iflags; /* internal SB_I_* flags */
1362 unsigned long s_magic;
1363 struct dentry *s_root;
1364 struct rw_semaphore s_umount;
1365 int s_count;
1366 atomic_t s_active;
1367 #ifdef CONFIG_SECURITY
1368 void *s_security;
1369 #endif
1370 const struct xattr_handler **s_xattr;
1371
1372 const struct fscrypt_operations *s_cop;
1373
1374 struct hlist_bl_head s_anon; /* anonymous dentries for (nfs) exporting */
1375 struct list_head s_mounts; /* list of mounts; _not_ for fs use */
1376 struct block_device *s_bdev;
1377 struct backing_dev_info *s_bdi;
1378 struct mtd_info *s_mtd;
1379 struct hlist_node s_instances;
1380 unsigned int s_quota_types; /* Bitmask of supported quota types */
1381 struct quota_info s_dquot; /* Diskquota specific options */
1382
1383 struct sb_writers s_writers;
1384
1385 char s_id[32]; /* Informational name */
1386 u8 s_uuid[16]; /* UUID */
1387
1388 void *s_fs_info; /* Filesystem private info */
1389 unsigned int s_max_links;
1390 fmode_t s_mode;
1391
1392 /* Granularity of c/m/atime in ns.
1393 Cannot be worse than a second */
1394 u32 s_time_gran;
1395
1396 /*
1397 * The next field is for VFS *only*. No filesystems have any business
1398 * even looking at it. You had been warned.
1399 */
1400 struct mutex s_vfs_rename_mutex; /* Kludge */
1401
1402 /*
1403 * Filesystem subtype. If non-empty the filesystem type field
1404 * in /proc/mounts will be "type.subtype"
1405 */
1406 char *s_subtype;
1407
1408 /*
1409 * Saved mount options for lazy filesystems using
1410 * generic_show_options()
1411 */
1412 char __rcu *s_options;
1413 const struct dentry_operations *s_d_op; /* default d_op for dentries */
1414
1415 /*
1416 * Saved pool identifier for cleancache (-1 means none)
1417 */
1418 int cleancache_poolid;
1419
1420 struct shrinker s_shrink; /* per-sb shrinker handle */
1421
1422 /* Number of inodes with nlink == 0 but still referenced */
1423 atomic_long_t s_remove_count;
1424
1425 /* Being remounted read-only */
1426 int s_readonly_remount;
1427
1428 /* AIO completions deferred from interrupt context */
1429 struct workqueue_struct *s_dio_done_wq;
1430 struct hlist_head s_pins;
1431
1432 /*
1433 * Keep the lru lists last in the structure so they always sit on their
1434 * own individual cachelines.
1435 */
1436 struct list_lru s_dentry_lru ____cacheline_aligned_in_smp;
1437 struct list_lru s_inode_lru ____cacheline_aligned_in_smp;
1438 struct rcu_head rcu;
1439 struct work_struct destroy_work;
1440
1441 struct mutex s_sync_lock; /* sync serialisation lock */
1442
1443 /*
1444 * Indicates how deep in a filesystem stack this SB is
1445 */
1446 int s_stack_depth;
1447
1448 /* s_inode_list_lock protects s_inodes */
1449 spinlock_t s_inode_list_lock ____cacheline_aligned_in_smp;
1450 struct list_head s_inodes; /* all inodes */
1451 };
1452
1453 extern struct timespec current_fs_time(struct super_block *sb);
1454
1455 /*
1456 * Snapshotting support.
1457 */
1458
1459 void __sb_end_write(struct super_block *sb, int level);
1460 int __sb_start_write(struct super_block *sb, int level, bool wait);
1461
1462 #define __sb_writers_acquired(sb, lev) \
1463 percpu_rwsem_acquire(&(sb)->s_writers.rw_sem[(lev)-1], 1, _THIS_IP_)
1464 #define __sb_writers_release(sb, lev) \
1465 percpu_rwsem_release(&(sb)->s_writers.rw_sem[(lev)-1], 1, _THIS_IP_)
1466
1467 /**
1468 * sb_end_write - drop write access to a superblock
1469 * @sb: the super we wrote to
1470 *
1471 * Decrement number of writers to the filesystem. Wake up possible waiters
1472 * wanting to freeze the filesystem.
1473 */
1474 static inline void sb_end_write(struct super_block *sb)
1475 {
1476 __sb_end_write(sb, SB_FREEZE_WRITE);
1477 }
1478
1479 /**
1480 * sb_end_pagefault - drop write access to a superblock from a page fault
1481 * @sb: the super we wrote to
1482 *
1483 * Decrement number of processes handling write page fault to the filesystem.
1484 * Wake up possible waiters wanting to freeze the filesystem.
1485 */
1486 static inline void sb_end_pagefault(struct super_block *sb)
1487 {
1488 __sb_end_write(sb, SB_FREEZE_PAGEFAULT);
1489 }
1490
1491 /**
1492 * sb_end_intwrite - drop write access to a superblock for internal fs purposes
1493 * @sb: the super we wrote to
1494 *
1495 * Decrement fs-internal number of writers to the filesystem. Wake up possible
1496 * waiters wanting to freeze the filesystem.
1497 */
1498 static inline void sb_end_intwrite(struct super_block *sb)
1499 {
1500 __sb_end_write(sb, SB_FREEZE_FS);
1501 }
1502
1503 /**
1504 * sb_start_write - get write access to a superblock
1505 * @sb: the super we write to
1506 *
1507 * When a process wants to write data or metadata to a file system (i.e. dirty
1508 * a page or an inode), it should embed the operation in a sb_start_write() -
1509 * sb_end_write() pair to get exclusion against file system freezing. This
1510 * function increments number of writers preventing freezing. If the file
1511 * system is already frozen, the function waits until the file system is
1512 * thawed.
1513 *
1514 * Since freeze protection behaves as a lock, users have to preserve
1515 * ordering of freeze protection and other filesystem locks. Generally,
1516 * freeze protection should be the outermost lock. In particular, we have:
1517 *
1518 * sb_start_write
1519 * -> i_mutex (write path, truncate, directory ops, ...)
1520 * -> s_umount (freeze_super, thaw_super)
1521 */
1522 static inline void sb_start_write(struct super_block *sb)
1523 {
1524 __sb_start_write(sb, SB_FREEZE_WRITE, true);
1525 }
1526
1527 static inline int sb_start_write_trylock(struct super_block *sb)
1528 {
1529 return __sb_start_write(sb, SB_FREEZE_WRITE, false);
1530 }
1531
1532 /**
1533 * sb_start_pagefault - get write access to a superblock from a page fault
1534 * @sb: the super we write to
1535 *
1536 * When a process starts handling write page fault, it should embed the
1537 * operation into sb_start_pagefault() - sb_end_pagefault() pair to get
1538 * exclusion against file system freezing. This is needed since the page fault
1539 * is going to dirty a page. This function increments number of running page
1540 * faults preventing freezing. If the file system is already frozen, the
1541 * function waits until the file system is thawed.
1542 *
1543 * Since page fault freeze protection behaves as a lock, users have to preserve
1544 * ordering of freeze protection and other filesystem locks. It is advised to
1545 * put sb_start_pagefault() close to mmap_sem in lock ordering. Page fault
1546 * handling code implies lock dependency:
1547 *
1548 * mmap_sem
1549 * -> sb_start_pagefault
1550 */
1551 static inline void sb_start_pagefault(struct super_block *sb)
1552 {
1553 __sb_start_write(sb, SB_FREEZE_PAGEFAULT, true);
1554 }
1555
1556 /*
1557 * sb_start_intwrite - get write access to a superblock for internal fs purposes
1558 * @sb: the super we write to
1559 *
1560 * This is the third level of protection against filesystem freezing. It is
1561 * free for use by a filesystem. The only requirement is that it must rank
1562 * below sb_start_pagefault.
1563 *
1564 * For example filesystem can call sb_start_intwrite() when starting a
1565 * transaction which somewhat eases handling of freezing for internal sources
1566 * of filesystem changes (internal fs threads, discarding preallocation on file
1567 * close, etc.).
1568 */
1569 static inline void sb_start_intwrite(struct super_block *sb)
1570 {
1571 __sb_start_write(sb, SB_FREEZE_FS, true);
1572 }
1573
1574
1575 extern bool inode_owner_or_capable(const struct inode *inode);
1576
1577 /*
1578 * VFS helper functions..
1579 */
1580 extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);
1581 extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);
1582 extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
1583 extern int vfs_symlink(struct inode *, struct dentry *, const char *);
1584 extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
1585 extern int vfs_rmdir(struct inode *, struct dentry *);
1586 extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
1587 extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
1588 extern int vfs_whiteout(struct inode *, struct dentry *);
1589
1590 /*
1591 * VFS file helper functions.
1592 */
1593 extern void inode_init_owner(struct inode *inode, const struct inode *dir,
1594 umode_t mode);
1595 /*
1596 * VFS FS_IOC_FIEMAP helper definitions.
1597 */
1598 struct fiemap_extent_info {
1599 unsigned int fi_flags; /* Flags as passed from user */
1600 unsigned int fi_extents_mapped; /* Number of mapped extents */
1601 unsigned int fi_extents_max; /* Size of fiemap_extent array */
1602 struct fiemap_extent __user *fi_extents_start; /* Start of
1603 fiemap_extent array */
1604 };
1605 int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
1606 u64 phys, u64 len, u32 flags);
1607 int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
1608
1609 /*
1610 * File types
1611 *
1612 * NOTE! These match bits 12..15 of stat.st_mode
1613 * (ie "(i_mode >> 12) & 15").
1614 */
1615 #define DT_UNKNOWN 0
1616 #define DT_FIFO 1
1617 #define DT_CHR 2
1618 #define DT_DIR 4
1619 #define DT_BLK 6
1620 #define DT_REG 8
1621 #define DT_LNK 10
1622 #define DT_SOCK 12
1623 #define DT_WHT 14
1624
1625 /*
1626 * This is the "filldir" function type, used by readdir() to let
1627 * the kernel specify what kind of dirent layout it wants to have.
1628 * This allows the kernel to read directories into kernel space or
1629 * to have different dirent layouts depending on the binary type.
1630 */
1631 struct dir_context;
1632 typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64,
1633 unsigned);
1634
1635 struct dir_context {
1636 const filldir_t actor;
1637 loff_t pos;
1638 };
1639
1640 struct block_device_operations;
1641
1642 /* These macros are for out of kernel modules to test that
1643 * the kernel supports the unlocked_ioctl and compat_ioctl
1644 * fields in struct file_operations. */
1645 #define HAVE_COMPAT_IOCTL 1
1646 #define HAVE_UNLOCKED_IOCTL 1
1647
1648 /*
1649 * These flags let !MMU mmap() govern direct device mapping vs immediate
1650 * copying more easily for MAP_PRIVATE, especially for ROM filesystems.
1651 *
1652 * NOMMU_MAP_COPY: Copy can be mapped (MAP_PRIVATE)
1653 * NOMMU_MAP_DIRECT: Can be mapped directly (MAP_SHARED)
1654 * NOMMU_MAP_READ: Can be mapped for reading
1655 * NOMMU_MAP_WRITE: Can be mapped for writing
1656 * NOMMU_MAP_EXEC: Can be mapped for execution
1657 */
1658 #define NOMMU_MAP_COPY 0x00000001
1659 #define NOMMU_MAP_DIRECT 0x00000008
1660 #define NOMMU_MAP_READ VM_MAYREAD
1661 #define NOMMU_MAP_WRITE VM_MAYWRITE
1662 #define NOMMU_MAP_EXEC VM_MAYEXEC
1663
1664 #define NOMMU_VMFLAGS \
1665 (NOMMU_MAP_READ | NOMMU_MAP_WRITE | NOMMU_MAP_EXEC)
1666
1667
1668 struct iov_iter;
1669
1670 struct file_operations {
1671 struct module *owner;
1672 loff_t (*llseek) (struct file *, loff_t, int);
1673 ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
1674 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
1675 ssize_t (*read_iter) (struct kiocb *, struct iov_iter *);
1676 ssize_t (*write_iter) (struct kiocb *, struct iov_iter *);
1677 int (*iterate) (struct file *, struct dir_context *);
1678 int (*iterate_shared) (struct file *, struct dir_context *);
1679 unsigned int (*poll) (struct file *, struct poll_table_struct *);
1680 long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
1681 long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
1682 int (*mmap) (struct file *, struct vm_area_struct *);
1683 int (*open) (struct inode *, struct file *);
1684 int (*flush) (struct file *, fl_owner_t id);
1685 int (*release) (struct inode *, struct file *);
1686 int (*fsync) (struct file *, loff_t, loff_t, int datasync);
1687 int (*aio_fsync) (struct kiocb *, int datasync);
1688 int (*fasync) (int, struct file *, int);
1689 int (*lock) (struct file *, int, struct file_lock *);
1690 ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
1691 unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1692 int (*check_flags)(int);
1693 int (*flock) (struct file *, int, struct file_lock *);
1694 ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
1695 ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
1696 int (*setlease)(struct file *, long, struct file_lock **, void **);
1697 long (*fallocate)(struct file *file, int mode, loff_t offset,
1698 loff_t len);
1699 void (*show_fdinfo)(struct seq_file *m, struct file *f);
1700 #ifndef CONFIG_MMU
1701 unsigned (*mmap_capabilities)(struct file *);
1702 #endif
1703 ssize_t (*copy_file_range)(struct file *, loff_t, struct file *,
1704 loff_t, size_t, unsigned int);
1705 int (*clone_file_range)(struct file *, loff_t, struct file *, loff_t,
1706 u64);
1707 ssize_t (*dedupe_file_range)(struct file *, u64, u64, struct file *,
1708 u64);
1709 };
1710
1711 struct inode_operations {
1712 struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
1713 const char * (*get_link) (struct dentry *, struct inode *, struct delayed_call *);
1714 int (*permission) (struct inode *, int);
1715 struct posix_acl * (*get_acl)(struct inode *, int);
1716
1717 int (*readlink) (struct dentry *, char __user *,int);
1718
1719 int (*create) (struct inode *,struct dentry *, umode_t, bool);
1720 int (*link) (struct dentry *,struct inode *,struct dentry *);
1721 int (*unlink) (struct inode *,struct dentry *);
1722 int (*symlink) (struct inode *,struct dentry *,const char *);
1723 int (*mkdir) (struct inode *,struct dentry *,umode_t);
1724 int (*rmdir) (struct inode *,struct dentry *);
1725 int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
1726 int (*rename) (struct inode *, struct dentry *,
1727 struct inode *, struct dentry *);
1728 int (*rename2) (struct inode *, struct dentry *,
1729 struct inode *, struct dentry *, unsigned int);
1730 int (*setattr) (struct dentry *, struct iattr *);
1731 int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
1732 int (*setxattr) (struct dentry *, struct inode *,
1733 const char *, const void *, size_t, int);
1734 ssize_t (*getxattr) (struct dentry *, struct inode *,
1735 const char *, void *, size_t);
1736 ssize_t (*listxattr) (struct dentry *, char *, size_t);
1737 int (*removexattr) (struct dentry *, const char *);
1738 int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
1739 u64 len);
1740 int (*update_time)(struct inode *, struct timespec *, int);
1741 int (*atomic_open)(struct inode *, struct dentry *,
1742 struct file *, unsigned open_flag,
1743 umode_t create_mode, int *opened);
1744 int (*tmpfile) (struct inode *, struct dentry *, umode_t);
1745 int (*set_acl)(struct inode *, struct posix_acl *, int);
1746 } ____cacheline_aligned;
1747
1748 ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
1749 unsigned long nr_segs, unsigned long fast_segs,
1750 struct iovec *fast_pointer,
1751 struct iovec **ret_pointer);
1752
1753 extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
1754 extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
1755 extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
1756 extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
1757 extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
1758 unsigned long, loff_t *, int);
1759 extern ssize_t vfs_writev(struct file *, const struct iovec __user *,
1760 unsigned long, loff_t *, int);
1761 extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *,
1762 loff_t, size_t, unsigned int);
1763 extern int vfs_clone_file_range(struct file *file_in, loff_t pos_in,
1764 struct file *file_out, loff_t pos_out, u64 len);
1765 extern int vfs_dedupe_file_range(struct file *file,
1766 struct file_dedupe_range *same);
1767
1768 struct super_operations {
1769 struct inode *(*alloc_inode)(struct super_block *sb);
1770 void (*destroy_inode)(struct inode *);
1771
1772 void (*dirty_inode) (struct inode *, int flags);
1773 int (*write_inode) (struct inode *, struct writeback_control *wbc);
1774 int (*drop_inode) (struct inode *);
1775 void (*evict_inode) (struct inode *);
1776 void (*put_super) (struct super_block *);
1777 int (*sync_fs)(struct super_block *sb, int wait);
1778 int (*freeze_super) (struct super_block *);
1779 int (*freeze_fs) (struct super_block *);
1780 int (*thaw_super) (struct super_block *);
1781 int (*unfreeze_fs) (struct super_block *);
1782 int (*statfs) (struct dentry *, struct kstatfs *);
1783 int (*remount_fs) (struct super_block *, int *, char *);
1784 void (*umount_begin) (struct super_block *);
1785
1786 int (*show_options)(struct seq_file *, struct dentry *);
1787 int (*show_devname)(struct seq_file *, struct dentry *);
1788 int (*show_path)(struct seq_file *, struct dentry *);
1789 int (*show_stats)(struct seq_file *, struct dentry *);
1790 #ifdef CONFIG_QUOTA
1791 ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
1792 ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
1793 struct dquot **(*get_dquots)(struct inode *);
1794 #endif
1795 int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
1796 long (*nr_cached_objects)(struct super_block *,
1797 struct shrink_control *);
1798 long (*free_cached_objects)(struct super_block *,
1799 struct shrink_control *);
1800 };
1801
1802 /*
1803 * Inode flags - they have no relation to superblock flags now
1804 */
1805 #define S_SYNC 1 /* Writes are synced at once */
1806 #define S_NOATIME 2 /* Do not update access times */
1807 #define S_APPEND 4 /* Append-only file */
1808 #define S_IMMUTABLE 8 /* Immutable file */
1809 #define S_DEAD 16 /* removed, but still open directory */
1810 #define S_NOQUOTA 32 /* Inode is not counted to quota */
1811 #define S_DIRSYNC 64 /* Directory modifications are synchronous */
1812 #define S_NOCMTIME 128 /* Do not update file c/mtime */
1813 #define S_SWAPFILE 256 /* Do not truncate: swapon got its bmaps */
1814 #define S_PRIVATE 512 /* Inode is fs-internal */
1815 #define S_IMA 1024 /* Inode has an associated IMA struct */
1816 #define S_AUTOMOUNT 2048 /* Automount/referral quasi-directory */
1817 #define S_NOSEC 4096 /* no suid or xattr security attributes */
1818 #ifdef CONFIG_FS_DAX
1819 #define S_DAX 8192 /* Direct Access, avoiding the page cache */
1820 #else
1821 #define S_DAX 0 /* Make all the DAX code disappear */
1822 #endif
1823
1824 /*
1825 * Note that nosuid etc flags are inode-specific: setting some file-system
1826 * flags just means all the inodes inherit those flags by default. It might be
1827 * possible to override it selectively if you really wanted to with some
1828 * ioctl() that is not currently implemented.
1829 *
1830 * Exception: MS_RDONLY is always applied to the entire file system.
1831 *
1832 * Unfortunately, it is possible to change a filesystems flags with it mounted
1833 * with files in use. This means that all of the inodes will not have their
1834 * i_flags updated. Hence, i_flags no longer inherit the superblock mount
1835 * flags, so these have to be checked separately. -- rmk@arm.uk.linux.org
1836 */
1837 #define __IS_FLG(inode, flg) ((inode)->i_sb->s_flags & (flg))
1838
1839 #define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
1840 #define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || \
1841 ((inode)->i_flags & S_SYNC))
1842 #define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
1843 ((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
1844 #define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
1845 #define IS_NOATIME(inode) __IS_FLG(inode, MS_RDONLY|MS_NOATIME)
1846 #define IS_I_VERSION(inode) __IS_FLG(inode, MS_I_VERSION)
1847
1848 #define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
1849 #define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
1850 #define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
1851 #define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
1852
1853 #define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
1854 #define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME)
1855 #define IS_SWAPFILE(inode) ((inode)->i_flags & S_SWAPFILE)
1856 #define IS_PRIVATE(inode) ((inode)->i_flags & S_PRIVATE)
1857 #define IS_IMA(inode) ((inode)->i_flags & S_IMA)
1858 #define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT)
1859 #define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC)
1860 #define IS_DAX(inode) ((inode)->i_flags & S_DAX)
1861
1862 #define IS_WHITEOUT(inode) (S_ISCHR(inode->i_mode) && \
1863 (inode)->i_rdev == WHITEOUT_DEV)
1864
1865 /*
1866 * Inode state bits. Protected by inode->i_lock
1867 *
1868 * Three bits determine the dirty state of the inode, I_DIRTY_SYNC,
1869 * I_DIRTY_DATASYNC and I_DIRTY_PAGES.
1870 *
1871 * Four bits define the lifetime of an inode. Initially, inodes are I_NEW,
1872 * until that flag is cleared. I_WILL_FREE, I_FREEING and I_CLEAR are set at
1873 * various stages of removing an inode.
1874 *
1875 * Two bits are used for locking and completion notification, I_NEW and I_SYNC.
1876 *
1877 * I_DIRTY_SYNC Inode is dirty, but doesn't have to be written on
1878 * fdatasync(). i_atime is the usual cause.
1879 * I_DIRTY_DATASYNC Data-related inode changes pending. We keep track of
1880 * these changes separately from I_DIRTY_SYNC so that we
1881 * don't have to write inode on fdatasync() when only
1882 * mtime has changed in it.
1883 * I_DIRTY_PAGES Inode has dirty pages. Inode itself may be clean.
1884 * I_NEW Serves as both a mutex and completion notification.
1885 * New inodes set I_NEW. If two processes both create
1886 * the same inode, one of them will release its inode and
1887 * wait for I_NEW to be released before returning.
1888 * Inodes in I_WILL_FREE, I_FREEING or I_CLEAR state can
1889 * also cause waiting on I_NEW, without I_NEW actually
1890 * being set. find_inode() uses this to prevent returning
1891 * nearly-dead inodes.
1892 * I_WILL_FREE Must be set when calling write_inode_now() if i_count
1893 * is zero. I_FREEING must be set when I_WILL_FREE is
1894 * cleared.
1895 * I_FREEING Set when inode is about to be freed but still has dirty
1896 * pages or buffers attached or the inode itself is still
1897 * dirty.
1898 * I_CLEAR Added by clear_inode(). In this state the inode is
1899 * clean and can be destroyed. Inode keeps I_FREEING.
1900 *
1901 * Inodes that are I_WILL_FREE, I_FREEING or I_CLEAR are
1902 * prohibited for many purposes. iget() must wait for
1903 * the inode to be completely released, then create it
1904 * anew. Other functions will just ignore such inodes,
1905 * if appropriate. I_NEW is used for waiting.
1906 *
1907 * I_SYNC Writeback of inode is running. The bit is set during
1908 * data writeback, and cleared with a wakeup on the bit
1909 * address once it is done. The bit is also used to pin
1910 * the inode in memory for flusher thread.
1911 *
1912 * I_REFERENCED Marks the inode as recently references on the LRU list.
1913 *
1914 * I_DIO_WAKEUP Never set. Only used as a key for wait_on_bit().
1915 *
1916 * I_WB_SWITCH Cgroup bdi_writeback switching in progress. Used to
1917 * synchronize competing switching instances and to tell
1918 * wb stat updates to grab mapping->tree_lock. See
1919 * inode_switch_wb_work_fn() for details.
1920 *
1921 * Q: What is the difference between I_WILL_FREE and I_FREEING?
1922 */
1923 #define I_DIRTY_SYNC (1 << 0)
1924 #define I_DIRTY_DATASYNC (1 << 1)
1925 #define I_DIRTY_PAGES (1 << 2)
1926 #define __I_NEW 3
1927 #define I_NEW (1 << __I_NEW)
1928 #define I_WILL_FREE (1 << 4)
1929 #define I_FREEING (1 << 5)
1930 #define I_CLEAR (1 << 6)
1931 #define __I_SYNC 7
1932 #define I_SYNC (1 << __I_SYNC)
1933 #define I_REFERENCED (1 << 8)
1934 #define __I_DIO_WAKEUP 9
1935 #define I_DIO_WAKEUP (1 << __I_DIO_WAKEUP)
1936 #define I_LINKABLE (1 << 10)
1937 #define I_DIRTY_TIME (1 << 11)
1938 #define __I_DIRTY_TIME_EXPIRED 12
1939 #define I_DIRTY_TIME_EXPIRED (1 << __I_DIRTY_TIME_EXPIRED)
1940 #define I_WB_SWITCH (1 << 13)
1941
1942 #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
1943 #define I_DIRTY_ALL (I_DIRTY | I_DIRTY_TIME)
1944
1945 extern void __mark_inode_dirty(struct inode *, int);
1946 static inline void mark_inode_dirty(struct inode *inode)
1947 {
1948 __mark_inode_dirty(inode, I_DIRTY);
1949 }
1950
1951 static inline void mark_inode_dirty_sync(struct inode *inode)
1952 {
1953 __mark_inode_dirty(inode, I_DIRTY_SYNC);
1954 }
1955
1956 extern void inc_nlink(struct inode *inode);
1957 extern void drop_nlink(struct inode *inode);
1958 extern void clear_nlink(struct inode *inode);
1959 extern void set_nlink(struct inode *inode, unsigned int nlink);
1960
1961 static inline void inode_inc_link_count(struct inode *inode)
1962 {
1963 inc_nlink(inode);
1964 mark_inode_dirty(inode);
1965 }
1966
1967 static inline void inode_dec_link_count(struct inode *inode)
1968 {
1969 drop_nlink(inode);
1970 mark_inode_dirty(inode);
1971 }
1972
1973 /**
1974 * inode_inc_iversion - increments i_version
1975 * @inode: inode that need to be updated
1976 *
1977 * Every time the inode is modified, the i_version field will be incremented.
1978 * The filesystem has to be mounted with i_version flag
1979 */
1980
1981 static inline void inode_inc_iversion(struct inode *inode)
1982 {
1983 spin_lock(&inode->i_lock);
1984 inode->i_version++;
1985 spin_unlock(&inode->i_lock);
1986 }
1987
1988 enum file_time_flags {
1989 S_ATIME = 1,
1990 S_MTIME = 2,
1991 S_CTIME = 4,
1992 S_VERSION = 8,
1993 };
1994
1995 extern bool atime_needs_update(const struct path *, struct inode *);
1996 extern void touch_atime(const struct path *);
1997 static inline void file_accessed(struct file *file)
1998 {
1999 if (!(file->f_flags & O_NOATIME))
2000 touch_atime(&file->f_path);
2001 }
2002
2003 int sync_inode(struct inode *inode, struct writeback_control *wbc);
2004 int sync_inode_metadata(struct inode *inode, int wait);
2005
2006 struct file_system_type {
2007 const char *name;
2008 int fs_flags;
2009 #define FS_REQUIRES_DEV 1
2010 #define FS_BINARY_MOUNTDATA 2
2011 #define FS_HAS_SUBTYPE 4
2012 #define FS_USERNS_MOUNT 8 /* Can be mounted by userns root */
2013 #define FS_USERNS_DEV_MOUNT 16 /* A userns mount does not imply MNT_NODEV */
2014 #define FS_USERNS_VISIBLE 32 /* FS must already be visible */
2015 #define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
2016 struct dentry *(*mount) (struct file_system_type *, int,
2017 const char *, void *);
2018 void (*kill_sb) (struct super_block *);
2019 struct module *owner;
2020 struct file_system_type * next;
2021 struct hlist_head fs_supers;
2022
2023 struct lock_class_key s_lock_key;
2024 struct lock_class_key s_umount_key;
2025 struct lock_class_key s_vfs_rename_key;
2026 struct lock_class_key s_writers_key[SB_FREEZE_LEVELS];
2027
2028 struct lock_class_key i_lock_key;
2029 struct lock_class_key i_mutex_key;
2030 struct lock_class_key i_mutex_dir_key;
2031 };
2032
2033 #define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME)
2034
2035 extern struct dentry *mount_ns(struct file_system_type *fs_type, int flags,
2036 void *data, int (*fill_super)(struct super_block *, void *, int));
2037 extern struct dentry *mount_bdev(struct file_system_type *fs_type,
2038 int flags, const char *dev_name, void *data,
2039 int (*fill_super)(struct super_block *, void *, int));
2040 extern struct dentry *mount_single(struct file_system_type *fs_type,
2041 int flags, void *data,
2042 int (*fill_super)(struct super_block *, void *, int));
2043 extern struct dentry *mount_nodev(struct file_system_type *fs_type,
2044 int flags, void *data,
2045 int (*fill_super)(struct super_block *, void *, int));
2046 extern struct dentry *mount_subtree(struct vfsmount *mnt, const char *path);
2047 void generic_shutdown_super(struct super_block *sb);
2048 void kill_block_super(struct super_block *sb);
2049 void kill_anon_super(struct super_block *sb);
2050 void kill_litter_super(struct super_block *sb);
2051 void deactivate_super(struct super_block *sb);
2052 void deactivate_locked_super(struct super_block *sb);
2053 int set_anon_super(struct super_block *s, void *data);
2054 int get_anon_bdev(dev_t *);
2055 void free_anon_bdev(dev_t);
2056 struct super_block *sget(struct file_system_type *type,
2057 int (*test)(struct super_block *,void *),
2058 int (*set)(struct super_block *,void *),
2059 int flags, void *data);
2060 extern struct dentry *mount_pseudo(struct file_system_type *, char *,
2061 const struct super_operations *ops,
2062 const struct dentry_operations *dops,
2063 unsigned long);
2064
2065 /* Alas, no aliases. Too much hassle with bringing module.h everywhere */
2066 #define fops_get(fops) \
2067 (((fops) && try_module_get((fops)->owner) ? (fops) : NULL))
2068 #define fops_put(fops) \
2069 do { if (fops) module_put((fops)->owner); } while(0)
2070 /*
2071 * This one is to be used *ONLY* from ->open() instances.
2072 * fops must be non-NULL, pinned down *and* module dependencies
2073 * should be sufficient to pin the caller down as well.
2074 */
2075 #define replace_fops(f, fops) \
2076 do { \
2077 struct file *__file = (f); \
2078 fops_put(__file->f_op); \
2079 BUG_ON(!(__file->f_op = (fops))); \
2080 } while(0)
2081
2082 extern int register_filesystem(struct file_system_type *);
2083 extern int unregister_filesystem(struct file_system_type *);
2084 extern struct vfsmount *kern_mount_data(struct file_system_type *, void *data);
2085 #define kern_mount(type) kern_mount_data(type, NULL)
2086 extern void kern_unmount(struct vfsmount *mnt);
2087 extern int may_umount_tree(struct vfsmount *);
2088 extern int may_umount(struct vfsmount *);
2089 extern long do_mount(const char *, const char __user *,
2090 const char *, unsigned long, void *);
2091 extern struct vfsmount *collect_mounts(struct path *);
2092 extern void drop_collected_mounts(struct vfsmount *);
2093 extern int iterate_mounts(int (*)(struct vfsmount *, void *), void *,
2094 struct vfsmount *);
2095 extern int vfs_statfs(struct path *, struct kstatfs *);
2096 extern int user_statfs(const char __user *, struct kstatfs *);
2097 extern int fd_statfs(int, struct kstatfs *);
2098 extern int vfs_ustat(dev_t, struct kstatfs *);
2099 extern int freeze_super(struct super_block *super);
2100 extern int thaw_super(struct super_block *super);
2101 extern bool our_mnt(struct vfsmount *mnt);
2102
2103 extern int current_umask(void);
2104
2105 extern void ihold(struct inode * inode);
2106 extern void iput(struct inode *);
2107 extern int generic_update_time(struct inode *, struct timespec *, int);
2108
2109 /* /sys/fs */
2110 extern struct kobject *fs_kobj;
2111
2112 #define MAX_RW_COUNT (INT_MAX & PAGE_MASK)
2113
2114 #ifdef CONFIG_MANDATORY_FILE_LOCKING
2115 extern int locks_mandatory_locked(struct file *);
2116 extern int locks_mandatory_area(struct inode *, struct file *, loff_t, loff_t, unsigned char);
2117
2118 /*
2119 * Candidates for mandatory locking have the setgid bit set
2120 * but no group execute bit - an otherwise meaningless combination.
2121 */
2122
2123 static inline int __mandatory_lock(struct inode *ino)
2124 {
2125 return (ino->i_mode & (S_ISGID | S_IXGRP)) == S_ISGID;
2126 }
2127
2128 /*
2129 * ... and these candidates should be on MS_MANDLOCK mounted fs,
2130 * otherwise these will be advisory locks
2131 */
2132
2133 static inline int mandatory_lock(struct inode *ino)
2134 {
2135 return IS_MANDLOCK(ino) && __mandatory_lock(ino);
2136 }
2137
2138 static inline int locks_verify_locked(struct file *file)
2139 {
2140 if (mandatory_lock(file_inode(file)))
2141 return locks_mandatory_locked(file);
2142 return 0;
2143 }
2144
2145 static inline int locks_verify_truncate(struct inode *inode,
2146 struct file *f,
2147 loff_t size)
2148 {
2149 if (!inode->i_flctx || !mandatory_lock(inode))
2150 return 0;
2151
2152 if (size < inode->i_size) {
2153 return locks_mandatory_area(inode, f, size, inode->i_size - 1,
2154 F_WRLCK);
2155 } else {
2156 return locks_mandatory_area(inode, f, inode->i_size, size - 1,
2157 F_WRLCK);
2158 }
2159 }
2160
2161 #else /* !CONFIG_MANDATORY_FILE_LOCKING */
2162
2163 static inline int locks_mandatory_locked(struct file *file)
2164 {
2165 return 0;
2166 }
2167
2168 static inline int locks_mandatory_area(struct inode *inode, struct file *filp,
2169 loff_t start, loff_t end, unsigned char type)
2170 {
2171 return 0;
2172 }
2173
2174 static inline int __mandatory_lock(struct inode *inode)
2175 {
2176 return 0;
2177 }
2178
2179 static inline int mandatory_lock(struct inode *inode)
2180 {
2181 return 0;
2182 }
2183
2184 static inline int locks_verify_locked(struct file *file)
2185 {
2186 return 0;
2187 }
2188
2189 static inline int locks_verify_truncate(struct inode *inode, struct file *filp,
2190 size_t size)
2191 {
2192 return 0;
2193 }
2194
2195 #endif /* CONFIG_MANDATORY_FILE_LOCKING */
2196
2197
2198 #ifdef CONFIG_FILE_LOCKING
2199 static inline int break_lease(struct inode *inode, unsigned int mode)
2200 {
2201 /*
2202 * Since this check is lockless, we must ensure that any refcounts
2203 * taken are done before checking i_flctx->flc_lease. Otherwise, we
2204 * could end up racing with tasks trying to set a new lease on this
2205 * file.
2206 */
2207 smp_mb();
2208 if (inode->i_flctx && !list_empty_careful(&inode->i_flctx->flc_lease))
2209 return __break_lease(inode, mode, FL_LEASE);
2210 return 0;
2211 }
2212
2213 static inline int break_deleg(struct inode *inode, unsigned int mode)
2214 {
2215 /*
2216 * Since this check is lockless, we must ensure that any refcounts
2217 * taken are done before checking i_flctx->flc_lease. Otherwise, we
2218 * could end up racing with tasks trying to set a new lease on this
2219 * file.
2220 */
2221 smp_mb();
2222 if (inode->i_flctx && !list_empty_careful(&inode->i_flctx->flc_lease))
2223 return __break_lease(inode, mode, FL_DELEG);
2224 return 0;
2225 }
2226
2227 static inline int try_break_deleg(struct inode *inode, struct inode **delegated_inode)
2228 {
2229 int ret;
2230
2231 ret = break_deleg(inode, O_WRONLY|O_NONBLOCK);
2232 if (ret == -EWOULDBLOCK && delegated_inode) {
2233 *delegated_inode = inode;
2234 ihold(inode);
2235 }
2236 return ret;
2237 }
2238
2239 static inline int break_deleg_wait(struct inode **delegated_inode)
2240 {
2241 int ret;
2242
2243 ret = break_deleg(*delegated_inode, O_WRONLY);
2244 iput(*delegated_inode);
2245 *delegated_inode = NULL;
2246 return ret;
2247 }
2248
2249 static inline int break_layout(struct inode *inode, bool wait)
2250 {
2251 smp_mb();
2252 if (inode->i_flctx && !list_empty_careful(&inode->i_flctx->flc_lease))
2253 return __break_lease(inode,
2254 wait ? O_WRONLY : O_WRONLY | O_NONBLOCK,
2255 FL_LAYOUT);
2256 return 0;
2257 }
2258
2259 #else /* !CONFIG_FILE_LOCKING */
2260 static inline int break_lease(struct inode *inode, unsigned int mode)
2261 {
2262 return 0;
2263 }
2264
2265 static inline int break_deleg(struct inode *inode, unsigned int mode)
2266 {
2267 return 0;
2268 }
2269
2270 static inline int try_break_deleg(struct inode *inode, struct inode **delegated_inode)
2271 {
2272 return 0;
2273 }
2274
2275 static inline int break_deleg_wait(struct inode **delegated_inode)
2276 {
2277 BUG();
2278 return 0;
2279 }
2280
2281 static inline int break_layout(struct inode *inode, bool wait)
2282 {
2283 return 0;
2284 }
2285
2286 #endif /* CONFIG_FILE_LOCKING */
2287
2288 /* fs/open.c */
2289 struct audit_names;
2290 struct filename {
2291 const char *name; /* pointer to actual string */
2292 const __user char *uptr; /* original userland pointer */
2293 struct audit_names *aname;
2294 int refcnt;
2295 const char iname[];
2296 };
2297
2298 extern long vfs_truncate(const struct path *, loff_t);
2299 extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
2300 struct file *filp);
2301 extern int vfs_fallocate(struct file *file, int mode, loff_t offset,
2302 loff_t len);
2303 extern long do_sys_open(int dfd, const char __user *filename, int flags,
2304 umode_t mode);
2305 extern struct file *file_open_name(struct filename *, int, umode_t);
2306 extern struct file *filp_open(const char *, int, umode_t);
2307 extern struct file *file_open_root(struct dentry *, struct vfsmount *,
2308 const char *, int, umode_t);
2309 extern struct file * dentry_open(const struct path *, int, const struct cred *);
2310 extern int filp_close(struct file *, fl_owner_t id);
2311
2312 extern struct filename *getname_flags(const char __user *, int, int *);
2313 extern struct filename *getname(const char __user *);
2314 extern struct filename *getname_kernel(const char *);
2315 extern void putname(struct filename *name);
2316
2317 enum {
2318 FILE_CREATED = 1,
2319 FILE_OPENED = 2
2320 };
2321 extern int finish_open(struct file *file, struct dentry *dentry,
2322 int (*open)(struct inode *, struct file *),
2323 int *opened);
2324 extern int finish_no_open(struct file *file, struct dentry *dentry);
2325
2326 /* fs/ioctl.c */
2327
2328 extern int ioctl_preallocate(struct file *filp, void __user *argp);
2329
2330 /* fs/dcache.c */
2331 extern void __init vfs_caches_init_early(void);
2332 extern void __init vfs_caches_init(void);
2333
2334 extern struct kmem_cache *names_cachep;
2335
2336 #define __getname() kmem_cache_alloc(names_cachep, GFP_KERNEL)
2337 #define __putname(name) kmem_cache_free(names_cachep, (void *)(name))
2338
2339 #ifdef CONFIG_BLOCK
2340 extern int register_blkdev(unsigned int, const char *);
2341 extern void unregister_blkdev(unsigned int, const char *);
2342 extern struct block_device *bdget(dev_t);
2343 extern struct block_device *bdgrab(struct block_device *bdev);
2344 extern void bd_set_size(struct block_device *, loff_t size);
2345 extern void bd_forget(struct inode *inode);
2346 extern void bdput(struct block_device *);
2347 extern void invalidate_bdev(struct block_device *);
2348 extern void iterate_bdevs(void (*)(struct block_device *, void *), void *);
2349 extern int sync_blockdev(struct block_device *bdev);
2350 extern void kill_bdev(struct block_device *);
2351 extern struct super_block *freeze_bdev(struct block_device *);
2352 extern void emergency_thaw_all(void);
2353 extern int thaw_bdev(struct block_device *bdev, struct super_block *sb);
2354 extern int fsync_bdev(struct block_device *);
2355
2356 extern struct super_block *blockdev_superblock;
2357
2358 static inline bool sb_is_blkdev_sb(struct super_block *sb)
2359 {
2360 return sb == blockdev_superblock;
2361 }
2362 #else
2363 static inline void bd_forget(struct inode *inode) {}
2364 static inline int sync_blockdev(struct block_device *bdev) { return 0; }
2365 static inline void kill_bdev(struct block_device *bdev) {}
2366 static inline void invalidate_bdev(struct block_device *bdev) {}
2367
2368 static inline struct super_block *freeze_bdev(struct block_device *sb)
2369 {
2370 return NULL;
2371 }
2372
2373 static inline int thaw_bdev(struct block_device *bdev, struct super_block *sb)
2374 {
2375 return 0;
2376 }
2377
2378 static inline void iterate_bdevs(void (*f)(struct block_device *, void *), void *arg)
2379 {
2380 }
2381
2382 static inline bool sb_is_blkdev_sb(struct super_block *sb)
2383 {
2384 return false;
2385 }
2386 #endif
2387 extern int sync_filesystem(struct super_block *);
2388 extern const struct file_operations def_blk_fops;
2389 extern const struct file_operations def_chr_fops;
2390 #ifdef CONFIG_BLOCK
2391 extern int ioctl_by_bdev(struct block_device *, unsigned, unsigned long);
2392 extern int blkdev_ioctl(struct block_device *, fmode_t, unsigned, unsigned long);
2393 extern long compat_blkdev_ioctl(struct file *, unsigned, unsigned long);
2394 extern int blkdev_get(struct block_device *bdev, fmode_t mode, void *holder);
2395 extern struct block_device *blkdev_get_by_path(const char *path, fmode_t mode,
2396 void *holder);
2397 extern struct block_device *blkdev_get_by_dev(dev_t dev, fmode_t mode,
2398 void *holder);
2399 extern void blkdev_put(struct block_device *bdev, fmode_t mode);
2400 extern int __blkdev_reread_part(struct block_device *bdev);
2401 extern int blkdev_reread_part(struct block_device *bdev);
2402
2403 #ifdef CONFIG_SYSFS
2404 extern int bd_link_disk_holder(struct block_device *bdev, struct gendisk *disk);
2405 extern void bd_unlink_disk_holder(struct block_device *bdev,
2406 struct gendisk *disk);
2407 #else
2408 static inline int bd_link_disk_holder(struct block_device *bdev,
2409 struct gendisk *disk)
2410 {
2411 return 0;
2412 }
2413 static inline void bd_unlink_disk_holder(struct block_device *bdev,
2414 struct gendisk *disk)
2415 {
2416 }
2417 #endif
2418 #endif
2419
2420 /* fs/char_dev.c */
2421 #define CHRDEV_MAJOR_HASH_SIZE 255
2422 /* Marks the bottom of the first segment of free char majors */
2423 #define CHRDEV_MAJOR_DYN_END 234
2424 extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
2425 extern int register_chrdev_region(dev_t, unsigned, const char *);
2426 extern int __register_chrdev(unsigned int major, unsigned int baseminor,
2427 unsigned int count, const char *name,
2428 const struct file_operations *fops);
2429 extern void __unregister_chrdev(unsigned int major, unsigned int baseminor,
2430 unsigned int count, const char *name);
2431 extern void unregister_chrdev_region(dev_t, unsigned);
2432 extern void chrdev_show(struct seq_file *,off_t);
2433
2434 static inline int register_chrdev(unsigned int major, const char *name,
2435 const struct file_operations *fops)
2436 {
2437 return __register_chrdev(major, 0, 256, name, fops);
2438 }
2439
2440 static inline void unregister_chrdev(unsigned int major, const char *name)
2441 {
2442 __unregister_chrdev(major, 0, 256, name);
2443 }
2444
2445 /* fs/block_dev.c */
2446 #define BDEVNAME_SIZE 32 /* Largest string for a blockdev identifier */
2447 #define BDEVT_SIZE 10 /* Largest string for MAJ:MIN for blkdev */
2448
2449 #ifdef CONFIG_BLOCK
2450 #define BLKDEV_MAJOR_HASH_SIZE 255
2451 extern const char *__bdevname(dev_t, char *buffer);
2452 extern const char *bdevname(struct block_device *bdev, char *buffer);
2453 extern struct block_device *lookup_bdev(const char *);
2454 extern void blkdev_show(struct seq_file *,off_t);
2455
2456 #else
2457 #define BLKDEV_MAJOR_HASH_SIZE 0
2458 #endif
2459
2460 extern void init_special_inode(struct inode *, umode_t, dev_t);
2461
2462 /* Invalid inode operations -- fs/bad_inode.c */
2463 extern void make_bad_inode(struct inode *);
2464 extern bool is_bad_inode(struct inode *);
2465
2466 #ifdef CONFIG_BLOCK
2467 /*
2468 * return READ, READA, or WRITE
2469 */
2470 #define bio_rw(bio) ((bio)->bi_rw & (RW_MASK | RWA_MASK))
2471
2472 /*
2473 * return data direction, READ or WRITE
2474 */
2475 #define bio_data_dir(bio) ((bio)->bi_rw & 1)
2476
2477 extern void check_disk_size_change(struct gendisk *disk,
2478 struct block_device *bdev);
2479 extern int revalidate_disk(struct gendisk *);
2480 extern int check_disk_change(struct block_device *);
2481 extern int __invalidate_device(struct block_device *, bool);
2482 extern int invalidate_partition(struct gendisk *, int);
2483 #endif
2484 unsigned long invalidate_mapping_pages(struct address_space *mapping,
2485 pgoff_t start, pgoff_t end);
2486
2487 static inline void invalidate_remote_inode(struct inode *inode)
2488 {
2489 if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
2490 S_ISLNK(inode->i_mode))
2491 invalidate_mapping_pages(inode->i_mapping, 0, -1);
2492 }
2493 extern int invalidate_inode_pages2(struct address_space *mapping);
2494 extern int invalidate_inode_pages2_range(struct address_space *mapping,
2495 pgoff_t start, pgoff_t end);
2496 extern int write_inode_now(struct inode *, int);
2497 extern int filemap_fdatawrite(struct address_space *);
2498 extern int filemap_flush(struct address_space *);
2499 extern int filemap_fdatawait(struct address_space *);
2500 extern void filemap_fdatawait_keep_errors(struct address_space *);
2501 extern int filemap_fdatawait_range(struct address_space *, loff_t lstart,
2502 loff_t lend);
2503 extern int filemap_write_and_wait(struct address_space *mapping);
2504 extern int filemap_write_and_wait_range(struct address_space *mapping,
2505 loff_t lstart, loff_t lend);
2506 extern int __filemap_fdatawrite_range(struct address_space *mapping,
2507 loff_t start, loff_t end, int sync_mode);
2508 extern int filemap_fdatawrite_range(struct address_space *mapping,
2509 loff_t start, loff_t end);
2510
2511 extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end,
2512 int datasync);
2513 extern int vfs_fsync(struct file *file, int datasync);
2514
2515 /*
2516 * Sync the bytes written if this was a synchronous write. Expect ki_pos
2517 * to already be updated for the write, and will return either the amount
2518 * of bytes passed in, or an error if syncing the file failed.
2519 */
2520 static inline ssize_t generic_write_sync(struct kiocb *iocb, ssize_t count)
2521 {
2522 if (iocb->ki_flags & IOCB_DSYNC) {
2523 int ret = vfs_fsync_range(iocb->ki_filp,
2524 iocb->ki_pos - count, iocb->ki_pos - 1,
2525 (iocb->ki_flags & IOCB_SYNC) ? 0 : 1);
2526 if (ret)
2527 return ret;
2528 }
2529
2530 return count;
2531 }
2532
2533 extern void emergency_sync(void);
2534 extern void emergency_remount(void);
2535 #ifdef CONFIG_BLOCK
2536 extern sector_t bmap(struct inode *, sector_t);
2537 #endif
2538 extern int notify_change(struct dentry *, struct iattr *, struct inode **);
2539 extern int inode_permission(struct inode *, int);
2540 extern int __inode_permission(struct inode *, int);
2541 extern int generic_permission(struct inode *, int);
2542 extern int __check_sticky(struct inode *dir, struct inode *inode);
2543
2544 static inline bool execute_ok(struct inode *inode)
2545 {
2546 return (inode->i_mode & S_IXUGO) || S_ISDIR(inode->i_mode);
2547 }
2548
2549 static inline void file_start_write(struct file *file)
2550 {
2551 if (!S_ISREG(file_inode(file)->i_mode))
2552 return;
2553 __sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, true);
2554 }
2555
2556 static inline bool file_start_write_trylock(struct file *file)
2557 {
2558 if (!S_ISREG(file_inode(file)->i_mode))
2559 return true;
2560 return __sb_start_write(file_inode(file)->i_sb, SB_FREEZE_WRITE, false);
2561 }
2562
2563 static inline void file_end_write(struct file *file)
2564 {
2565 if (!S_ISREG(file_inode(file)->i_mode))
2566 return;
2567 __sb_end_write(file_inode(file)->i_sb, SB_FREEZE_WRITE);
2568 }
2569
2570 /*
2571 * get_write_access() gets write permission for a file.
2572 * put_write_access() releases this write permission.
2573 * This is used for regular files.
2574 * We cannot support write (and maybe mmap read-write shared) accesses and
2575 * MAP_DENYWRITE mmappings simultaneously. The i_writecount field of an inode
2576 * can have the following values:
2577 * 0: no writers, no VM_DENYWRITE mappings
2578 * < 0: (-i_writecount) vm_area_structs with VM_DENYWRITE set exist
2579 * > 0: (i_writecount) users are writing to the file.
2580 *
2581 * Normally we operate on that counter with atomic_{inc,dec} and it's safe
2582 * except for the cases where we don't hold i_writecount yet. Then we need to
2583 * use {get,deny}_write_access() - these functions check the sign and refuse
2584 * to do the change if sign is wrong.
2585 */
2586 static inline int get_write_access(struct inode *inode)
2587 {
2588 return atomic_inc_unless_negative(&inode->i_writecount) ? 0 : -ETXTBSY;
2589 }
2590 static inline int deny_write_access(struct file *file)
2591 {
2592 struct inode *inode = file_inode(file);
2593 return atomic_dec_unless_positive(&inode->i_writecount) ? 0 : -ETXTBSY;
2594 }
2595 static inline void put_write_access(struct inode * inode)
2596 {
2597 atomic_dec(&inode->i_writecount);
2598 }
2599 static inline void allow_write_access(struct file *file)
2600 {
2601 if (file)
2602 atomic_inc(&file_inode(file)->i_writecount);
2603 }
2604 static inline bool inode_is_open_for_write(const struct inode *inode)
2605 {
2606 return atomic_read(&inode->i_writecount) > 0;
2607 }
2608
2609 #ifdef CONFIG_IMA
2610 static inline void i_readcount_dec(struct inode *inode)
2611 {
2612 BUG_ON(!atomic_read(&inode->i_readcount));
2613 atomic_dec(&inode->i_readcount);
2614 }
2615 static inline void i_readcount_inc(struct inode *inode)
2616 {
2617 atomic_inc(&inode->i_readcount);
2618 }
2619 #else
2620 static inline void i_readcount_dec(struct inode *inode)
2621 {
2622 return;
2623 }
2624 static inline void i_readcount_inc(struct inode *inode)
2625 {
2626 return;
2627 }
2628 #endif
2629 extern int do_pipe_flags(int *, int);
2630
2631 #define __kernel_read_file_id(id) \
2632 id(UNKNOWN, unknown) \
2633 id(FIRMWARE, firmware) \
2634 id(MODULE, kernel-module) \
2635 id(KEXEC_IMAGE, kexec-image) \
2636 id(KEXEC_INITRAMFS, kexec-initramfs) \
2637 id(POLICY, security-policy) \
2638 id(MAX_ID, )
2639
2640 #define __fid_enumify(ENUM, dummy) READING_ ## ENUM,
2641 #define __fid_stringify(dummy, str) #str,
2642
2643 enum kernel_read_file_id {
2644 __kernel_read_file_id(__fid_enumify)
2645 };
2646
2647 static const char * const kernel_read_file_str[] = {
2648 __kernel_read_file_id(__fid_stringify)
2649 };
2650
2651 static inline const char *kernel_read_file_id_str(enum kernel_read_file_id id)
2652 {
2653 if (id < 0 || id >= READING_MAX_ID)
2654 return kernel_read_file_str[READING_UNKNOWN];
2655
2656 return kernel_read_file_str[id];
2657 }
2658
2659 extern int kernel_read(struct file *, loff_t, char *, unsigned long);
2660 extern int kernel_read_file(struct file *, void **, loff_t *, loff_t,
2661 enum kernel_read_file_id);
2662 extern int kernel_read_file_from_path(char *, void **, loff_t *, loff_t,
2663 enum kernel_read_file_id);
2664 extern int kernel_read_file_from_fd(int, void **, loff_t *, loff_t,
2665 enum kernel_read_file_id);
2666 extern ssize_t kernel_write(struct file *, const char *, size_t, loff_t);
2667 extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *);
2668 extern struct file * open_exec(const char *);
2669
2670 /* fs/dcache.c -- generic fs support functions */
2671 extern bool is_subdir(struct dentry *, struct dentry *);
2672 extern bool path_is_under(struct path *, struct path *);
2673
2674 extern char *file_path(struct file *, char *, int);
2675
2676 #include <linux/err.h>
2677
2678 /* needed for stackable file system support */
2679 extern loff_t default_llseek(struct file *file, loff_t offset, int whence);
2680
2681 extern loff_t vfs_llseek(struct file *file, loff_t offset, int whence);
2682
2683 extern int inode_init_always(struct super_block *, struct inode *);
2684 extern void inode_init_once(struct inode *);
2685 extern void address_space_init_once(struct address_space *mapping);
2686 extern struct inode * igrab(struct inode *);
2687 extern ino_t iunique(struct super_block *, ino_t);
2688 extern int inode_needs_sync(struct inode *inode);
2689 extern int generic_delete_inode(struct inode *inode);
2690 static inline int generic_drop_inode(struct inode *inode)
2691 {
2692 return !inode->i_nlink || inode_unhashed(inode);
2693 }
2694
2695 extern struct inode *ilookup5_nowait(struct super_block *sb,
2696 unsigned long hashval, int (*test)(struct inode *, void *),
2697 void *data);
2698 extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
2699 int (*test)(struct inode *, void *), void *data);
2700 extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
2701
2702 extern struct inode * iget5_locked(struct super_block *, unsigned long, int (*test)(struct inode *, void *), int (*set)(struct inode *, void *), void *);
2703 extern struct inode * iget_locked(struct super_block *, unsigned long);
2704 extern struct inode *find_inode_nowait(struct super_block *,
2705 unsigned long,
2706 int (*match)(struct inode *,
2707 unsigned long, void *),
2708 void *data);
2709 extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
2710 extern int insert_inode_locked(struct inode *);
2711 #ifdef CONFIG_DEBUG_LOCK_ALLOC
2712 extern void lockdep_annotate_inode_mutex_key(struct inode *inode);
2713 #else
2714 static inline void lockdep_annotate_inode_mutex_key(struct inode *inode) { };
2715 #endif
2716 extern void unlock_new_inode(struct inode *);
2717 extern unsigned int get_next_ino(void);
2718
2719 extern void __iget(struct inode * inode);
2720 extern void iget_failed(struct inode *);
2721 extern void clear_inode(struct inode *);
2722 extern void __destroy_inode(struct inode *);
2723 extern struct inode *new_inode_pseudo(struct super_block *sb);
2724 extern struct inode *new_inode(struct super_block *sb);
2725 extern void free_inode_nonrcu(struct inode *inode);
2726 extern int should_remove_suid(struct dentry *);
2727 extern int file_remove_privs(struct file *);
2728 extern int dentry_needs_remove_privs(struct dentry *dentry);
2729 static inline int file_needs_remove_privs(struct file *file)
2730 {
2731 return dentry_needs_remove_privs(file->f_path.dentry);
2732 }
2733
2734 extern void __insert_inode_hash(struct inode *, unsigned long hashval);
2735 static inline void insert_inode_hash(struct inode *inode)
2736 {
2737 __insert_inode_hash(inode, inode->i_ino);
2738 }
2739
2740 extern void __remove_inode_hash(struct inode *);
2741 static inline void remove_inode_hash(struct inode *inode)
2742 {
2743 if (!inode_unhashed(inode) && !hlist_fake(&inode->i_hash))
2744 __remove_inode_hash(inode);
2745 }
2746
2747 extern void inode_sb_list_add(struct inode *inode);
2748
2749 #ifdef CONFIG_BLOCK
2750 extern blk_qc_t submit_bio(int, struct bio *);
2751 extern int bdev_read_only(struct block_device *);
2752 #endif
2753 extern int set_blocksize(struct block_device *, int);
2754 extern int sb_set_blocksize(struct super_block *, int);
2755 extern int sb_min_blocksize(struct super_block *, int);
2756
2757 extern int generic_file_mmap(struct file *, struct vm_area_struct *);
2758 extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
2759 extern ssize_t generic_write_checks(struct kiocb *, struct iov_iter *);
2760 extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
2761 extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
2762 extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
2763 extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *);
2764 extern ssize_t generic_perform_write(struct file *, struct iov_iter *, loff_t);
2765
2766 ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos);
2767 ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos);
2768
2769 /* fs/block_dev.c */
2770 extern ssize_t blkdev_read_iter(struct kiocb *iocb, struct iov_iter *to);
2771 extern ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from);
2772 extern int blkdev_fsync(struct file *filp, loff_t start, loff_t end,
2773 int datasync);
2774 extern void block_sync_page(struct page *page);
2775
2776 /* fs/splice.c */
2777 extern ssize_t generic_file_splice_read(struct file *, loff_t *,
2778 struct pipe_inode_info *, size_t, unsigned int);
2779 extern ssize_t default_file_splice_read(struct file *, loff_t *,
2780 struct pipe_inode_info *, size_t, unsigned int);
2781 extern ssize_t iter_file_splice_write(struct pipe_inode_info *,
2782 struct file *, loff_t *, size_t, unsigned int);
2783 extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
2784 struct file *out, loff_t *, size_t len, unsigned int flags);
2785 extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
2786 loff_t *opos, size_t len, unsigned int flags);
2787
2788
2789 extern void
2790 file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
2791 extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
2792 extern loff_t no_llseek(struct file *file, loff_t offset, int whence);
2793 extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
2794 extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
2795 extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
2796 int whence, loff_t maxsize, loff_t eof);
2797 extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
2798 int whence, loff_t size);
2799 extern loff_t no_seek_end_llseek_size(struct file *, loff_t, int, loff_t);
2800 extern loff_t no_seek_end_llseek(struct file *, loff_t, int);
2801 extern int generic_file_open(struct inode * inode, struct file * filp);
2802 extern int nonseekable_open(struct inode * inode, struct file * filp);
2803
2804 #ifdef CONFIG_BLOCK
2805 typedef void (dio_submit_t)(int rw, struct bio *bio, struct inode *inode,
2806 loff_t file_offset);
2807
2808 enum {
2809 /* need locking between buffered and direct access */
2810 DIO_LOCKING = 0x01,
2811
2812 /* filesystem does not support filling holes */
2813 DIO_SKIP_HOLES = 0x02,
2814
2815 /* filesystem can handle aio writes beyond i_size */
2816 DIO_ASYNC_EXTEND = 0x04,
2817
2818 /* inode/fs/bdev does not need truncate protection */
2819 DIO_SKIP_DIO_COUNT = 0x08,
2820 };
2821
2822 void dio_end_io(struct bio *bio, int error);
2823
2824 ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
2825 struct block_device *bdev, struct iov_iter *iter,
2826 get_block_t get_block,
2827 dio_iodone_t end_io, dio_submit_t submit_io,
2828 int flags);
2829
2830 static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
2831 struct inode *inode,
2832 struct iov_iter *iter,
2833 get_block_t get_block)
2834 {
2835 return __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev, iter,
2836 get_block, NULL, NULL, DIO_LOCKING | DIO_SKIP_HOLES);
2837 }
2838 #endif
2839
2840 void inode_dio_wait(struct inode *inode);
2841
2842 /*
2843 * inode_dio_begin - signal start of a direct I/O requests
2844 * @inode: inode the direct I/O happens on
2845 *
2846 * This is called once we've finished processing a direct I/O request,
2847 * and is used to wake up callers waiting for direct I/O to be quiesced.
2848 */
2849 static inline void inode_dio_begin(struct inode *inode)
2850 {
2851 atomic_inc(&inode->i_dio_count);
2852 }
2853
2854 /*
2855 * inode_dio_end - signal finish of a direct I/O requests
2856 * @inode: inode the direct I/O happens on
2857 *
2858 * This is called once we've finished processing a direct I/O request,
2859 * and is used to wake up callers waiting for direct I/O to be quiesced.
2860 */
2861 static inline void inode_dio_end(struct inode *inode)
2862 {
2863 if (atomic_dec_and_test(&inode->i_dio_count))
2864 wake_up_bit(&inode->i_state, __I_DIO_WAKEUP);
2865 }
2866
2867 extern void inode_set_flags(struct inode *inode, unsigned int flags,
2868 unsigned int mask);
2869
2870 extern const struct file_operations generic_ro_fops;
2871
2872 #define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
2873
2874 extern int readlink_copy(char __user *, int, const char *);
2875 extern int page_readlink(struct dentry *, char __user *, int);
2876 extern const char *page_get_link(struct dentry *, struct inode *,
2877 struct delayed_call *);
2878 extern void page_put_link(void *);
2879 extern int __page_symlink(struct inode *inode, const char *symname, int len,
2880 int nofs);
2881 extern int page_symlink(struct inode *inode, const char *symname, int len);
2882 extern const struct inode_operations page_symlink_inode_operations;
2883 extern void kfree_link(void *);
2884 extern int generic_readlink(struct dentry *, char __user *, int);
2885 extern void generic_fillattr(struct inode *, struct kstat *);
2886 int vfs_getattr_nosec(struct path *path, struct kstat *stat);
2887 extern int vfs_getattr(struct path *, struct kstat *);
2888 void __inode_add_bytes(struct inode *inode, loff_t bytes);
2889 void inode_add_bytes(struct inode *inode, loff_t bytes);
2890 void __inode_sub_bytes(struct inode *inode, loff_t bytes);
2891 void inode_sub_bytes(struct inode *inode, loff_t bytes);
2892 loff_t inode_get_bytes(struct inode *inode);
2893 void inode_set_bytes(struct inode *inode, loff_t bytes);
2894 const char *simple_get_link(struct dentry *, struct inode *,
2895 struct delayed_call *);
2896 extern const struct inode_operations simple_symlink_inode_operations;
2897
2898 extern int iterate_dir(struct file *, struct dir_context *);
2899
2900 extern int vfs_stat(const char __user *, struct kstat *);
2901 extern int vfs_lstat(const char __user *, struct kstat *);
2902 extern int vfs_fstat(unsigned int, struct kstat *);
2903 extern int vfs_fstatat(int , const char __user *, struct kstat *, int);
2904
2905 extern int __generic_block_fiemap(struct inode *inode,
2906 struct fiemap_extent_info *fieinfo,
2907 loff_t start, loff_t len,
2908 get_block_t *get_block);
2909 extern int generic_block_fiemap(struct inode *inode,
2910 struct fiemap_extent_info *fieinfo, u64 start,
2911 u64 len, get_block_t *get_block);
2912
2913 extern void get_filesystem(struct file_system_type *fs);
2914 extern void put_filesystem(struct file_system_type *fs);
2915 extern struct file_system_type *get_fs_type(const char *name);
2916 extern struct super_block *get_super(struct block_device *);
2917 extern struct super_block *get_super_thawed(struct block_device *);
2918 extern struct super_block *get_active_super(struct block_device *bdev);
2919 extern void drop_super(struct super_block *sb);
2920 extern void iterate_supers(void (*)(struct super_block *, void *), void *);
2921 extern void iterate_supers_type(struct file_system_type *,
2922 void (*)(struct super_block *, void *), void *);
2923
2924 extern int dcache_dir_open(struct inode *, struct file *);
2925 extern int dcache_dir_close(struct inode *, struct file *);
2926 extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
2927 extern int dcache_readdir(struct file *, struct dir_context *);
2928 extern int simple_setattr(struct dentry *, struct iattr *);
2929 extern int simple_getattr(struct vfsmount *, struct dentry *, struct kstat *);
2930 extern int simple_statfs(struct dentry *, struct kstatfs *);
2931 extern int simple_open(struct inode *inode, struct file *file);
2932 extern int simple_link(struct dentry *, struct inode *, struct dentry *);
2933 extern int simple_unlink(struct inode *, struct dentry *);
2934 extern int simple_rmdir(struct inode *, struct dentry *);
2935 extern int simple_rename(struct inode *, struct dentry *, struct inode *, struct dentry *);
2936 extern int noop_fsync(struct file *, loff_t, loff_t, int);
2937 extern int simple_empty(struct dentry *);
2938 extern int simple_readpage(struct file *file, struct page *page);
2939 extern int simple_write_begin(struct file *file, struct address_space *mapping,
2940 loff_t pos, unsigned len, unsigned flags,
2941 struct page **pagep, void **fsdata);
2942 extern int simple_write_end(struct file *file, struct address_space *mapping,
2943 loff_t pos, unsigned len, unsigned copied,
2944 struct page *page, void *fsdata);
2945 extern int always_delete_dentry(const struct dentry *);
2946 extern struct inode *alloc_anon_inode(struct super_block *);
2947 extern int simple_nosetlease(struct file *, long, struct file_lock **, void **);
2948 extern const struct dentry_operations simple_dentry_operations;
2949
2950 extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
2951 extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
2952 extern const struct file_operations simple_dir_operations;
2953 extern const struct inode_operations simple_dir_inode_operations;
2954 extern void make_empty_dir_inode(struct inode *inode);
2955 extern bool is_empty_dir_inode(struct inode *inode);
2956 struct tree_descr { char *name; const struct file_operations *ops; int mode; };
2957 struct dentry *d_alloc_name(struct dentry *, const char *);
2958 extern int simple_fill_super(struct super_block *, unsigned long, struct tree_descr *);
2959 extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
2960 extern void simple_release_fs(struct vfsmount **mount, int *count);
2961
2962 extern ssize_t simple_read_from_buffer(void __user *to, size_t count,
2963 loff_t *ppos, const void *from, size_t available);
2964 extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
2965 const void __user *from, size_t count);
2966
2967 extern int __generic_file_fsync(struct file *, loff_t, loff_t, int);
2968 extern int generic_file_fsync(struct file *, loff_t, loff_t, int);
2969
2970 extern int generic_check_addressable(unsigned, u64);
2971
2972 #ifdef CONFIG_MIGRATION
2973 extern int buffer_migrate_page(struct address_space *,
2974 struct page *, struct page *,
2975 enum migrate_mode);
2976 #else
2977 #define buffer_migrate_page NULL
2978 #endif
2979
2980 extern int inode_change_ok(const struct inode *, struct iattr *);
2981 extern int inode_newsize_ok(const struct inode *, loff_t offset);
2982 extern void setattr_copy(struct inode *inode, const struct iattr *attr);
2983
2984 extern int file_update_time(struct file *file);
2985
2986 extern int generic_show_options(struct seq_file *m, struct dentry *root);
2987 extern void save_mount_options(struct super_block *sb, char *options);
2988 extern void replace_mount_options(struct super_block *sb, char *options);
2989
2990 static inline bool io_is_direct(struct file *filp)
2991 {
2992 return (filp->f_flags & O_DIRECT) || IS_DAX(filp->f_mapping->host);
2993 }
2994
2995 static inline int iocb_flags(struct file *file)
2996 {
2997 int res = 0;
2998 if (file->f_flags & O_APPEND)
2999 res |= IOCB_APPEND;
3000 if (io_is_direct(file))
3001 res |= IOCB_DIRECT;
3002 if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
3003 res |= IOCB_DSYNC;
3004 if (file->f_flags & __O_SYNC)
3005 res |= IOCB_SYNC;
3006 return res;
3007 }
3008
3009 static inline ino_t parent_ino(struct dentry *dentry)
3010 {
3011 ino_t res;
3012
3013 /*
3014 * Don't strictly need d_lock here? If the parent ino could change
3015 * then surely we'd have a deeper race in the caller?
3016 */
3017 spin_lock(&dentry->d_lock);
3018 res = dentry->d_parent->d_inode->i_ino;
3019 spin_unlock(&dentry->d_lock);
3020 return res;
3021 }
3022
3023 /* Transaction based IO helpers */
3024
3025 /*
3026 * An argresp is stored in an allocated page and holds the
3027 * size of the argument or response, along with its content
3028 */
3029 struct simple_transaction_argresp {
3030 ssize_t size;
3031 char data[0];
3032 };
3033
3034 #define SIMPLE_TRANSACTION_LIMIT (PAGE_SIZE - sizeof(struct simple_transaction_argresp))
3035
3036 char *simple_transaction_get(struct file *file, const char __user *buf,
3037 size_t size);
3038 ssize_t simple_transaction_read(struct file *file, char __user *buf,
3039 size_t size, loff_t *pos);
3040 int simple_transaction_release(struct inode *inode, struct file *file);
3041
3042 void simple_transaction_set(struct file *file, size_t n);
3043
3044 /*
3045 * simple attribute files
3046 *
3047 * These attributes behave similar to those in sysfs:
3048 *
3049 * Writing to an attribute immediately sets a value, an open file can be
3050 * written to multiple times.
3051 *
3052 * Reading from an attribute creates a buffer from the value that might get
3053 * read with multiple read calls. When the attribute has been read
3054 * completely, no further read calls are possible until the file is opened
3055 * again.
3056 *
3057 * All attributes contain a text representation of a numeric value
3058 * that are accessed with the get() and set() functions.
3059 */
3060 #define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) \
3061 static int __fops ## _open(struct inode *inode, struct file *file) \
3062 { \
3063 __simple_attr_check_format(__fmt, 0ull); \
3064 return simple_attr_open(inode, file, __get, __set, __fmt); \
3065 } \
3066 static const struct file_operations __fops = { \
3067 .owner = THIS_MODULE, \
3068 .open = __fops ## _open, \
3069 .release = simple_attr_release, \
3070 .read = simple_attr_read, \
3071 .write = simple_attr_write, \
3072 .llseek = generic_file_llseek, \
3073 }
3074
3075 static inline __printf(1, 2)
3076 void __simple_attr_check_format(const char *fmt, ...)
3077 {
3078 /* don't do anything, just let the compiler check the arguments; */
3079 }
3080
3081 int simple_attr_open(struct inode *inode, struct file *file,
3082 int (*get)(void *, u64 *), int (*set)(void *, u64),
3083 const char *fmt);
3084 int simple_attr_release(struct inode *inode, struct file *file);
3085 ssize_t simple_attr_read(struct file *file, char __user *buf,
3086 size_t len, loff_t *ppos);
3087 ssize_t simple_attr_write(struct file *file, const char __user *buf,
3088 size_t len, loff_t *ppos);
3089
3090 struct ctl_table;
3091 int proc_nr_files(struct ctl_table *table, int write,
3092 void __user *buffer, size_t *lenp, loff_t *ppos);
3093 int proc_nr_dentry(struct ctl_table *table, int write,
3094 void __user *buffer, size_t *lenp, loff_t *ppos);
3095 int proc_nr_inodes(struct ctl_table *table, int write,
3096 void __user *buffer, size_t *lenp, loff_t *ppos);
3097 int __init get_filesystem_list(char *buf);
3098
3099 #define __FMODE_EXEC ((__force int) FMODE_EXEC)
3100 #define __FMODE_NONOTIFY ((__force int) FMODE_NONOTIFY)
3101
3102 #define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE])
3103 #define OPEN_FMODE(flag) ((__force fmode_t)(((flag + 1) & O_ACCMODE) | \
3104 (flag & __FMODE_NONOTIFY)))
3105
3106 static inline bool is_sxid(umode_t mode)
3107 {
3108 return (mode & S_ISUID) || ((mode & S_ISGID) && (mode & S_IXGRP));
3109 }
3110
3111 static inline int check_sticky(struct inode *dir, struct inode *inode)
3112 {
3113 if (!(dir->i_mode & S_ISVTX))
3114 return 0;
3115
3116 return __check_sticky(dir, inode);
3117 }
3118
3119 static inline void inode_has_no_xattr(struct inode *inode)
3120 {
3121 if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & MS_NOSEC))
3122 inode->i_flags |= S_NOSEC;
3123 }
3124
3125 static inline bool is_root_inode(struct inode *inode)
3126 {
3127 return inode == inode->i_sb->s_root->d_inode;
3128 }
3129
3130 static inline bool dir_emit(struct dir_context *ctx,
3131 const char *name, int namelen,
3132 u64 ino, unsigned type)
3133 {
3134 return ctx->actor(ctx, name, namelen, ctx->pos, ino, type) == 0;
3135 }
3136 static inline bool dir_emit_dot(struct file *file, struct dir_context *ctx)
3137 {
3138 return ctx->actor(ctx, ".", 1, ctx->pos,
3139 file->f_path.dentry->d_inode->i_ino, DT_DIR) == 0;
3140 }
3141 static inline bool dir_emit_dotdot(struct file *file, struct dir_context *ctx)
3142 {
3143 return ctx->actor(ctx, "..", 2, ctx->pos,
3144 parent_ino(file->f_path.dentry), DT_DIR) == 0;
3145 }
3146 static inline bool dir_emit_dots(struct file *file, struct dir_context *ctx)
3147 {
3148 if (ctx->pos == 0) {
3149 if (!dir_emit_dot(file, ctx))
3150 return false;
3151 ctx->pos = 1;
3152 }
3153 if (ctx->pos == 1) {
3154 if (!dir_emit_dotdot(file, ctx))
3155 return false;
3156 ctx->pos = 2;
3157 }
3158 return true;
3159 }
3160 static inline bool dir_relax(struct inode *inode)
3161 {
3162 inode_unlock(inode);
3163 inode_lock(inode);
3164 return !IS_DEADDIR(inode);
3165 }
3166
3167 static inline bool dir_relax_shared(struct inode *inode)
3168 {
3169 inode_unlock_shared(inode);
3170 inode_lock_shared(inode);
3171 return !IS_DEADDIR(inode);
3172 }
3173
3174 extern bool path_noexec(const struct path *path);
3175 extern void inode_nohighmem(struct inode *inode);
3176
3177 #endif /* _LINUX_FS_H */ |
Here is an explanation of a rule violation arisen while checking your driver against a corresponding kernel.
Note that it may be false positive, i.e. there isn't a real error indeed. Please analyze a given error trace and related source code to understand whether there is an error in your driver.
Error trace column contains a path on which the given rule is violated. You can expand/collapse some entity classes by clicking on corresponding checkboxes in a main menu or in an advanced Others menu. Also you can expand/collapse each particular entity by clicking on +/-. In hovering on some entities you can see some tips. Also the error trace is bound with related source code. Line numbers may be shown as links on the left. You can click on them to open corresponding lines in source code.
Source code column contains a content of files related with the error trace. There is source code of your driver (note that there are some LDV modifications at the end), kernel headers and rule model. Tabs show a currently opened file and other available files. In hovering on them you can see full file names. On clicking a corresponding file content will be shown.
Kernel | Module | Rule | Verifier | Verdict | Status | Timestamp | Bug report |
linux-4.7-rc1.tar.xz | drivers/ide/ide-tape.ko | 106_1a | CPAchecker | Bug | Fixed | 2016-08-19 01:50:35 | L0238 |
Comment
Reported: 30 Apr 2016
[Home]