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