4 * Copyright (C) 1997, Stephen Tweedie
6 * Provide stub functions for unreadable inodes
8 * Fabian Frederick : August 2003 - All file operations assigned to EIO
12 #include <linux/module.h>
13 #include <linux/stat.h>
14 #include <linux/time.h>
15 #include <linux/namei.h>
16 #include <linux/poll.h>
19 static loff_t
bad_file_llseek(struct file
*file
, loff_t offset
, int origin
)
24 static ssize_t
bad_file_read(struct file
*filp
, char __user
*buf
,
25 size_t size
, loff_t
*ppos
)
30 static ssize_t
bad_file_write(struct file
*filp
, const char __user
*buf
,
31 size_t siz
, loff_t
*ppos
)
36 static ssize_t
bad_file_aio_read(struct kiocb
*iocb
, const struct iovec
*iov
,
37 unsigned long nr_segs
, loff_t pos
)
42 static ssize_t
bad_file_aio_write(struct kiocb
*iocb
, const struct iovec
*iov
,
43 unsigned long nr_segs
, loff_t pos
)
48 static int bad_file_readdir(struct file
*filp
, void *dirent
, filldir_t filldir
)
53 static unsigned int bad_file_poll(struct file
*filp
, poll_table
*wait
)
58 static int bad_file_ioctl (struct inode
*inode
, struct file
*filp
,
59 unsigned int cmd
, unsigned long arg
)
64 static long bad_file_unlocked_ioctl(struct file
*file
, unsigned cmd
,
70 static long bad_file_compat_ioctl(struct file
*file
, unsigned int cmd
,
76 static int bad_file_mmap(struct file
*file
, struct vm_area_struct
*vma
)
81 static int bad_file_open(struct inode
*inode
, struct file
*filp
)
86 static int bad_file_flush(struct file
*file
, fl_owner_t id
)
91 static int bad_file_release(struct inode
*inode
, struct file
*filp
)
96 static int bad_file_fsync(struct file
*file
, struct dentry
*dentry
,
102 static int bad_file_aio_fsync(struct kiocb
*iocb
, int datasync
)
107 static int bad_file_fasync(int fd
, struct file
*filp
, int on
)
112 static int bad_file_lock(struct file
*file
, int cmd
, struct file_lock
*fl
)
117 static ssize_t
bad_file_sendpage(struct file
*file
, struct page
*page
,
118 int off
, size_t len
, loff_t
*pos
, int more
)
123 static unsigned long bad_file_get_unmapped_area(struct file
*file
,
124 unsigned long addr
, unsigned long len
,
125 unsigned long pgoff
, unsigned long flags
)
130 static int bad_file_check_flags(int flags
)
135 static int bad_file_dir_notify(struct file
*file
, unsigned long arg
)
140 static int bad_file_flock(struct file
*filp
, int cmd
, struct file_lock
*fl
)
145 static ssize_t
bad_file_splice_write(struct pipe_inode_info
*pipe
,
146 struct file
*out
, loff_t
*ppos
, size_t len
,
152 static ssize_t
bad_file_splice_read(struct file
*in
, loff_t
*ppos
,
153 struct pipe_inode_info
*pipe
, size_t len
,
159 static const struct file_operations bad_file_ops
=
161 .llseek
= bad_file_llseek
,
162 .read
= bad_file_read
,
163 .write
= bad_file_write
,
164 .aio_read
= bad_file_aio_read
,
165 .aio_write
= bad_file_aio_write
,
166 .readdir
= bad_file_readdir
,
167 .poll
= bad_file_poll
,
168 .ioctl
= bad_file_ioctl
,
169 .unlocked_ioctl
= bad_file_unlocked_ioctl
,
170 .compat_ioctl
= bad_file_compat_ioctl
,
171 .mmap
= bad_file_mmap
,
172 .open
= bad_file_open
,
173 .flush
= bad_file_flush
,
174 .release
= bad_file_release
,
175 .fsync
= bad_file_fsync
,
176 .aio_fsync
= bad_file_aio_fsync
,
177 .fasync
= bad_file_fasync
,
178 .lock
= bad_file_lock
,
179 .sendpage
= bad_file_sendpage
,
180 .get_unmapped_area
= bad_file_get_unmapped_area
,
181 .check_flags
= bad_file_check_flags
,
182 .dir_notify
= bad_file_dir_notify
,
183 .flock
= bad_file_flock
,
184 .splice_write
= bad_file_splice_write
,
185 .splice_read
= bad_file_splice_read
,
188 static int bad_inode_create (struct inode
*dir
, struct dentry
*dentry
,
189 int mode
, struct nameidata
*nd
)
194 static struct dentry
*bad_inode_lookup(struct inode
*dir
,
195 struct dentry
*dentry
, struct nameidata
*nd
)
197 return ERR_PTR(-EIO
);
200 static int bad_inode_link (struct dentry
*old_dentry
, struct inode
*dir
,
201 struct dentry
*dentry
)
206 static int bad_inode_unlink(struct inode
*dir
, struct dentry
*dentry
)
211 static int bad_inode_symlink (struct inode
*dir
, struct dentry
*dentry
,
217 static int bad_inode_mkdir(struct inode
*dir
, struct dentry
*dentry
,
223 static int bad_inode_rmdir (struct inode
*dir
, struct dentry
*dentry
)
228 static int bad_inode_mknod (struct inode
*dir
, struct dentry
*dentry
,
229 int mode
, dev_t rdev
)
234 static int bad_inode_rename (struct inode
*old_dir
, struct dentry
*old_dentry
,
235 struct inode
*new_dir
, struct dentry
*new_dentry
)
240 static int bad_inode_readlink(struct dentry
*dentry
, char __user
*buffer
,
246 static int bad_inode_permission(struct inode
*inode
, int mask
)
251 static int bad_inode_getattr(struct vfsmount
*mnt
, struct dentry
*dentry
,
257 static int bad_inode_setattr(struct dentry
*direntry
, struct iattr
*attrs
)
262 static int bad_inode_setxattr(struct dentry
*dentry
, const char *name
,
263 const void *value
, size_t size
, int flags
)
268 static ssize_t
bad_inode_getxattr(struct dentry
*dentry
, const char *name
,
269 void *buffer
, size_t size
)
274 static ssize_t
bad_inode_listxattr(struct dentry
*dentry
, char *buffer
,
280 static int bad_inode_removexattr(struct dentry
*dentry
, const char *name
)
285 static const struct inode_operations bad_inode_ops
=
287 .create
= bad_inode_create
,
288 .lookup
= bad_inode_lookup
,
289 .link
= bad_inode_link
,
290 .unlink
= bad_inode_unlink
,
291 .symlink
= bad_inode_symlink
,
292 .mkdir
= bad_inode_mkdir
,
293 .rmdir
= bad_inode_rmdir
,
294 .mknod
= bad_inode_mknod
,
295 .rename
= bad_inode_rename
,
296 .readlink
= bad_inode_readlink
,
297 /* follow_link must be no-op, otherwise unmounting this inode
299 /* put_link returns void */
300 /* truncate returns void */
301 .permission
= bad_inode_permission
,
302 .getattr
= bad_inode_getattr
,
303 .setattr
= bad_inode_setattr
,
304 .setxattr
= bad_inode_setxattr
,
305 .getxattr
= bad_inode_getxattr
,
306 .listxattr
= bad_inode_listxattr
,
307 .removexattr
= bad_inode_removexattr
,
308 /* truncate_range returns void */
313 * When a filesystem is unable to read an inode due to an I/O error in
314 * its read_inode() function, it can call make_bad_inode() to return a
315 * set of stubs which will return EIO errors as required.
317 * We only need to do limited initialisation: all other fields are
318 * preinitialised to zero automatically.
322 * make_bad_inode - mark an inode bad due to an I/O error
323 * @inode: Inode to mark bad
325 * When an inode cannot be read due to a media or remote network
326 * failure this function makes the inode "bad" and causes I/O operations
327 * on it to fail from this point on.
330 void make_bad_inode(struct inode
*inode
)
332 remove_inode_hash(inode
);
334 inode
->i_mode
= S_IFREG
;
335 inode
->i_atime
= inode
->i_mtime
= inode
->i_ctime
=
336 current_fs_time(inode
->i_sb
);
337 inode
->i_op
= &bad_inode_ops
;
338 inode
->i_fop
= &bad_file_ops
;
340 EXPORT_SYMBOL(make_bad_inode
);
343 * This tests whether an inode has been flagged as bad. The test uses
344 * &bad_inode_ops to cover the case of invalidated inodes as well as
345 * those created by make_bad_inode() above.
349 * is_bad_inode - is an inode errored
350 * @inode: inode to test
352 * Returns true if the inode in question has been marked as bad.
355 int is_bad_inode(struct inode
*inode
)
357 return (inode
->i_op
== &bad_inode_ops
);
360 EXPORT_SYMBOL(is_bad_inode
);
363 * iget_failed - Mark an under-construction inode as dead and release it
364 * @inode: The inode to discard
366 * Mark an under-construction inode as dead and release it.
368 void iget_failed(struct inode
*inode
)
370 make_bad_inode(inode
);
371 unlock_new_inode(inode
);
374 EXPORT_SYMBOL(iget_failed
);