1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include "xfs.h"
20#include "xfs_fs.h"
21#include "xfs_shared.h"
22#include "xfs_format.h"
23#include "xfs_log_format.h"
24#include "xfs_trans_resv.h"
25#include "xfs_mount.h"
26#include "xfs_da_format.h"
27#include "xfs_da_btree.h"
28#include "xfs_inode.h"
29#include "xfs_bmap_btree.h"
30#include "xfs_ialloc.h"
31#include "xfs_quota.h"
32#include "xfs_trans.h"
33#include "xfs_qm.h"
34#include "xfs_trans_space.h"
35#include "xfs_trace.h"
36
37
38
39
40
41
42
43
44STATIC uint
45xfs_buf_log_overhead(void)
46{
47 return round_up(sizeof(struct xlog_op_header) +
48 sizeof(struct xfs_buf_log_format), 128);
49}
50
51
52
53
54
55
56
57
58STATIC uint
59xfs_calc_buf_res(
60 uint nbufs,
61 uint size)
62{
63 return nbufs * (size + xfs_buf_log_overhead());
64}
65
66
67
68
69
70
71
72
73
74
75
76
77uint
78xfs_allocfree_log_count(
79 struct xfs_mount *mp,
80 uint num_ops)
81{
82 uint blocks;
83
84 blocks = num_ops * 2 * (2 * mp->m_ag_maxlevels - 1);
85 if (xfs_sb_version_hasrmapbt(&mp->m_sb))
86 blocks += num_ops * (2 * mp->m_rmap_maxlevels - 1);
87 if (xfs_sb_version_hasreflink(&mp->m_sb))
88 blocks += num_ops * (2 * mp->m_refc_maxlevels - 1);
89
90 return blocks;
91}
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122STATIC uint
123xfs_calc_inode_res(
124 struct xfs_mount *mp,
125 uint ninodes)
126{
127 return ninodes *
128 (4 * sizeof(struct xlog_op_header) +
129 sizeof(struct xfs_inode_log_format) +
130 mp->m_sb.sb_inodesize +
131 2 * XFS_BMBT_BLOCK_LEN(mp));
132}
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154STATIC uint
155xfs_calc_finobt_res(
156 struct xfs_mount *mp,
157 int alloc,
158 int modify)
159{
160 uint res;
161
162 if (!xfs_sb_version_hasfinobt(&mp->m_sb))
163 return 0;
164
165 res = xfs_calc_buf_res(mp->m_in_maxlevels, XFS_FSB_TO_B(mp, 1));
166 if (alloc)
167 res += xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
168 XFS_FSB_TO_B(mp, 1));
169 if (modify)
170 res += (uint)XFS_FSB_TO_B(mp, 1);
171
172 return res;
173}
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209STATIC uint
210xfs_calc_write_reservation(
211 struct xfs_mount *mp)
212{
213 return XFS_DQUOT_LOGRES(mp) +
214 MAX((xfs_calc_inode_res(mp, 1) +
215 xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK),
216 XFS_FSB_TO_B(mp, 1)) +
217 xfs_calc_buf_res(3, mp->m_sb.sb_sectsize) +
218 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 2),
219 XFS_FSB_TO_B(mp, 1))),
220 (xfs_calc_buf_res(5, mp->m_sb.sb_sectsize) +
221 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 2),
222 XFS_FSB_TO_B(mp, 1))));
223}
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238STATIC uint
239xfs_calc_itruncate_reservation(
240 struct xfs_mount *mp)
241{
242 return XFS_DQUOT_LOGRES(mp) +
243 MAX((xfs_calc_inode_res(mp, 1) +
244 xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK) + 1,
245 XFS_FSB_TO_B(mp, 1))),
246 (xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) +
247 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 4),
248 XFS_FSB_TO_B(mp, 1)) +
249 xfs_calc_buf_res(5, 0) +
250 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
251 XFS_FSB_TO_B(mp, 1)) +
252 xfs_calc_buf_res(2 + mp->m_ialloc_blks +
253 mp->m_in_maxlevels, 0)));
254}
255
256
257
258
259
260
261
262
263
264
265
266
267
268STATIC uint
269xfs_calc_rename_reservation(
270 struct xfs_mount *mp)
271{
272 return XFS_DQUOT_LOGRES(mp) +
273 MAX((xfs_calc_inode_res(mp, 4) +
274 xfs_calc_buf_res(2 * XFS_DIROP_LOG_COUNT(mp),
275 XFS_FSB_TO_B(mp, 1))),
276 (xfs_calc_buf_res(7, mp->m_sb.sb_sectsize) +
277 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 3),
278 XFS_FSB_TO_B(mp, 1))));
279}
280
281
282
283
284
285
286STATIC uint
287xfs_calc_iunlink_remove_reservation(
288 struct xfs_mount *mp)
289{
290 return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
291 max_t(uint, XFS_FSB_TO_B(mp, 1), mp->m_inode_cluster_size);
292}
293
294
295
296
297
298
299
300
301
302
303
304
305
306STATIC uint
307xfs_calc_link_reservation(
308 struct xfs_mount *mp)
309{
310 return XFS_DQUOT_LOGRES(mp) +
311 xfs_calc_iunlink_remove_reservation(mp) +
312 MAX((xfs_calc_inode_res(mp, 2) +
313 xfs_calc_buf_res(XFS_DIROP_LOG_COUNT(mp),
314 XFS_FSB_TO_B(mp, 1))),
315 (xfs_calc_buf_res(3, mp->m_sb.sb_sectsize) +
316 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
317 XFS_FSB_TO_B(mp, 1))));
318}
319
320
321
322
323
324
325STATIC uint
326xfs_calc_iunlink_add_reservation(xfs_mount_t *mp)
327{
328 return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
329 xfs_calc_inode_res(mp, 1);
330}
331
332
333
334
335
336
337
338
339
340
341
342
343
344STATIC uint
345xfs_calc_remove_reservation(
346 struct xfs_mount *mp)
347{
348 return XFS_DQUOT_LOGRES(mp) +
349 xfs_calc_iunlink_add_reservation(mp) +
350 MAX((xfs_calc_inode_res(mp, 1) +
351 xfs_calc_buf_res(XFS_DIROP_LOG_COUNT(mp),
352 XFS_FSB_TO_B(mp, 1))),
353 (xfs_calc_buf_res(4, mp->m_sb.sb_sectsize) +
354 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 2),
355 XFS_FSB_TO_B(mp, 1))));
356}
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374STATIC uint
375xfs_calc_create_resv_modify(
376 struct xfs_mount *mp)
377{
378 return xfs_calc_inode_res(mp, 2) +
379 xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
380 (uint)XFS_FSB_TO_B(mp, 1) +
381 xfs_calc_buf_res(XFS_DIROP_LOG_COUNT(mp), XFS_FSB_TO_B(mp, 1)) +
382 xfs_calc_finobt_res(mp, 1, 1);
383}
384
385
386
387
388
389
390
391
392
393STATIC uint
394xfs_calc_create_resv_alloc(
395 struct xfs_mount *mp)
396{
397 return xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) +
398 mp->m_sb.sb_sectsize +
399 xfs_calc_buf_res(mp->m_ialloc_blks, XFS_FSB_TO_B(mp, 1)) +
400 xfs_calc_buf_res(mp->m_in_maxlevels, XFS_FSB_TO_B(mp, 1)) +
401 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
402 XFS_FSB_TO_B(mp, 1));
403}
404
405STATIC uint
406__xfs_calc_create_reservation(
407 struct xfs_mount *mp)
408{
409 return XFS_DQUOT_LOGRES(mp) +
410 MAX(xfs_calc_create_resv_alloc(mp),
411 xfs_calc_create_resv_modify(mp));
412}
413
414
415
416
417
418
419
420
421
422STATIC uint
423xfs_calc_icreate_resv_alloc(
424 struct xfs_mount *mp)
425{
426 return xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) +
427 mp->m_sb.sb_sectsize +
428 xfs_calc_buf_res(mp->m_in_maxlevels, XFS_FSB_TO_B(mp, 1)) +
429 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
430 XFS_FSB_TO_B(mp, 1)) +
431 xfs_calc_finobt_res(mp, 0, 0);
432}
433
434STATIC uint
435xfs_calc_icreate_reservation(xfs_mount_t *mp)
436{
437 return XFS_DQUOT_LOGRES(mp) +
438 MAX(xfs_calc_icreate_resv_alloc(mp),
439 xfs_calc_create_resv_modify(mp));
440}
441
442STATIC uint
443xfs_calc_create_reservation(
444 struct xfs_mount *mp)
445{
446 if (xfs_sb_version_hascrc(&mp->m_sb))
447 return xfs_calc_icreate_reservation(mp);
448 return __xfs_calc_create_reservation(mp);
449
450}
451
452STATIC uint
453xfs_calc_create_tmpfile_reservation(
454 struct xfs_mount *mp)
455{
456 uint res = XFS_DQUOT_LOGRES(mp);
457
458 if (xfs_sb_version_hascrc(&mp->m_sb))
459 res += xfs_calc_icreate_resv_alloc(mp);
460 else
461 res += xfs_calc_create_resv_alloc(mp);
462
463 return res + xfs_calc_iunlink_add_reservation(mp);
464}
465
466
467
468
469STATIC uint
470xfs_calc_mkdir_reservation(
471 struct xfs_mount *mp)
472{
473 return xfs_calc_create_reservation(mp);
474}
475
476
477
478
479
480
481
482STATIC uint
483xfs_calc_symlink_reservation(
484 struct xfs_mount *mp)
485{
486 return xfs_calc_create_reservation(mp) +
487 xfs_calc_buf_res(1, MAXPATHLEN);
488}
489
490
491
492
493
494
495
496
497
498
499
500
501STATIC uint
502xfs_calc_ifree_reservation(
503 struct xfs_mount *mp)
504{
505 return XFS_DQUOT_LOGRES(mp) +
506 xfs_calc_inode_res(mp, 1) +
507 xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
508 xfs_calc_buf_res(1, XFS_FSB_TO_B(mp, 1)) +
509 xfs_calc_iunlink_remove_reservation(mp) +
510 xfs_calc_buf_res(1, 0) +
511 xfs_calc_buf_res(2 + mp->m_ialloc_blks +
512 mp->m_in_maxlevels, 0) +
513 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
514 XFS_FSB_TO_B(mp, 1)) +
515 xfs_calc_finobt_res(mp, 0, 1);
516}
517
518
519
520
521
522STATIC uint
523xfs_calc_ichange_reservation(
524 struct xfs_mount *mp)
525{
526 return XFS_DQUOT_LOGRES(mp) +
527 xfs_calc_inode_res(mp, 1) +
528 xfs_calc_buf_res(1, mp->m_sb.sb_sectsize);
529
530}
531
532
533
534
535
536
537
538STATIC uint
539xfs_calc_growdata_reservation(
540 struct xfs_mount *mp)
541{
542 return xfs_calc_buf_res(3, mp->m_sb.sb_sectsize) +
543 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
544 XFS_FSB_TO_B(mp, 1));
545}
546
547
548
549
550
551
552
553
554
555
556
557STATIC uint
558xfs_calc_growrtalloc_reservation(
559 struct xfs_mount *mp)
560{
561 return xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) +
562 xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK),
563 XFS_FSB_TO_B(mp, 1)) +
564 xfs_calc_inode_res(mp, 1) +
565 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
566 XFS_FSB_TO_B(mp, 1));
567}
568
569
570
571
572
573
574STATIC uint
575xfs_calc_growrtzero_reservation(
576 struct xfs_mount *mp)
577{
578 return xfs_calc_buf_res(1, mp->m_sb.sb_blocksize);
579}
580
581
582
583
584
585
586
587
588
589
590
591STATIC uint
592xfs_calc_growrtfree_reservation(
593 struct xfs_mount *mp)
594{
595 return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
596 xfs_calc_inode_res(mp, 2) +
597 xfs_calc_buf_res(1, mp->m_sb.sb_blocksize) +
598 xfs_calc_buf_res(1, mp->m_rsumsize);
599}
600
601
602
603
604
605STATIC uint
606xfs_calc_swrite_reservation(
607 struct xfs_mount *mp)
608{
609 return xfs_calc_inode_res(mp, 1);
610}
611
612
613
614
615
616STATIC uint
617xfs_calc_writeid_reservation(
618 struct xfs_mount *mp)
619{
620 return xfs_calc_inode_res(mp, 1);
621}
622
623
624
625
626
627
628
629
630
631STATIC uint
632xfs_calc_addafork_reservation(
633 struct xfs_mount *mp)
634{
635 return XFS_DQUOT_LOGRES(mp) +
636 xfs_calc_inode_res(mp, 1) +
637 xfs_calc_buf_res(2, mp->m_sb.sb_sectsize) +
638 xfs_calc_buf_res(1, mp->m_dir_geo->blksize) +
639 xfs_calc_buf_res(XFS_DAENTER_BMAP1B(mp, XFS_DATA_FORK) + 1,
640 XFS_FSB_TO_B(mp, 1)) +
641 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 1),
642 XFS_FSB_TO_B(mp, 1));
643}
644
645
646
647
648
649
650
651
652
653
654
655
656STATIC uint
657xfs_calc_attrinval_reservation(
658 struct xfs_mount *mp)
659{
660 return MAX((xfs_calc_inode_res(mp, 1) +
661 xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_ATTR_FORK),
662 XFS_FSB_TO_B(mp, 1))),
663 (xfs_calc_buf_res(9, mp->m_sb.sb_sectsize) +
664 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 4),
665 XFS_FSB_TO_B(mp, 1))));
666}
667
668
669
670
671
672
673
674
675
676
677
678
679STATIC uint
680xfs_calc_attrsetm_reservation(
681 struct xfs_mount *mp)
682{
683 return XFS_DQUOT_LOGRES(mp) +
684 xfs_calc_inode_res(mp, 1) +
685 xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
686 xfs_calc_buf_res(XFS_DA_NODE_MAXDEPTH, XFS_FSB_TO_B(mp, 1));
687}
688
689
690
691
692
693
694
695
696
697
698
699STATIC uint
700xfs_calc_attrsetrt_reservation(
701 struct xfs_mount *mp)
702{
703 return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize) +
704 xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_ATTR_FORK),
705 XFS_FSB_TO_B(mp, 1));
706}
707
708
709
710
711
712
713
714
715
716
717
718
719STATIC uint
720xfs_calc_attrrm_reservation(
721 struct xfs_mount *mp)
722{
723 return XFS_DQUOT_LOGRES(mp) +
724 MAX((xfs_calc_inode_res(mp, 1) +
725 xfs_calc_buf_res(XFS_DA_NODE_MAXDEPTH,
726 XFS_FSB_TO_B(mp, 1)) +
727 (uint)XFS_FSB_TO_B(mp,
728 XFS_BM_MAXLEVELS(mp, XFS_ATTR_FORK)) +
729 xfs_calc_buf_res(XFS_BM_MAXLEVELS(mp, XFS_DATA_FORK), 0)),
730 (xfs_calc_buf_res(5, mp->m_sb.sb_sectsize) +
731 xfs_calc_buf_res(xfs_allocfree_log_count(mp, 2),
732 XFS_FSB_TO_B(mp, 1))));
733}
734
735
736
737
738STATIC uint
739xfs_calc_clear_agi_bucket_reservation(
740 struct xfs_mount *mp)
741{
742 return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize);
743}
744
745
746
747
748
749STATIC uint
750xfs_calc_qm_setqlim_reservation(
751 struct xfs_mount *mp)
752{
753 return xfs_calc_buf_res(1, sizeof(struct xfs_disk_dquot));
754}
755
756
757
758
759
760
761STATIC uint
762xfs_calc_qm_dqalloc_reservation(
763 struct xfs_mount *mp)
764{
765 return xfs_calc_write_reservation(mp) +
766 xfs_calc_buf_res(1,
767 XFS_FSB_TO_B(mp, XFS_DQUOT_CLUSTER_SIZE_FSB) - 1);
768}
769
770
771
772
773
774
775STATIC uint
776xfs_calc_qm_quotaoff_reservation(
777 struct xfs_mount *mp)
778{
779 return sizeof(struct xfs_qoff_logitem) * 2 +
780 xfs_calc_buf_res(1, mp->m_sb.sb_sectsize);
781}
782
783
784
785
786
787STATIC uint
788xfs_calc_qm_quotaoff_end_reservation(
789 struct xfs_mount *mp)
790{
791 return sizeof(struct xfs_qoff_logitem) * 2;
792}
793
794
795
796
797
798STATIC uint
799xfs_calc_sb_reservation(
800 struct xfs_mount *mp)
801{
802 return xfs_calc_buf_res(1, mp->m_sb.sb_sectsize);
803}
804
805void
806xfs_trans_resv_calc(
807 struct xfs_mount *mp,
808 struct xfs_trans_resv *resp)
809{
810
811
812
813
814 resp->tr_write.tr_logres = xfs_calc_write_reservation(mp);
815 if (xfs_sb_version_hasreflink(&mp->m_sb))
816 resp->tr_write.tr_logcount = XFS_WRITE_LOG_COUNT_REFLINK;
817 else
818 resp->tr_write.tr_logcount = XFS_WRITE_LOG_COUNT;
819 resp->tr_write.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
820
821 resp->tr_itruncate.tr_logres = xfs_calc_itruncate_reservation(mp);
822 if (xfs_sb_version_hasreflink(&mp->m_sb))
823 resp->tr_itruncate.tr_logcount =
824 XFS_ITRUNCATE_LOG_COUNT_REFLINK;
825 else
826 resp->tr_itruncate.tr_logcount = XFS_ITRUNCATE_LOG_COUNT;
827 resp->tr_itruncate.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
828
829 resp->tr_rename.tr_logres = xfs_calc_rename_reservation(mp);
830 resp->tr_rename.tr_logcount = XFS_RENAME_LOG_COUNT;
831 resp->tr_rename.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
832
833 resp->tr_link.tr_logres = xfs_calc_link_reservation(mp);
834 resp->tr_link.tr_logcount = XFS_LINK_LOG_COUNT;
835 resp->tr_link.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
836
837 resp->tr_remove.tr_logres = xfs_calc_remove_reservation(mp);
838 resp->tr_remove.tr_logcount = XFS_REMOVE_LOG_COUNT;
839 resp->tr_remove.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
840
841 resp->tr_symlink.tr_logres = xfs_calc_symlink_reservation(mp);
842 resp->tr_symlink.tr_logcount = XFS_SYMLINK_LOG_COUNT;
843 resp->tr_symlink.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
844
845 resp->tr_create.tr_logres = xfs_calc_create_reservation(mp);
846 resp->tr_create.tr_logcount = XFS_CREATE_LOG_COUNT;
847 resp->tr_create.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
848
849 resp->tr_create_tmpfile.tr_logres =
850 xfs_calc_create_tmpfile_reservation(mp);
851 resp->tr_create_tmpfile.tr_logcount = XFS_CREATE_TMPFILE_LOG_COUNT;
852 resp->tr_create_tmpfile.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
853
854 resp->tr_mkdir.tr_logres = xfs_calc_mkdir_reservation(mp);
855 resp->tr_mkdir.tr_logcount = XFS_MKDIR_LOG_COUNT;
856 resp->tr_mkdir.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
857
858 resp->tr_ifree.tr_logres = xfs_calc_ifree_reservation(mp);
859 resp->tr_ifree.tr_logcount = XFS_INACTIVE_LOG_COUNT;
860 resp->tr_ifree.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
861
862 resp->tr_addafork.tr_logres = xfs_calc_addafork_reservation(mp);
863 resp->tr_addafork.tr_logcount = XFS_ADDAFORK_LOG_COUNT;
864 resp->tr_addafork.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
865
866 resp->tr_attrinval.tr_logres = xfs_calc_attrinval_reservation(mp);
867 resp->tr_attrinval.tr_logcount = XFS_ATTRINVAL_LOG_COUNT;
868 resp->tr_attrinval.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
869
870 resp->tr_attrsetm.tr_logres = xfs_calc_attrsetm_reservation(mp);
871 resp->tr_attrsetm.tr_logcount = XFS_ATTRSET_LOG_COUNT;
872 resp->tr_attrsetm.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
873
874 resp->tr_attrrm.tr_logres = xfs_calc_attrrm_reservation(mp);
875 resp->tr_attrrm.tr_logcount = XFS_ATTRRM_LOG_COUNT;
876 resp->tr_attrrm.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
877
878 resp->tr_growrtalloc.tr_logres = xfs_calc_growrtalloc_reservation(mp);
879 resp->tr_growrtalloc.tr_logcount = XFS_DEFAULT_PERM_LOG_COUNT;
880 resp->tr_growrtalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
881
882 resp->tr_qm_dqalloc.tr_logres = xfs_calc_qm_dqalloc_reservation(mp);
883 if (xfs_sb_version_hasreflink(&mp->m_sb))
884 resp->tr_qm_dqalloc.tr_logcount = XFS_WRITE_LOG_COUNT_REFLINK;
885 else
886 resp->tr_qm_dqalloc.tr_logcount = XFS_WRITE_LOG_COUNT;
887 resp->tr_qm_dqalloc.tr_logflags |= XFS_TRANS_PERM_LOG_RES;
888
889
890
891
892
893 resp->tr_qm_setqlim.tr_logres = xfs_calc_qm_setqlim_reservation(mp);
894 resp->tr_qm_setqlim.tr_logcount = XFS_DEFAULT_LOG_COUNT;
895
896 resp->tr_qm_quotaoff.tr_logres = xfs_calc_qm_quotaoff_reservation(mp);
897 resp->tr_qm_quotaoff.tr_logcount = XFS_DEFAULT_LOG_COUNT;
898
899 resp->tr_qm_equotaoff.tr_logres =
900 xfs_calc_qm_quotaoff_end_reservation(mp);
901 resp->tr_qm_equotaoff.tr_logcount = XFS_DEFAULT_LOG_COUNT;
902
903 resp->tr_sb.tr_logres = xfs_calc_sb_reservation(mp);
904 resp->tr_sb.tr_logcount = XFS_DEFAULT_LOG_COUNT;
905
906
907 resp->tr_ichange.tr_logres = xfs_calc_ichange_reservation(mp);
908 resp->tr_growdata.tr_logres = xfs_calc_growdata_reservation(mp);
909 resp->tr_fsyncts.tr_logres = xfs_calc_swrite_reservation(mp);
910 resp->tr_writeid.tr_logres = xfs_calc_writeid_reservation(mp);
911 resp->tr_attrsetrt.tr_logres = xfs_calc_attrsetrt_reservation(mp);
912 resp->tr_clearagi.tr_logres = xfs_calc_clear_agi_bucket_reservation(mp);
913 resp->tr_growrtzero.tr_logres = xfs_calc_growrtzero_reservation(mp);
914 resp->tr_growrtfree.tr_logres = xfs_calc_growrtfree_reservation(mp);
915}
916