enforce ->sync_fs is only called for rw superblock
[safe/jmp/linux-2.6] / fs / sync.c
1 /*
2  * High-level sync()-related operations
3  */
4
5 #include <linux/kernel.h>
6 #include <linux/file.h>
7 #include <linux/fs.h>
8 #include <linux/module.h>
9 #include <linux/sched.h>
10 #include <linux/writeback.h>
11 #include <linux/syscalls.h>
12 #include <linux/linkage.h>
13 #include <linux/pagemap.h>
14 #include <linux/quotaops.h>
15 #include <linux/buffer_head.h>
16 #include "internal.h"
17
18 #define VALID_FLAGS (SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE| \
19                         SYNC_FILE_RANGE_WAIT_AFTER)
20
21 /*
22  * Do the filesystem syncing work. For simple filesystems sync_inodes_sb(sb, 0)
23  * just dirties buffers with inodes so we have to submit IO for these buffers
24  * via __sync_blockdev(). This also speeds up the wait == 1 case since in that
25  * case write_inode() functions do sync_dirty_buffer() and thus effectively
26  * write one block at a time.
27  */
28 static int __sync_filesystem(struct super_block *sb, int wait)
29 {
30         /* Avoid doing twice syncing and cache pruning for quota sync */
31         if (!wait)
32                 writeout_quota_sb(sb, -1);
33         else
34                 sync_quota_sb(sb, -1);
35         sync_inodes_sb(sb, wait);
36         lock_super(sb);
37         if (sb->s_dirt && sb->s_op->write_super)
38                 sb->s_op->write_super(sb);
39         unlock_super(sb);
40         if (sb->s_op->sync_fs)
41                 sb->s_op->sync_fs(sb, wait);
42         return __sync_blockdev(sb->s_bdev, wait);
43 }
44
45 /*
46  * Write out and wait upon all dirty data associated with this
47  * superblock.  Filesystem data as well as the underlying block
48  * device.  Takes the superblock lock.
49  */
50 int sync_filesystem(struct super_block *sb)
51 {
52         int ret;
53
54         /*
55          * We need to be protected against the filesystem going from
56          * r/o to r/w or vice versa.
57          */
58         WARN_ON(!rwsem_is_locked(&sb->s_umount));
59
60         /*
61          * No point in syncing out anything if the filesystem is read-only.
62          */
63         if (sb->s_flags & MS_RDONLY)
64                 return 0;
65
66         ret = __sync_filesystem(sb, 0);
67         if (ret < 0)
68                 return ret;
69         return __sync_filesystem(sb, 1);
70 }
71 EXPORT_SYMBOL_GPL(sync_filesystem);
72
73 /*
74  * Sync all the data for all the filesystems (called by sys_sync() and
75  * emergency sync)
76  *
77  * This operation is careful to avoid the livelock which could easily happen
78  * if two or more filesystems are being continuously dirtied.  s_need_sync
79  * is used only here.  We set it against all filesystems and then clear it as
80  * we sync them.  So redirtied filesystems are skipped.
81  *
82  * But if process A is currently running sync_filesystems and then process B
83  * calls sync_filesystems as well, process B will set all the s_need_sync
84  * flags again, which will cause process A to resync everything.  Fix that with
85  * a local mutex.
86  */
87 static void sync_filesystems(int wait)
88 {
89         struct super_block *sb;
90         static DEFINE_MUTEX(mutex);
91
92         mutex_lock(&mutex);             /* Could be down_interruptible */
93         spin_lock(&sb_lock);
94         list_for_each_entry(sb, &super_blocks, s_list)
95                 sb->s_need_sync = 1;
96
97 restart:
98         list_for_each_entry(sb, &super_blocks, s_list) {
99                 if (!sb->s_need_sync)
100                         continue;
101                 sb->s_need_sync = 0;
102                 sb->s_count++;
103                 spin_unlock(&sb_lock);
104
105                 down_read(&sb->s_umount);
106                 if (!(sb->s_flags & MS_RDONLY) && sb->s_root)
107                         __sync_filesystem(sb, wait);
108                 up_read(&sb->s_umount);
109
110                 /* restart only when sb is no longer on the list */
111                 spin_lock(&sb_lock);
112                 if (__put_super_and_need_restart(sb))
113                         goto restart;
114         }
115         spin_unlock(&sb_lock);
116         mutex_unlock(&mutex);
117 }
118
119 SYSCALL_DEFINE0(sync)
120 {
121         sync_filesystems(0);
122         sync_filesystems(1);
123         if (unlikely(laptop_mode))
124                 laptop_sync_completion();
125         return 0;
126 }
127
128 static void do_sync_work(struct work_struct *work)
129 {
130         /*
131          * Sync twice to reduce the possibility we skipped some inodes / pages
132          * because they were temporarily locked
133          */
134         sync_filesystems(0);
135         sync_filesystems(0);
136         printk("Emergency Sync complete\n");
137         kfree(work);
138 }
139
140 void emergency_sync(void)
141 {
142         struct work_struct *work;
143
144         work = kmalloc(sizeof(*work), GFP_ATOMIC);
145         if (work) {
146                 INIT_WORK(work, do_sync_work);
147                 schedule_work(work);
148         }
149 }
150
151 /*
152  * Generic function to fsync a file.
153  *
154  * filp may be NULL if called via the msync of a vma.
155  */
156 int file_fsync(struct file *filp, struct dentry *dentry, int datasync)
157 {
158         struct inode * inode = dentry->d_inode;
159         struct super_block * sb;
160         int ret, err;
161
162         /* sync the inode to buffers */
163         ret = write_inode_now(inode, 0);
164
165         /* sync the superblock to buffers */
166         sb = inode->i_sb;
167         lock_super(sb);
168         if (sb->s_dirt && sb->s_op->write_super)
169                 sb->s_op->write_super(sb);
170         unlock_super(sb);
171
172         /* .. finally sync the buffers to disk */
173         err = sync_blockdev(sb->s_bdev);
174         if (!ret)
175                 ret = err;
176         return ret;
177 }
178
179 /**
180  * vfs_fsync - perform a fsync or fdatasync on a file
181  * @file:               file to sync
182  * @dentry:             dentry of @file
183  * @data:               only perform a fdatasync operation
184  *
185  * Write back data and metadata for @file to disk.  If @datasync is
186  * set only metadata needed to access modified file data is written.
187  *
188  * In case this function is called from nfsd @file may be %NULL and
189  * only @dentry is set.  This can only happen when the filesystem
190  * implements the export_operations API.
191  */
192 int vfs_fsync(struct file *file, struct dentry *dentry, int datasync)
193 {
194         const struct file_operations *fop;
195         struct address_space *mapping;
196         int err, ret;
197
198         /*
199          * Get mapping and operations from the file in case we have
200          * as file, or get the default values for them in case we
201          * don't have a struct file available.  Damn nfsd..
202          */
203         if (file) {
204                 mapping = file->f_mapping;
205                 fop = file->f_op;
206         } else {
207                 mapping = dentry->d_inode->i_mapping;
208                 fop = dentry->d_inode->i_fop;
209         }
210
211         if (!fop || !fop->fsync) {
212                 ret = -EINVAL;
213                 goto out;
214         }
215
216         ret = filemap_fdatawrite(mapping);
217
218         /*
219          * We need to protect against concurrent writers, which could cause
220          * livelocks in fsync_buffers_list().
221          */
222         mutex_lock(&mapping->host->i_mutex);
223         err = fop->fsync(file, dentry, datasync);
224         if (!ret)
225                 ret = err;
226         mutex_unlock(&mapping->host->i_mutex);
227         err = filemap_fdatawait(mapping);
228         if (!ret)
229                 ret = err;
230 out:
231         return ret;
232 }
233 EXPORT_SYMBOL(vfs_fsync);
234
235 static int do_fsync(unsigned int fd, int datasync)
236 {
237         struct file *file;
238         int ret = -EBADF;
239
240         file = fget(fd);
241         if (file) {
242                 ret = vfs_fsync(file, file->f_path.dentry, datasync);
243                 fput(file);
244         }
245         return ret;
246 }
247
248 SYSCALL_DEFINE1(fsync, unsigned int, fd)
249 {
250         return do_fsync(fd, 0);
251 }
252
253 SYSCALL_DEFINE1(fdatasync, unsigned int, fd)
254 {
255         return do_fsync(fd, 1);
256 }
257
258 /*
259  * sys_sync_file_range() permits finely controlled syncing over a segment of
260  * a file in the range offset .. (offset+nbytes-1) inclusive.  If nbytes is
261  * zero then sys_sync_file_range() will operate from offset out to EOF.
262  *
263  * The flag bits are:
264  *
265  * SYNC_FILE_RANGE_WAIT_BEFORE: wait upon writeout of all pages in the range
266  * before performing the write.
267  *
268  * SYNC_FILE_RANGE_WRITE: initiate writeout of all those dirty pages in the
269  * range which are not presently under writeback. Note that this may block for
270  * significant periods due to exhaustion of disk request structures.
271  *
272  * SYNC_FILE_RANGE_WAIT_AFTER: wait upon writeout of all pages in the range
273  * after performing the write.
274  *
275  * Useful combinations of the flag bits are:
276  *
277  * SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE: ensures that all pages
278  * in the range which were dirty on entry to sys_sync_file_range() are placed
279  * under writeout.  This is a start-write-for-data-integrity operation.
280  *
281  * SYNC_FILE_RANGE_WRITE: start writeout of all dirty pages in the range which
282  * are not presently under writeout.  This is an asynchronous flush-to-disk
283  * operation.  Not suitable for data integrity operations.
284  *
285  * SYNC_FILE_RANGE_WAIT_BEFORE (or SYNC_FILE_RANGE_WAIT_AFTER): wait for
286  * completion of writeout of all pages in the range.  This will be used after an
287  * earlier SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE operation to wait
288  * for that operation to complete and to return the result.
289  *
290  * SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE|SYNC_FILE_RANGE_WAIT_AFTER:
291  * a traditional sync() operation.  This is a write-for-data-integrity operation
292  * which will ensure that all pages in the range which were dirty on entry to
293  * sys_sync_file_range() are committed to disk.
294  *
295  *
296  * SYNC_FILE_RANGE_WAIT_BEFORE and SYNC_FILE_RANGE_WAIT_AFTER will detect any
297  * I/O errors or ENOSPC conditions and will return those to the caller, after
298  * clearing the EIO and ENOSPC flags in the address_space.
299  *
300  * It should be noted that none of these operations write out the file's
301  * metadata.  So unless the application is strictly performing overwrites of
302  * already-instantiated disk blocks, there are no guarantees here that the data
303  * will be available after a crash.
304  */
305 SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes,
306                                 unsigned int flags)
307 {
308         int ret;
309         struct file *file;
310         loff_t endbyte;                 /* inclusive */
311         int fput_needed;
312         umode_t i_mode;
313
314         ret = -EINVAL;
315         if (flags & ~VALID_FLAGS)
316                 goto out;
317
318         endbyte = offset + nbytes;
319
320         if ((s64)offset < 0)
321                 goto out;
322         if ((s64)endbyte < 0)
323                 goto out;
324         if (endbyte < offset)
325                 goto out;
326
327         if (sizeof(pgoff_t) == 4) {
328                 if (offset >= (0x100000000ULL << PAGE_CACHE_SHIFT)) {
329                         /*
330                          * The range starts outside a 32 bit machine's
331                          * pagecache addressing capabilities.  Let it "succeed"
332                          */
333                         ret = 0;
334                         goto out;
335                 }
336                 if (endbyte >= (0x100000000ULL << PAGE_CACHE_SHIFT)) {
337                         /*
338                          * Out to EOF
339                          */
340                         nbytes = 0;
341                 }
342         }
343
344         if (nbytes == 0)
345                 endbyte = LLONG_MAX;
346         else
347                 endbyte--;              /* inclusive */
348
349         ret = -EBADF;
350         file = fget_light(fd, &fput_needed);
351         if (!file)
352                 goto out;
353
354         i_mode = file->f_path.dentry->d_inode->i_mode;
355         ret = -ESPIPE;
356         if (!S_ISREG(i_mode) && !S_ISBLK(i_mode) && !S_ISDIR(i_mode) &&
357                         !S_ISLNK(i_mode))
358                 goto out_put;
359
360         ret = do_sync_mapping_range(file->f_mapping, offset, endbyte, flags);
361 out_put:
362         fput_light(file, fput_needed);
363 out:
364         return ret;
365 }
366 #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
367 asmlinkage long SyS_sync_file_range(long fd, loff_t offset, loff_t nbytes,
368                                     long flags)
369 {
370         return SYSC_sync_file_range((int) fd, offset, nbytes,
371                                     (unsigned int) flags);
372 }
373 SYSCALL_ALIAS(sys_sync_file_range, SyS_sync_file_range);
374 #endif
375
376 /* It would be nice if people remember that not all the world's an i386
377    when they introduce new system calls */
378 SYSCALL_DEFINE(sync_file_range2)(int fd, unsigned int flags,
379                                  loff_t offset, loff_t nbytes)
380 {
381         return sys_sync_file_range(fd, offset, nbytes, flags);
382 }
383 #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
384 asmlinkage long SyS_sync_file_range2(long fd, long flags,
385                                      loff_t offset, loff_t nbytes)
386 {
387         return SYSC_sync_file_range2((int) fd, (unsigned int) flags,
388                                      offset, nbytes);
389 }
390 SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2);
391 #endif
392
393 /*
394  * `endbyte' is inclusive
395  */
396 int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
397                           loff_t endbyte, unsigned int flags)
398 {
399         int ret;
400
401         if (!mapping) {
402                 ret = -EINVAL;
403                 goto out;
404         }
405
406         ret = 0;
407         if (flags & SYNC_FILE_RANGE_WAIT_BEFORE) {
408                 ret = wait_on_page_writeback_range(mapping,
409                                         offset >> PAGE_CACHE_SHIFT,
410                                         endbyte >> PAGE_CACHE_SHIFT);
411                 if (ret < 0)
412                         goto out;
413         }
414
415         if (flags & SYNC_FILE_RANGE_WRITE) {
416                 ret = __filemap_fdatawrite_range(mapping, offset, endbyte,
417                                                 WB_SYNC_ALL);
418                 if (ret < 0)
419                         goto out;
420         }
421
422         if (flags & SYNC_FILE_RANGE_WAIT_AFTER) {
423                 ret = wait_on_page_writeback_range(mapping,
424                                         offset >> PAGE_CACHE_SHIFT,
425                                         endbyte >> PAGE_CACHE_SHIFT);
426         }
427 out:
428         return ret;
429 }
430 EXPORT_SYMBOL_GPL(do_sync_mapping_range);