1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/backing-dev.h>
23#include <linux/buffer_head.h>
24#include <linux/gfp.h>
25#include <linux/pagemap.h>
26#include <linux/pagevec.h>
27#include <linux/sched/signal.h>
28#include <linux/swap.h>
29#include <linux/uio.h>
30#include <linux/writeback.h>
31
32#include <asm/page.h>
33#include <linux/uaccess.h>
34
35#include "attrib.h"
36#include "bitmap.h"
37#include "inode.h"
38#include "debug.h"
39#include "lcnalloc.h"
40#include "malloc.h"
41#include "mft.h"
42#include "ntfs.h"
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62static int ntfs_file_open(struct inode *vi, struct file *filp)
63{
64 if (sizeof(unsigned long) < 8) {
65 if (i_size_read(vi) > MAX_LFS_FILESIZE)
66 return -EOVERFLOW;
67 }
68 return generic_file_open(vi, filp);
69}
70
71#ifdef NTFS_RW
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109static int ntfs_attr_extend_initialized(ntfs_inode *ni, const s64 new_init_size)
110{
111 s64 old_init_size;
112 loff_t old_i_size;
113 pgoff_t index, end_index;
114 unsigned long flags;
115 struct inode *vi = VFS_I(ni);
116 ntfs_inode *base_ni;
117 MFT_RECORD *m = NULL;
118 ATTR_RECORD *a;
119 ntfs_attr_search_ctx *ctx = NULL;
120 struct address_space *mapping;
121 struct page *page = NULL;
122 u8 *kattr;
123 int err;
124 u32 attr_len;
125
126 read_lock_irqsave(&ni->size_lock, flags);
127 old_init_size = ni->initialized_size;
128 old_i_size = i_size_read(vi);
129 BUG_ON(new_init_size > ni->allocated_size);
130 read_unlock_irqrestore(&ni->size_lock, flags);
131 ntfs_debug("Entering for i_ino 0x%lx, attribute type 0x%x, "
132 "old_initialized_size 0x%llx, "
133 "new_initialized_size 0x%llx, i_size 0x%llx.",
134 vi->i_ino, (unsigned)le32_to_cpu(ni->type),
135 (unsigned long long)old_init_size,
136 (unsigned long long)new_init_size, old_i_size);
137 if (!NInoAttr(ni))
138 base_ni = ni;
139 else
140 base_ni = ni->ext.base_ntfs_ino;
141
142 if (NInoNonResident(ni))
143 goto do_non_resident_extend;
144 BUG_ON(old_init_size != old_i_size);
145 m = map_mft_record(base_ni);
146 if (IS_ERR(m)) {
147 err = PTR_ERR(m);
148 m = NULL;
149 goto err_out;
150 }
151 ctx = ntfs_attr_get_search_ctx(base_ni, m);
152 if (unlikely(!ctx)) {
153 err = -ENOMEM;
154 goto err_out;
155 }
156 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
157 CASE_SENSITIVE, 0, NULL, 0, ctx);
158 if (unlikely(err)) {
159 if (err == -ENOENT)
160 err = -EIO;
161 goto err_out;
162 }
163 m = ctx->mrec;
164 a = ctx->attr;
165 BUG_ON(a->non_resident);
166
167 attr_len = le32_to_cpu(a->data.resident.value_length);
168 BUG_ON(old_i_size != (loff_t)attr_len);
169
170
171
172
173 kattr = (u8*)a + le16_to_cpu(a->data.resident.value_offset);
174 memset(kattr + attr_len, 0, new_init_size - attr_len);
175 a->data.resident.value_length = cpu_to_le32((u32)new_init_size);
176
177 write_lock_irqsave(&ni->size_lock, flags);
178 i_size_write(vi, new_init_size);
179 ni->initialized_size = new_init_size;
180 write_unlock_irqrestore(&ni->size_lock, flags);
181 goto done;
182do_non_resident_extend:
183
184
185
186
187
188 if (new_init_size > old_i_size) {
189 m = map_mft_record(base_ni);
190 if (IS_ERR(m)) {
191 err = PTR_ERR(m);
192 m = NULL;
193 goto err_out;
194 }
195 ctx = ntfs_attr_get_search_ctx(base_ni, m);
196 if (unlikely(!ctx)) {
197 err = -ENOMEM;
198 goto err_out;
199 }
200 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
201 CASE_SENSITIVE, 0, NULL, 0, ctx);
202 if (unlikely(err)) {
203 if (err == -ENOENT)
204 err = -EIO;
205 goto err_out;
206 }
207 m = ctx->mrec;
208 a = ctx->attr;
209 BUG_ON(!a->non_resident);
210 BUG_ON(old_i_size != (loff_t)
211 sle64_to_cpu(a->data.non_resident.data_size));
212 a->data.non_resident.data_size = cpu_to_sle64(new_init_size);
213 flush_dcache_mft_record_page(ctx->ntfs_ino);
214 mark_mft_record_dirty(ctx->ntfs_ino);
215
216 i_size_write(vi, new_init_size);
217 ntfs_attr_put_search_ctx(ctx);
218 ctx = NULL;
219 unmap_mft_record(base_ni);
220 m = NULL;
221 }
222 mapping = vi->i_mapping;
223 index = old_init_size >> PAGE_SHIFT;
224 end_index = (new_init_size + PAGE_SIZE - 1) >> PAGE_SHIFT;
225 do {
226
227
228
229
230 page = read_mapping_page(mapping, index, NULL);
231 if (IS_ERR(page)) {
232 err = PTR_ERR(page);
233 goto init_err_out;
234 }
235 if (unlikely(PageError(page))) {
236 put_page(page);
237 err = -EIO;
238 goto init_err_out;
239 }
240
241
242
243
244 write_lock_irqsave(&ni->size_lock, flags);
245 ni->initialized_size = (s64)(index + 1) << PAGE_SHIFT;
246 if (ni->initialized_size > new_init_size)
247 ni->initialized_size = new_init_size;
248 write_unlock_irqrestore(&ni->size_lock, flags);
249
250 set_page_dirty(page);
251 put_page(page);
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279 balance_dirty_pages_ratelimited(mapping);
280 cond_resched();
281 } while (++index < end_index);
282 read_lock_irqsave(&ni->size_lock, flags);
283 BUG_ON(ni->initialized_size != new_init_size);
284 read_unlock_irqrestore(&ni->size_lock, flags);
285
286 m = map_mft_record(base_ni);
287 if (IS_ERR(m)) {
288 err = PTR_ERR(m);
289 m = NULL;
290 goto init_err_out;
291 }
292 ctx = ntfs_attr_get_search_ctx(base_ni, m);
293 if (unlikely(!ctx)) {
294 err = -ENOMEM;
295 goto init_err_out;
296 }
297 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
298 CASE_SENSITIVE, 0, NULL, 0, ctx);
299 if (unlikely(err)) {
300 if (err == -ENOENT)
301 err = -EIO;
302 goto init_err_out;
303 }
304 m = ctx->mrec;
305 a = ctx->attr;
306 BUG_ON(!a->non_resident);
307 a->data.non_resident.initialized_size = cpu_to_sle64(new_init_size);
308done:
309 flush_dcache_mft_record_page(ctx->ntfs_ino);
310 mark_mft_record_dirty(ctx->ntfs_ino);
311 if (ctx)
312 ntfs_attr_put_search_ctx(ctx);
313 if (m)
314 unmap_mft_record(base_ni);
315 ntfs_debug("Done, initialized_size 0x%llx, i_size 0x%llx.",
316 (unsigned long long)new_init_size, i_size_read(vi));
317 return 0;
318init_err_out:
319 write_lock_irqsave(&ni->size_lock, flags);
320 ni->initialized_size = old_init_size;
321 write_unlock_irqrestore(&ni->size_lock, flags);
322err_out:
323 if (ctx)
324 ntfs_attr_put_search_ctx(ctx);
325 if (m)
326 unmap_mft_record(base_ni);
327 ntfs_debug("Failed. Returning error code %i.", err);
328 return err;
329}
330
331static ssize_t ntfs_prepare_file_for_write(struct kiocb *iocb,
332 struct iov_iter *from)
333{
334 loff_t pos;
335 s64 end, ll;
336 ssize_t err;
337 unsigned long flags;
338 struct file *file = iocb->ki_filp;
339 struct inode *vi = file_inode(file);
340 ntfs_inode *base_ni, *ni = NTFS_I(vi);
341 ntfs_volume *vol = ni->vol;
342
343 ntfs_debug("Entering for i_ino 0x%lx, attribute type 0x%x, pos "
344 "0x%llx, count 0x%zx.", vi->i_ino,
345 (unsigned)le32_to_cpu(ni->type),
346 (unsigned long long)iocb->ki_pos,
347 iov_iter_count(from));
348 err = generic_write_checks(iocb, from);
349 if (unlikely(err <= 0))
350 goto out;
351
352
353
354
355 BUG_ON(NInoMstProtected(ni));
356 BUG_ON(ni->type != AT_DATA);
357
358 if (NInoEncrypted(ni)) {
359
360
361
362
363
364 ntfs_debug("Denying write access to encrypted file.");
365 err = -EACCES;
366 goto out;
367 }
368 if (NInoCompressed(ni)) {
369
370 BUG_ON(ni->name_len);
371
372
373
374
375
376
377 ntfs_error(vi->i_sb, "Writing to compressed files is not "
378 "implemented yet. Sorry.");
379 err = -EOPNOTSUPP;
380 goto out;
381 }
382 base_ni = ni;
383 if (NInoAttr(ni))
384 base_ni = ni->ext.base_ntfs_ino;
385 err = file_remove_privs(file);
386 if (unlikely(err))
387 goto out;
388
389
390
391
392 file_update_time(file);
393 pos = iocb->ki_pos;
394
395 end = (pos + iov_iter_count(from) + vol->cluster_size_mask) &
396 ~(u64)vol->cluster_size_mask;
397
398
399
400
401 read_lock_irqsave(&ni->size_lock, flags);
402 ll = ni->allocated_size;
403 read_unlock_irqrestore(&ni->size_lock, flags);
404 if (end > ll) {
405
406
407
408
409
410
411
412 ll = ntfs_attr_extend_allocation(ni, end, -1, pos);
413 if (likely(ll >= 0)) {
414 BUG_ON(pos >= ll);
415
416 if (end > ll) {
417 ntfs_debug("Truncating write to inode 0x%lx, "
418 "attribute type 0x%x, because "
419 "the allocation was only "
420 "partially extended.",
421 vi->i_ino, (unsigned)
422 le32_to_cpu(ni->type));
423 iov_iter_truncate(from, ll - pos);
424 }
425 } else {
426 err = ll;
427 read_lock_irqsave(&ni->size_lock, flags);
428 ll = ni->allocated_size;
429 read_unlock_irqrestore(&ni->size_lock, flags);
430
431 if (pos < ll) {
432 ntfs_debug("Truncating write to inode 0x%lx "
433 "attribute type 0x%x, because "
434 "extending the allocation "
435 "failed (error %d).",
436 vi->i_ino, (unsigned)
437 le32_to_cpu(ni->type),
438 (int)-err);
439 iov_iter_truncate(from, ll - pos);
440 } else {
441 if (err != -ENOSPC)
442 ntfs_error(vi->i_sb, "Cannot perform "
443 "write to inode "
444 "0x%lx, attribute "
445 "type 0x%x, because "
446 "extending the "
447 "allocation failed "
448 "(error %ld).",
449 vi->i_ino, (unsigned)
450 le32_to_cpu(ni->type),
451 (long)-err);
452 else
453 ntfs_debug("Cannot perform write to "
454 "inode 0x%lx, "
455 "attribute type 0x%x, "
456 "because there is not "
457 "space left.",
458 vi->i_ino, (unsigned)
459 le32_to_cpu(ni->type));
460 goto out;
461 }
462 }
463 }
464
465
466
467
468
469
470
471 read_lock_irqsave(&ni->size_lock, flags);
472 ll = ni->initialized_size;
473 read_unlock_irqrestore(&ni->size_lock, flags);
474 if (pos > ll) {
475
476
477
478
479 inode_dio_wait(vi);
480 err = ntfs_attr_extend_initialized(ni, pos);
481 if (unlikely(err < 0))
482 ntfs_error(vi->i_sb, "Cannot perform write to inode "
483 "0x%lx, attribute type 0x%x, because "
484 "extending the initialized size "
485 "failed (error %d).", vi->i_ino,
486 (unsigned)le32_to_cpu(ni->type),
487 (int)-err);
488 }
489out:
490 return err;
491}
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508static inline int __ntfs_grab_cache_pages(struct address_space *mapping,
509 pgoff_t index, const unsigned nr_pages, struct page **pages,
510 struct page **cached_page)
511{
512 int err, nr;
513
514 BUG_ON(!nr_pages);
515 err = nr = 0;
516 do {
517 pages[nr] = find_get_page_flags(mapping, index, FGP_LOCK |
518 FGP_ACCESSED);
519 if (!pages[nr]) {
520 if (!*cached_page) {
521 *cached_page = page_cache_alloc(mapping);
522 if (unlikely(!*cached_page)) {
523 err = -ENOMEM;
524 goto err_out;
525 }
526 }
527 err = add_to_page_cache_lru(*cached_page, mapping,
528 index,
529 mapping_gfp_constraint(mapping, GFP_KERNEL));
530 if (unlikely(err)) {
531 if (err == -EEXIST)
532 continue;
533 goto err_out;
534 }
535 pages[nr] = *cached_page;
536 *cached_page = NULL;
537 }
538 index++;
539 nr++;
540 } while (nr < nr_pages);
541out:
542 return err;
543err_out:
544 while (nr > 0) {
545 unlock_page(pages[--nr]);
546 put_page(pages[nr]);
547 }
548 goto out;
549}
550
551static inline int ntfs_submit_bh_for_read(struct buffer_head *bh)
552{
553 lock_buffer(bh);
554 get_bh(bh);
555 bh->b_end_io = end_buffer_read_sync;
556 return submit_bh(REQ_OP_READ, 0, bh);
557}
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584static int ntfs_prepare_pages_for_non_resident_write(struct page **pages,
585 unsigned nr_pages, s64 pos, size_t bytes)
586{
587 VCN vcn, highest_vcn = 0, cpos, cend, bh_cpos, bh_cend;
588 LCN lcn;
589 s64 bh_pos, vcn_len, end, initialized_size;
590 sector_t lcn_block;
591 struct page *page;
592 struct inode *vi;
593 ntfs_inode *ni, *base_ni = NULL;
594 ntfs_volume *vol;
595 runlist_element *rl, *rl2;
596 struct buffer_head *bh, *head, *wait[2], **wait_bh = wait;
597 ntfs_attr_search_ctx *ctx = NULL;
598 MFT_RECORD *m = NULL;
599 ATTR_RECORD *a = NULL;
600 unsigned long flags;
601 u32 attr_rec_len = 0;
602 unsigned blocksize, u;
603 int err, mp_size;
604 bool rl_write_locked, was_hole, is_retry;
605 unsigned char blocksize_bits;
606 struct {
607 u8 runlist_merged:1;
608 u8 mft_attr_mapped:1;
609 u8 mp_rebuilt:1;
610 u8 attr_switched:1;
611 } status = { 0, 0, 0, 0 };
612
613 BUG_ON(!nr_pages);
614 BUG_ON(!pages);
615 BUG_ON(!*pages);
616 vi = pages[0]->mapping->host;
617 ni = NTFS_I(vi);
618 vol = ni->vol;
619 ntfs_debug("Entering for inode 0x%lx, attribute type 0x%x, start page "
620 "index 0x%lx, nr_pages 0x%x, pos 0x%llx, bytes 0x%zx.",
621 vi->i_ino, ni->type, pages[0]->index, nr_pages,
622 (long long)pos, bytes);
623 blocksize = vol->sb->s_blocksize;
624 blocksize_bits = vol->sb->s_blocksize_bits;
625 u = 0;
626 do {
627 page = pages[u];
628 BUG_ON(!page);
629
630
631
632
633 if (!page_has_buffers(page)) {
634 create_empty_buffers(page, blocksize, 0);
635 if (unlikely(!page_has_buffers(page)))
636 return -ENOMEM;
637 }
638 } while (++u < nr_pages);
639 rl_write_locked = false;
640 rl = NULL;
641 err = 0;
642 vcn = lcn = -1;
643 vcn_len = 0;
644 lcn_block = -1;
645 was_hole = false;
646 cpos = pos >> vol->cluster_size_bits;
647 end = pos + bytes;
648 cend = (end + vol->cluster_size - 1) >> vol->cluster_size_bits;
649
650
651
652
653 u = 0;
654do_next_page:
655 page = pages[u];
656 bh_pos = (s64)page->index << PAGE_SHIFT;
657 bh = head = page_buffers(page);
658 do {
659 VCN cdelta;
660 s64 bh_end;
661 unsigned bh_cofs;
662
663
664 if (buffer_new(bh))
665 clear_buffer_new(bh);
666 bh_end = bh_pos + blocksize;
667 bh_cpos = bh_pos >> vol->cluster_size_bits;
668 bh_cofs = bh_pos & vol->cluster_size_mask;
669 if (buffer_mapped(bh)) {
670
671
672
673
674 if (buffer_uptodate(bh))
675 continue;
676
677
678
679
680 if (PageUptodate(page)) {
681 set_buffer_uptodate(bh);
682 continue;
683 }
684
685
686
687
688
689 if ((bh_pos < pos && bh_end > pos) ||
690 (bh_pos < end && bh_end > end)) {
691
692
693
694
695
696 read_lock_irqsave(&ni->size_lock, flags);
697 initialized_size = ni->initialized_size;
698 read_unlock_irqrestore(&ni->size_lock, flags);
699 if (bh_pos < initialized_size) {
700 ntfs_submit_bh_for_read(bh);
701 *wait_bh++ = bh;
702 } else {
703 zero_user(page, bh_offset(bh),
704 blocksize);
705 set_buffer_uptodate(bh);
706 }
707 }
708 continue;
709 }
710
711 bh->b_bdev = vol->sb->s_bdev;
712
713
714
715
716
717
718
719
720 cdelta = bh_cpos - vcn;
721 if (likely(!cdelta || (cdelta > 0 && cdelta < vcn_len))) {
722map_buffer_cached:
723 BUG_ON(lcn < 0);
724 bh->b_blocknr = lcn_block +
725 (cdelta << (vol->cluster_size_bits -
726 blocksize_bits)) +
727 (bh_cofs >> blocksize_bits);
728 set_buffer_mapped(bh);
729
730
731
732
733
734
735
736
737
738 if (PageUptodate(page)) {
739 if (!buffer_uptodate(bh))
740 set_buffer_uptodate(bh);
741 if (unlikely(was_hole)) {
742
743 clean_bdev_bh_alias(bh);
744 if (bh_end <= pos || bh_pos >= end)
745 mark_buffer_dirty(bh);
746 else
747 set_buffer_new(bh);
748 }
749 continue;
750 }
751
752 if (likely(!was_hole)) {
753
754
755
756
757
758
759 if (!buffer_uptodate(bh) && bh_pos < end &&
760 bh_end > pos &&
761 (bh_pos < pos ||
762 bh_end > end)) {
763
764
765
766
767
768
769 read_lock_irqsave(&ni->size_lock,
770 flags);
771 initialized_size = ni->initialized_size;
772 read_unlock_irqrestore(&ni->size_lock,
773 flags);
774 if (bh_pos < initialized_size) {
775 ntfs_submit_bh_for_read(bh);
776 *wait_bh++ = bh;
777 } else {
778 zero_user(page, bh_offset(bh),
779 blocksize);
780 set_buffer_uptodate(bh);
781 }
782 }
783 continue;
784 }
785
786 clean_bdev_bh_alias(bh);
787
788
789
790
791
792
793
794
795 if (bh_end <= pos || bh_pos >= end) {
796 if (!buffer_uptodate(bh)) {
797 zero_user(page, bh_offset(bh),
798 blocksize);
799 set_buffer_uptodate(bh);
800 }
801 mark_buffer_dirty(bh);
802 continue;
803 }
804 set_buffer_new(bh);
805 if (!buffer_uptodate(bh) &&
806 (bh_pos < pos || bh_end > end)) {
807 u8 *kaddr;
808 unsigned pofs;
809
810 kaddr = kmap_atomic(page);
811 if (bh_pos < pos) {
812 pofs = bh_pos & ~PAGE_MASK;
813 memset(kaddr + pofs, 0, pos - bh_pos);
814 }
815 if (bh_end > end) {
816 pofs = end & ~PAGE_MASK;
817 memset(kaddr + pofs, 0, bh_end - end);
818 }
819 kunmap_atomic(kaddr);
820 flush_dcache_page(page);
821 }
822 continue;
823 }
824
825
826
827
828
829 read_lock_irqsave(&ni->size_lock, flags);
830 initialized_size = ni->allocated_size;
831 read_unlock_irqrestore(&ni->size_lock, flags);
832 if (bh_pos > initialized_size) {
833 if (PageUptodate(page)) {
834 if (!buffer_uptodate(bh))
835 set_buffer_uptodate(bh);
836 } else if (!buffer_uptodate(bh)) {
837 zero_user(page, bh_offset(bh), blocksize);
838 set_buffer_uptodate(bh);
839 }
840 continue;
841 }
842 is_retry = false;
843 if (!rl) {
844 down_read(&ni->runlist.lock);
845retry_remap:
846 rl = ni->runlist.rl;
847 }
848 if (likely(rl != NULL)) {
849
850 while (rl->length && rl[1].vcn <= bh_cpos)
851 rl++;
852 lcn = ntfs_rl_vcn_to_lcn(rl, bh_cpos);
853 if (likely(lcn >= 0)) {
854
855
856
857
858 was_hole = false;
859 vcn = bh_cpos;
860 vcn_len = rl[1].vcn - vcn;
861 lcn_block = lcn << (vol->cluster_size_bits -
862 blocksize_bits);
863 cdelta = 0;
864
865
866
867
868
869
870
871 if (likely(vcn + vcn_len >= cend)) {
872 if (rl_write_locked) {
873 up_write(&ni->runlist.lock);
874 rl_write_locked = false;
875 } else
876 up_read(&ni->runlist.lock);
877 rl = NULL;
878 }
879 goto map_buffer_cached;
880 }
881 } else
882 lcn = LCN_RL_NOT_MAPPED;
883
884
885
886
887 if (unlikely(lcn != LCN_HOLE && lcn != LCN_ENOENT)) {
888 if (likely(!is_retry && lcn == LCN_RL_NOT_MAPPED)) {
889
890 if (!rl_write_locked) {
891
892
893
894
895
896
897
898 up_read(&ni->runlist.lock);
899 down_write(&ni->runlist.lock);
900 rl_write_locked = true;
901 goto retry_remap;
902 }
903 err = ntfs_map_runlist_nolock(ni, bh_cpos,
904 NULL);
905 if (likely(!err)) {
906 is_retry = true;
907 goto retry_remap;
908 }
909
910
911
912
913
914 if (err == -ENOENT) {
915 lcn = LCN_ENOENT;
916 err = 0;
917 goto rl_not_mapped_enoent;
918 }
919 } else
920 err = -EIO;
921
922 bh->b_blocknr = -1;
923 ntfs_error(vol->sb, "Failed to write to inode 0x%lx, "
924 "attribute type 0x%x, vcn 0x%llx, "
925 "vcn offset 0x%x, because its "
926 "location on disk could not be "
927 "determined%s (error code %i).",
928 ni->mft_no, ni->type,
929 (unsigned long long)bh_cpos,
930 (unsigned)bh_pos &
931 vol->cluster_size_mask,
932 is_retry ? " even after retrying" : "",
933 err);
934 break;
935 }
936rl_not_mapped_enoent:
937
938
939
940
941
942
943
944 if (unlikely(vol->cluster_size < PAGE_SIZE)) {
945 bh_cend = (bh_end + vol->cluster_size - 1) >>
946 vol->cluster_size_bits;
947 if ((bh_cend <= cpos || bh_cpos >= cend)) {
948 bh->b_blocknr = -1;
949
950
951
952
953
954
955
956
957 if (PageUptodate(page)) {
958 if (!buffer_uptodate(bh))
959 set_buffer_uptodate(bh);
960 } else if (!buffer_uptodate(bh)) {
961 zero_user(page, bh_offset(bh),
962 blocksize);
963 set_buffer_uptodate(bh);
964 }
965 continue;
966 }
967 }
968
969
970
971
972 BUG_ON(lcn != LCN_HOLE);
973
974
975
976
977
978 BUG_ON(!rl);
979 if (!rl_write_locked) {
980 up_read(&ni->runlist.lock);
981 down_write(&ni->runlist.lock);
982 rl_write_locked = true;
983 goto retry_remap;
984 }
985
986 BUG_ON(rl->lcn != LCN_HOLE);
987 lcn = -1;
988 rl2 = rl;
989 while (--rl2 >= ni->runlist.rl) {
990 if (rl2->lcn >= 0) {
991 lcn = rl2->lcn + rl2->length;
992 break;
993 }
994 }
995 rl2 = ntfs_cluster_alloc(vol, bh_cpos, 1, lcn, DATA_ZONE,
996 false);
997 if (IS_ERR(rl2)) {
998 err = PTR_ERR(rl2);
999 ntfs_debug("Failed to allocate cluster, error code %i.",
1000 err);
1001 break;
1002 }
1003 lcn = rl2->lcn;
1004 rl = ntfs_runlists_merge(ni->runlist.rl, rl2);
1005 if (IS_ERR(rl)) {
1006 err = PTR_ERR(rl);
1007 if (err != -ENOMEM)
1008 err = -EIO;
1009 if (ntfs_cluster_free_from_rl(vol, rl2)) {
1010 ntfs_error(vol->sb, "Failed to release "
1011 "allocated cluster in error "
1012 "code path. Run chkdsk to "
1013 "recover the lost cluster.");
1014 NVolSetErrors(vol);
1015 }
1016 ntfs_free(rl2);
1017 break;
1018 }
1019 ni->runlist.rl = rl;
1020 status.runlist_merged = 1;
1021 ntfs_debug("Allocated cluster, lcn 0x%llx.",
1022 (unsigned long long)lcn);
1023
1024 if (!NInoAttr(ni))
1025 base_ni = ni;
1026 else
1027 base_ni = ni->ext.base_ntfs_ino;
1028 m = map_mft_record(base_ni);
1029 if (IS_ERR(m)) {
1030 err = PTR_ERR(m);
1031 break;
1032 }
1033 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1034 if (unlikely(!ctx)) {
1035 err = -ENOMEM;
1036 unmap_mft_record(base_ni);
1037 break;
1038 }
1039 status.mft_attr_mapped = 1;
1040 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1041 CASE_SENSITIVE, bh_cpos, NULL, 0, ctx);
1042 if (unlikely(err)) {
1043 if (err == -ENOENT)
1044 err = -EIO;
1045 break;
1046 }
1047 m = ctx->mrec;
1048 a = ctx->attr;
1049
1050
1051
1052
1053
1054
1055
1056 vcn = sle64_to_cpu(a->data.non_resident.lowest_vcn);
1057 rl2 = ntfs_rl_find_vcn_nolock(rl, vcn);
1058 BUG_ON(!rl2);
1059 BUG_ON(!rl2->length);
1060 BUG_ON(rl2->lcn < LCN_HOLE);
1061 highest_vcn = sle64_to_cpu(a->data.non_resident.highest_vcn);
1062
1063
1064
1065
1066 if (!highest_vcn)
1067 highest_vcn = (sle64_to_cpu(
1068 a->data.non_resident.allocated_size) >>
1069 vol->cluster_size_bits) - 1;
1070
1071
1072
1073
1074 mp_size = ntfs_get_size_for_mapping_pairs(vol, rl2, vcn,
1075 highest_vcn);
1076 if (unlikely(mp_size <= 0)) {
1077 if (!(err = mp_size))
1078 err = -EIO;
1079 ntfs_debug("Failed to get size for mapping pairs "
1080 "array, error code %i.", err);
1081 break;
1082 }
1083
1084
1085
1086
1087 attr_rec_len = le32_to_cpu(a->length);
1088 err = ntfs_attr_record_resize(m, a, mp_size + le16_to_cpu(
1089 a->data.non_resident.mapping_pairs_offset));
1090 if (unlikely(err)) {
1091 BUG_ON(err != -ENOSPC);
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104 ntfs_error(vol->sb, "Not enough space in the mft "
1105 "record for the extended attribute "
1106 "record. This case is not "
1107 "implemented yet.");
1108 err = -EOPNOTSUPP;
1109 break ;
1110 }
1111 status.mp_rebuilt = 1;
1112
1113
1114
1115
1116 err = ntfs_mapping_pairs_build(vol, (u8*)a + le16_to_cpu(
1117 a->data.non_resident.mapping_pairs_offset),
1118 mp_size, rl2, vcn, highest_vcn, NULL);
1119 if (unlikely(err)) {
1120 ntfs_error(vol->sb, "Cannot fill hole in inode 0x%lx, "
1121 "attribute type 0x%x, because building "
1122 "the mapping pairs failed with error "
1123 "code %i.", vi->i_ino,
1124 (unsigned)le32_to_cpu(ni->type), err);
1125 err = -EIO;
1126 break;
1127 }
1128
1129 if (unlikely(!a->data.non_resident.highest_vcn))
1130 a->data.non_resident.highest_vcn =
1131 cpu_to_sle64(highest_vcn);
1132
1133
1134
1135
1136 if (likely(NInoSparse(ni) || NInoCompressed(ni))) {
1137
1138
1139
1140
1141
1142 if (a->data.non_resident.lowest_vcn) {
1143 flush_dcache_mft_record_page(ctx->ntfs_ino);
1144 mark_mft_record_dirty(ctx->ntfs_ino);
1145 ntfs_attr_reinit_search_ctx(ctx);
1146 err = ntfs_attr_lookup(ni->type, ni->name,
1147 ni->name_len, CASE_SENSITIVE,
1148 0, NULL, 0, ctx);
1149 if (unlikely(err)) {
1150 status.attr_switched = 1;
1151 break;
1152 }
1153
1154 a = ctx->attr;
1155 }
1156 write_lock_irqsave(&ni->size_lock, flags);
1157 ni->itype.compressed.size += vol->cluster_size;
1158 a->data.non_resident.compressed_size =
1159 cpu_to_sle64(ni->itype.compressed.size);
1160 write_unlock_irqrestore(&ni->size_lock, flags);
1161 }
1162
1163 flush_dcache_mft_record_page(ctx->ntfs_ino);
1164 mark_mft_record_dirty(ctx->ntfs_ino);
1165 ntfs_attr_put_search_ctx(ctx);
1166 unmap_mft_record(base_ni);
1167
1168 status.runlist_merged = 0;
1169 status.mft_attr_mapped = 0;
1170 status.mp_rebuilt = 0;
1171
1172 was_hole = true;
1173 vcn = bh_cpos;
1174 vcn_len = 1;
1175 lcn_block = lcn << (vol->cluster_size_bits - blocksize_bits);
1176 cdelta = 0;
1177
1178
1179
1180
1181
1182 if (likely(vcn + vcn_len >= cend)) {
1183 up_write(&ni->runlist.lock);
1184 rl_write_locked = false;
1185 rl = NULL;
1186 }
1187 goto map_buffer_cached;
1188 } while (bh_pos += blocksize, (bh = bh->b_this_page) != head);
1189
1190 if (likely(!err && ++u < nr_pages))
1191 goto do_next_page;
1192
1193 if (likely(!err)) {
1194 if (unlikely(rl_write_locked)) {
1195 up_write(&ni->runlist.lock);
1196 rl_write_locked = false;
1197 } else if (unlikely(rl))
1198 up_read(&ni->runlist.lock);
1199 rl = NULL;
1200 }
1201
1202 read_lock_irqsave(&ni->size_lock, flags);
1203 initialized_size = ni->initialized_size;
1204 read_unlock_irqrestore(&ni->size_lock, flags);
1205 while (wait_bh > wait) {
1206 bh = *--wait_bh;
1207 wait_on_buffer(bh);
1208 if (likely(buffer_uptodate(bh))) {
1209 page = bh->b_page;
1210 bh_pos = ((s64)page->index << PAGE_SHIFT) +
1211 bh_offset(bh);
1212
1213
1214
1215
1216 if (unlikely(bh_pos + blocksize > initialized_size)) {
1217 int ofs = 0;
1218
1219 if (likely(bh_pos < initialized_size))
1220 ofs = initialized_size - bh_pos;
1221 zero_user_segment(page, bh_offset(bh) + ofs,
1222 blocksize);
1223 }
1224 } else
1225 err = -EIO;
1226 }
1227 if (likely(!err)) {
1228
1229 u = 0;
1230 do {
1231 bh = head = page_buffers(pages[u]);
1232 do {
1233 if (buffer_new(bh))
1234 clear_buffer_new(bh);
1235 } while ((bh = bh->b_this_page) != head);
1236 } while (++u < nr_pages);
1237 ntfs_debug("Done.");
1238 return err;
1239 }
1240 if (status.attr_switched) {
1241
1242 ntfs_attr_reinit_search_ctx(ctx);
1243 if (ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1244 CASE_SENSITIVE, bh_cpos, NULL, 0, ctx)) {
1245 ntfs_error(vol->sb, "Failed to find required "
1246 "attribute extent of attribute in "
1247 "error code path. Run chkdsk to "
1248 "recover.");
1249 write_lock_irqsave(&ni->size_lock, flags);
1250 ni->itype.compressed.size += vol->cluster_size;
1251 write_unlock_irqrestore(&ni->size_lock, flags);
1252 flush_dcache_mft_record_page(ctx->ntfs_ino);
1253 mark_mft_record_dirty(ctx->ntfs_ino);
1254
1255
1256
1257
1258
1259 NVolSetErrors(vol);
1260 } else {
1261 m = ctx->mrec;
1262 a = ctx->attr;
1263 status.attr_switched = 0;
1264 }
1265 }
1266
1267
1268
1269
1270
1271
1272
1273 if (status.runlist_merged && !status.attr_switched) {
1274 BUG_ON(!rl_write_locked);
1275
1276 if (ntfs_rl_punch_nolock(vol, &ni->runlist, bh_cpos, 1)) {
1277 ntfs_error(vol->sb, "Failed to punch hole into "
1278 "attribute runlist in error code "
1279 "path. Run chkdsk to recover the "
1280 "lost cluster.");
1281 NVolSetErrors(vol);
1282 } else {
1283 status.runlist_merged = 0;
1284
1285
1286
1287
1288
1289 down_write(&vol->lcnbmp_lock);
1290 if (ntfs_bitmap_clear_bit(vol->lcnbmp_ino, lcn)) {
1291 ntfs_error(vol->sb, "Failed to release "
1292 "allocated cluster in error "
1293 "code path. Run chkdsk to "
1294 "recover the lost cluster.");
1295 NVolSetErrors(vol);
1296 }
1297 up_write(&vol->lcnbmp_lock);
1298 }
1299 }
1300
1301
1302
1303
1304
1305
1306 if (status.mp_rebuilt && !status.runlist_merged) {
1307 if (ntfs_attr_record_resize(m, a, attr_rec_len)) {
1308 ntfs_error(vol->sb, "Failed to restore attribute "
1309 "record in error code path. Run "
1310 "chkdsk to recover.");
1311 NVolSetErrors(vol);
1312 } else {
1313 if (ntfs_mapping_pairs_build(vol, (u8*)a +
1314 le16_to_cpu(a->data.non_resident.
1315 mapping_pairs_offset), attr_rec_len -
1316 le16_to_cpu(a->data.non_resident.
1317 mapping_pairs_offset), ni->runlist.rl,
1318 vcn, highest_vcn, NULL)) {
1319 ntfs_error(vol->sb, "Failed to restore "
1320 "mapping pairs array in error "
1321 "code path. Run chkdsk to "
1322 "recover.");
1323 NVolSetErrors(vol);
1324 }
1325 flush_dcache_mft_record_page(ctx->ntfs_ino);
1326 mark_mft_record_dirty(ctx->ntfs_ino);
1327 }
1328 }
1329
1330 if (status.mft_attr_mapped) {
1331 ntfs_attr_put_search_ctx(ctx);
1332 unmap_mft_record(base_ni);
1333 }
1334
1335 if (rl_write_locked)
1336 up_write(&ni->runlist.lock);
1337 else if (rl)
1338 up_read(&ni->runlist.lock);
1339
1340
1341
1342
1343
1344 nr_pages = u;
1345 u = 0;
1346 end = bh_cpos << vol->cluster_size_bits;
1347 do {
1348 page = pages[u];
1349 bh = head = page_buffers(page);
1350 do {
1351 if (u == nr_pages &&
1352 ((s64)page->index << PAGE_SHIFT) +
1353 bh_offset(bh) >= end)
1354 break;
1355 if (!buffer_new(bh))
1356 continue;
1357 clear_buffer_new(bh);
1358 if (!buffer_uptodate(bh)) {
1359 if (PageUptodate(page))
1360 set_buffer_uptodate(bh);
1361 else {
1362 zero_user(page, bh_offset(bh),
1363 blocksize);
1364 set_buffer_uptodate(bh);
1365 }
1366 }
1367 mark_buffer_dirty(bh);
1368 } while ((bh = bh->b_this_page) != head);
1369 } while (++u <= nr_pages);
1370 ntfs_error(vol->sb, "Failed. Returning error code %i.", err);
1371 return err;
1372}
1373
1374static inline void ntfs_flush_dcache_pages(struct page **pages,
1375 unsigned nr_pages)
1376{
1377 BUG_ON(!nr_pages);
1378
1379
1380
1381
1382
1383 do {
1384 --nr_pages;
1385 flush_dcache_page(pages[nr_pages]);
1386 } while (nr_pages > 0);
1387}
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398static inline int ntfs_commit_pages_after_non_resident_write(
1399 struct page **pages, const unsigned nr_pages,
1400 s64 pos, size_t bytes)
1401{
1402 s64 end, initialized_size;
1403 struct inode *vi;
1404 ntfs_inode *ni, *base_ni;
1405 struct buffer_head *bh, *head;
1406 ntfs_attr_search_ctx *ctx;
1407 MFT_RECORD *m;
1408 ATTR_RECORD *a;
1409 unsigned long flags;
1410 unsigned blocksize, u;
1411 int err;
1412
1413 vi = pages[0]->mapping->host;
1414 ni = NTFS_I(vi);
1415 blocksize = vi->i_sb->s_blocksize;
1416 end = pos + bytes;
1417 u = 0;
1418 do {
1419 s64 bh_pos;
1420 struct page *page;
1421 bool partial;
1422
1423 page = pages[u];
1424 bh_pos = (s64)page->index << PAGE_SHIFT;
1425 bh = head = page_buffers(page);
1426 partial = false;
1427 do {
1428 s64 bh_end;
1429
1430 bh_end = bh_pos + blocksize;
1431 if (bh_end <= pos || bh_pos >= end) {
1432 if (!buffer_uptodate(bh))
1433 partial = true;
1434 } else {
1435 set_buffer_uptodate(bh);
1436 mark_buffer_dirty(bh);
1437 }
1438 } while (bh_pos += blocksize, (bh = bh->b_this_page) != head);
1439
1440
1441
1442
1443 if (!partial && !PageUptodate(page))
1444 SetPageUptodate(page);
1445 } while (++u < nr_pages);
1446
1447
1448
1449
1450 read_lock_irqsave(&ni->size_lock, flags);
1451 initialized_size = ni->initialized_size;
1452 read_unlock_irqrestore(&ni->size_lock, flags);
1453 if (end <= initialized_size) {
1454 ntfs_debug("Done.");
1455 return 0;
1456 }
1457
1458
1459
1460
1461 if (!NInoAttr(ni))
1462 base_ni = ni;
1463 else
1464 base_ni = ni->ext.base_ntfs_ino;
1465
1466 m = map_mft_record(base_ni);
1467 if (IS_ERR(m)) {
1468 err = PTR_ERR(m);
1469 m = NULL;
1470 ctx = NULL;
1471 goto err_out;
1472 }
1473 BUG_ON(!NInoNonResident(ni));
1474 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1475 if (unlikely(!ctx)) {
1476 err = -ENOMEM;
1477 goto err_out;
1478 }
1479 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1480 CASE_SENSITIVE, 0, NULL, 0, ctx);
1481 if (unlikely(err)) {
1482 if (err == -ENOENT)
1483 err = -EIO;
1484 goto err_out;
1485 }
1486 a = ctx->attr;
1487 BUG_ON(!a->non_resident);
1488 write_lock_irqsave(&ni->size_lock, flags);
1489 BUG_ON(end > ni->allocated_size);
1490 ni->initialized_size = end;
1491 a->data.non_resident.initialized_size = cpu_to_sle64(end);
1492 if (end > i_size_read(vi)) {
1493 i_size_write(vi, end);
1494 a->data.non_resident.data_size =
1495 a->data.non_resident.initialized_size;
1496 }
1497 write_unlock_irqrestore(&ni->size_lock, flags);
1498
1499 flush_dcache_mft_record_page(ctx->ntfs_ino);
1500 mark_mft_record_dirty(ctx->ntfs_ino);
1501 ntfs_attr_put_search_ctx(ctx);
1502 unmap_mft_record(base_ni);
1503 ntfs_debug("Done.");
1504 return 0;
1505err_out:
1506 if (ctx)
1507 ntfs_attr_put_search_ctx(ctx);
1508 if (m)
1509 unmap_mft_record(base_ni);
1510 ntfs_error(vi->i_sb, "Failed to update initialized_size/i_size (error "
1511 "code %i).", err);
1512 if (err != -ENOMEM)
1513 NVolSetErrors(ni->vol);
1514 return err;
1515}
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553static int ntfs_commit_pages_after_write(struct page **pages,
1554 const unsigned nr_pages, s64 pos, size_t bytes)
1555{
1556 s64 end, initialized_size;
1557 loff_t i_size;
1558 struct inode *vi;
1559 ntfs_inode *ni, *base_ni;
1560 struct page *page;
1561 ntfs_attr_search_ctx *ctx;
1562 MFT_RECORD *m;
1563 ATTR_RECORD *a;
1564 char *kattr, *kaddr;
1565 unsigned long flags;
1566 u32 attr_len;
1567 int err;
1568
1569 BUG_ON(!nr_pages);
1570 BUG_ON(!pages);
1571 page = pages[0];
1572 BUG_ON(!page);
1573 vi = page->mapping->host;
1574 ni = NTFS_I(vi);
1575 ntfs_debug("Entering for inode 0x%lx, attribute type 0x%x, start page "
1576 "index 0x%lx, nr_pages 0x%x, pos 0x%llx, bytes 0x%zx.",
1577 vi->i_ino, ni->type, page->index, nr_pages,
1578 (long long)pos, bytes);
1579 if (NInoNonResident(ni))
1580 return ntfs_commit_pages_after_non_resident_write(pages,
1581 nr_pages, pos, bytes);
1582 BUG_ON(nr_pages > 1);
1583
1584
1585
1586
1587 if (!NInoAttr(ni))
1588 base_ni = ni;
1589 else
1590 base_ni = ni->ext.base_ntfs_ino;
1591 BUG_ON(NInoNonResident(ni));
1592
1593 m = map_mft_record(base_ni);
1594 if (IS_ERR(m)) {
1595 err = PTR_ERR(m);
1596 m = NULL;
1597 ctx = NULL;
1598 goto err_out;
1599 }
1600 ctx = ntfs_attr_get_search_ctx(base_ni, m);
1601 if (unlikely(!ctx)) {
1602 err = -ENOMEM;
1603 goto err_out;
1604 }
1605 err = ntfs_attr_lookup(ni->type, ni->name, ni->name_len,
1606 CASE_SENSITIVE, 0, NULL, 0, ctx);
1607 if (unlikely(err)) {
1608 if (err == -ENOENT)
1609 err = -EIO;
1610 goto err_out;
1611 }
1612 a = ctx->attr;
1613 BUG_ON(a->non_resident);
1614
1615 attr_len = le32_to_cpu(a->data.resident.value_length);
1616 i_size = i_size_read(vi);
1617 BUG_ON(attr_len != i_size);
1618 BUG_ON(pos > attr_len);
1619 end = pos + bytes;
1620 BUG_ON(end > le32_to_cpu(a->length) -
1621 le16_to_cpu(a->data.resident.value_offset));
1622 kattr = (u8*)a + le16_to_cpu(a->data.resident.value_offset);
1623 kaddr = kmap_atomic(page);
1624
1625 memcpy(kattr + pos, kaddr + pos, bytes);
1626
1627 if (end > attr_len) {
1628 attr_len = end;
1629 a->data.resident.value_length = cpu_to_le32(attr_len);
1630 }
1631
1632
1633
1634
1635 if (!PageUptodate(page)) {
1636 if (pos > 0)
1637 memcpy(kaddr, kattr, pos);
1638 if (end < attr_len)
1639 memcpy(kaddr + end, kattr + end, attr_len - end);
1640
1641 memset(kaddr + attr_len, 0, PAGE_SIZE - attr_len);
1642 flush_dcache_page(page);
1643 SetPageUptodate(page);
1644 }
1645 kunmap_atomic(kaddr);
1646
1647 read_lock_irqsave(&ni->size_lock, flags);
1648 initialized_size = ni->initialized_size;
1649 BUG_ON(end > ni->allocated_size);
1650 read_unlock_irqrestore(&ni->size_lock, flags);
1651 BUG_ON(initialized_size != i_size);
1652 if (end > initialized_size) {
1653 write_lock_irqsave(&ni->size_lock, flags);
1654 ni->initialized_size = end;
1655 i_size_write(vi, end);
1656 write_unlock_irqrestore(&ni->size_lock, flags);
1657 }
1658
1659 flush_dcache_mft_record_page(ctx->ntfs_ino);
1660 mark_mft_record_dirty(ctx->ntfs_ino);
1661 ntfs_attr_put_search_ctx(ctx);
1662 unmap_mft_record(base_ni);
1663 ntfs_debug("Done.");
1664 return 0;
1665err_out:
1666 if (err == -ENOMEM) {
1667 ntfs_warning(vi->i_sb, "Error allocating memory required to "
1668 "commit the write.");
1669 if (PageUptodate(page)) {
1670 ntfs_warning(vi->i_sb, "Page is uptodate, setting "
1671 "dirty so the write will be retried "
1672 "later on by the VM.");
1673
1674
1675
1676
1677 __set_page_dirty_nobuffers(page);
1678 err = 0;
1679 } else
1680 ntfs_error(vi->i_sb, "Page is not uptodate. Written "
1681 "data has been lost.");
1682 } else {
1683 ntfs_error(vi->i_sb, "Resident attribute commit write failed "
1684 "with error %i.", err);
1685 NVolSetErrors(ni->vol);
1686 }
1687 if (ctx)
1688 ntfs_attr_put_search_ctx(ctx);
1689 if (m)
1690 unmap_mft_record(base_ni);
1691 return err;
1692}
1693
1694
1695
1696
1697
1698
1699static size_t ntfs_copy_from_user_iter(struct page **pages, unsigned nr_pages,
1700 unsigned ofs, struct iov_iter *i, size_t bytes)
1701{
1702 struct page **last_page = pages + nr_pages;
1703 size_t total = 0;
1704 struct iov_iter data = *i;
1705 unsigned len, copied;
1706
1707 do {
1708 len = PAGE_SIZE - ofs;
1709 if (len > bytes)
1710 len = bytes;
1711 copied = iov_iter_copy_from_user_atomic(*pages, &data, ofs,
1712 len);
1713 total += copied;
1714 bytes -= copied;
1715 if (!bytes)
1716 break;
1717 iov_iter_advance(&data, copied);
1718 if (copied < len)
1719 goto err;
1720 ofs = 0;
1721 } while (++pages < last_page);
1722out:
1723 return total;
1724err:
1725
1726 len = PAGE_SIZE - copied;
1727 do {
1728 if (len > bytes)
1729 len = bytes;
1730 zero_user(*pages, copied, len);
1731 bytes -= len;
1732 copied = 0;
1733 len = PAGE_SIZE;
1734 } while (++pages < last_page);
1735 goto out;
1736}
1737
1738
1739
1740
1741
1742
1743
1744static ssize_t ntfs_perform_write(struct file *file, struct iov_iter *i,
1745 loff_t pos)
1746{
1747 struct address_space *mapping = file->f_mapping;
1748 struct inode *vi = mapping->host;
1749 ntfs_inode *ni = NTFS_I(vi);
1750 ntfs_volume *vol = ni->vol;
1751 struct page *pages[NTFS_MAX_PAGES_PER_CLUSTER];
1752 struct page *cached_page = NULL;
1753 VCN last_vcn;
1754 LCN lcn;
1755 size_t bytes;
1756 ssize_t status, written = 0;
1757 unsigned nr_pages;
1758
1759 ntfs_debug("Entering for i_ino 0x%lx, attribute type 0x%x, pos "
1760 "0x%llx, count 0x%lx.", vi->i_ino,
1761 (unsigned)le32_to_cpu(ni->type),
1762 (unsigned long long)pos,
1763 (unsigned long)iov_iter_count(i));
1764
1765
1766
1767
1768 if (unlikely(NInoTruncateFailed(ni))) {
1769 int err;
1770
1771 inode_dio_wait(vi);
1772 err = ntfs_truncate(vi);
1773 if (err || NInoTruncateFailed(ni)) {
1774 if (!err)
1775 err = -EIO;
1776 ntfs_error(vol->sb, "Cannot perform write to inode "
1777 "0x%lx, attribute type 0x%x, because "
1778 "ntfs_truncate() failed (error code "
1779 "%i).", vi->i_ino,
1780 (unsigned)le32_to_cpu(ni->type), err);
1781 return err;
1782 }
1783 }
1784
1785
1786
1787
1788 nr_pages = 1;
1789 if (vol->cluster_size > PAGE_SIZE && NInoNonResident(ni))
1790 nr_pages = vol->cluster_size >> PAGE_SHIFT;
1791 last_vcn = -1;
1792 do {
1793 VCN vcn;
1794 pgoff_t idx, start_idx;
1795 unsigned ofs, do_pages, u;
1796 size_t copied;
1797
1798 start_idx = idx = pos >> PAGE_SHIFT;
1799 ofs = pos & ~PAGE_MASK;
1800 bytes = PAGE_SIZE - ofs;
1801 do_pages = 1;
1802 if (nr_pages > 1) {
1803 vcn = pos >> vol->cluster_size_bits;
1804 if (vcn != last_vcn) {
1805 last_vcn = vcn;
1806
1807
1808
1809
1810
1811 down_read(&ni->runlist.lock);
1812 lcn = ntfs_attr_vcn_to_lcn_nolock(ni, pos >>
1813 vol->cluster_size_bits, false);
1814 up_read(&ni->runlist.lock);
1815 if (unlikely(lcn < LCN_HOLE)) {
1816 if (lcn == LCN_ENOMEM)
1817 status = -ENOMEM;
1818 else {
1819 status = -EIO;
1820 ntfs_error(vol->sb, "Cannot "
1821 "perform write to "
1822 "inode 0x%lx, "
1823 "attribute type 0x%x, "
1824 "because the attribute "
1825 "is corrupt.",
1826 vi->i_ino, (unsigned)
1827 le32_to_cpu(ni->type));
1828 }
1829 break;
1830 }
1831 if (lcn == LCN_HOLE) {
1832 start_idx = (pos & ~(s64)
1833 vol->cluster_size_mask)
1834 >> PAGE_SHIFT;
1835 bytes = vol->cluster_size - (pos &
1836 vol->cluster_size_mask);
1837 do_pages = nr_pages;
1838 }
1839 }
1840 }
1841 if (bytes > iov_iter_count(i))
1842 bytes = iov_iter_count(i);
1843again:
1844
1845
1846
1847
1848
1849
1850
1851
1852 if (unlikely(iov_iter_fault_in_readable(i, bytes))) {
1853 status = -EFAULT;
1854 break;
1855 }
1856
1857 status = __ntfs_grab_cache_pages(mapping, start_idx, do_pages,
1858 pages, &cached_page);
1859 if (unlikely(status))
1860 break;
1861
1862
1863
1864
1865
1866
1867 if (NInoNonResident(ni)) {
1868 status = ntfs_prepare_pages_for_non_resident_write(
1869 pages, do_pages, pos, bytes);
1870 if (unlikely(status)) {
1871 do {
1872 unlock_page(pages[--do_pages]);
1873 put_page(pages[do_pages]);
1874 } while (do_pages);
1875 break;
1876 }
1877 }
1878 u = (pos >> PAGE_SHIFT) - pages[0]->index;
1879 copied = ntfs_copy_from_user_iter(pages + u, do_pages - u, ofs,
1880 i, bytes);
1881 ntfs_flush_dcache_pages(pages + u, do_pages - u);
1882 status = 0;
1883 if (likely(copied == bytes)) {
1884 status = ntfs_commit_pages_after_write(pages, do_pages,
1885 pos, bytes);
1886 if (!status)
1887 status = bytes;
1888 }
1889 do {
1890 unlock_page(pages[--do_pages]);
1891 put_page(pages[do_pages]);
1892 } while (do_pages);
1893 if (unlikely(status < 0))
1894 break;
1895 copied = status;
1896 cond_resched();
1897 if (unlikely(!copied)) {
1898 size_t sc;
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908 sc = iov_iter_single_seg_count(i);
1909 if (bytes > sc)
1910 bytes = sc;
1911 goto again;
1912 }
1913 iov_iter_advance(i, copied);
1914 pos += copied;
1915 written += copied;
1916 balance_dirty_pages_ratelimited(mapping);
1917 if (fatal_signal_pending(current)) {
1918 status = -EINTR;
1919 break;
1920 }
1921 } while (iov_iter_count(i));
1922 if (cached_page)
1923 put_page(cached_page);
1924 ntfs_debug("Done. Returning %s (written 0x%lx, status %li).",
1925 written ? "written" : "status", (unsigned long)written,
1926 (long)status);
1927 return written ? written : status;
1928}
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939static ssize_t ntfs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
1940{
1941 struct file *file = iocb->ki_filp;
1942 struct inode *vi = file_inode(file);
1943 ssize_t written = 0;
1944 ssize_t err;
1945
1946 inode_lock(vi);
1947
1948 current->backing_dev_info = inode_to_bdi(vi);
1949 err = ntfs_prepare_file_for_write(iocb, from);
1950 if (iov_iter_count(from) && !err)
1951 written = ntfs_perform_write(file, from, iocb->ki_pos);
1952 current->backing_dev_info = NULL;
1953 inode_unlock(vi);
1954 iocb->ki_pos += written;
1955 if (likely(written > 0))
1956 written = generic_write_sync(iocb, written);
1957 return written ? written : err;
1958}
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984static int ntfs_file_fsync(struct file *filp, loff_t start, loff_t end,
1985 int datasync)
1986{
1987 struct inode *vi = filp->f_mapping->host;
1988 int err, ret = 0;
1989
1990 ntfs_debug("Entering for inode 0x%lx.", vi->i_ino);
1991
1992 err = file_write_and_wait_range(filp, start, end);
1993 if (err)
1994 return err;
1995 inode_lock(vi);
1996
1997 BUG_ON(S_ISDIR(vi->i_mode));
1998 if (!datasync || !NInoNonResident(NTFS_I(vi)))
1999 ret = __ntfs_write_inode(vi, 1);
2000 write_inode_now(vi, !datasync);
2001
2002
2003
2004
2005
2006 err = sync_blockdev(vi->i_sb->s_bdev);
2007 if (unlikely(err && !ret))
2008 ret = err;
2009 if (likely(!ret))
2010 ntfs_debug("Done.");
2011 else
2012 ntfs_warning(vi->i_sb, "Failed to f%ssync inode 0x%lx. Error "
2013 "%u.", datasync ? "data" : "", vi->i_ino, -ret);
2014 inode_unlock(vi);
2015 return ret;
2016}
2017
2018#endif
2019
2020const struct file_operations ntfs_file_ops = {
2021 .llseek = generic_file_llseek,
2022 .read_iter = generic_file_read_iter,
2023#ifdef NTFS_RW
2024 .write_iter = ntfs_file_write_iter,
2025 .fsync = ntfs_file_fsync,
2026#endif
2027 .mmap = generic_file_mmap,
2028 .open = ntfs_file_open,
2029 .splice_read = generic_file_splice_read,
2030};
2031
2032const struct inode_operations ntfs_file_inode_ops = {
2033#ifdef NTFS_RW
2034 .setattr = ntfs_setattr,
2035#endif
2036};
2037
2038const struct file_operations ntfs_empty_file_ops = {};
2039
2040const struct inode_operations ntfs_empty_inode_ops = {};
2041