Implement generic freeze feature
Subsystems (2)
PATCH 8/10 Implement generic freeze feature
The ioctls for the generic freeze feature are below.
o Freeze the filesystem
int ioctl(int fd, int FIFREEZE, arg)
fd: The file descriptor of the mountpoint
FIFREEZE: request code for the freeze
arg: Ignored
Return value: 0 if the operation succeeds. Otherwise, -1
o Unfreeze the filesystem
int ioctl(int fd, int FITHAW, arg)
fd: The file descriptor of the mountpoint
FITHAW: request code for unfreeze
arg: Ignored
Return value: 0 if the operation succeeds. Otherwise, -1
--- fs/block_dev.c | 2 + fs/buffer.c | 69 ++++++++++++++++++++++++++++++++++++++------ fs/ioctl.c | 47 +++++++++++++++++++++++++++++ include/linux/buffer_head.h | 2 - include/linux/fs.h | 7 ++++
diff -uprN -X linux-2.6.27-rc7-lockfs-reiserfs/Documentation/dontdiff linux-2.6.27-rc7-lockfs-reiserfs/fs/block_dev.c li nux-2.6.27-rc7-freeze/fs/block_dev.c
fs/block_dev.c +2 -0
@@ -285,6 +285,8 @@ static void init_once(void *foo)INIT_LIST_HEAD (&bdev->bd_holder_list);#endif inode_init_once (&ei->vfs_inode); +/* Initialize mutex for freeze. */ +mutex_init (&bdev->bd_fsfreeze_mutex); }static inline void __bd_forget (struct inode *inode)
diff -uprN -X linux-2.6.27-rc7-lockfs-reiserfs/Documentation/dontdiff linux-2.6.27-rc7-lockfs-reiserfs/fs/buffer.c linux -2.6.27-rc7-freeze/fs/buffer.c
fs/buffer.c +60 -9
101 lines not on this page · raw message
diff -uprN -X linux-2.6.27-rc7-lockfs-reiserfs/Documentation/dontdiff linux-2.6.27-rc7-lockfs-reiserfs/fs/ioctl.c linux- 2.6.27-rc7-freeze/fs/ioctl.c
fs/ioctl.c +47 -0
65 lines not on this page · raw message
diff -uprN -X linux-2.6.27-rc7-lockfs-reiserfs/Documentation/dontdiff linux-2.6.27-rc7-lockfs-reiserfs/include/linux/buf fer_head.h linux-2.6.27-rc7-freeze/include/linux/buffer_head.h
include/linux/buffer_head.h +1 -1
@@ -170,7 +170,7 @@ void __wait_on_buffer(struct buffer_headwait_queue_head_t *bh_waitq_head (struct buffer_head *bh);int fsync_bdev (struct block_device *);struct super_block *freeze_bdev (struct block_device *); -void thaw_bdev (struct block_device *,struct super_block *); +int thaw_bdev (struct block_device *,struct super_block *);int fsync_super (struct super_block *);int fsync_no_super (struct block_device *); struct buffer_head *__find_get_block(struct block_device *bdev, sector_t block,
diff -uprN -X linux-2.6.27-rc7-lockfs-reiserfs/Documentation/dontdiff linux-2.6.27-rc7-lockfs-reiserfs/include/linux/fs. h linux-2.6.27-rc7-freeze/include/linux/fs.h
include/linux/fs.h +7 -0
@@ -226,6 +226,8 @@ extern int dir_notify_enable;#define BMAP_IOCTL 1/* obsolete - kept for compatibility */ #define FIBMAP _IO(0x00,1)/* bmap access */ #define FIGETBSZ _IO(0x00,2)/* get the block size used for bmap */ +#define FIFREEZE _IOWR('X', 119, int)/* Freeze */ +#define FITHAW _IOWR('X', 120, int)/* Thaw */ #define FS_IOC_GETFLAGS _IOR('f', 1, long)#define FS_IOC_SETFLAGS _IOW('f', 2, long)
@@ -574,6 +576,11 @@ struct block_device {* care to not mess up bd_private for that case. */ unsigned long bd_private; + +/* The counter of freeze processes */ +int bd_fsfreeze_count; +/* Mutex for freeze */ +struct mutex bd_fsfreeze_mutex; };/*