:::::: 
:::::: Manual check reason: "low confidence bisect report"
:::::: Manual check reason: "low confidence static check first_new_problem: 
fs/ntfs3/attrib.c:765:21: warning: use of NULL 'name' where non-null expected 
[CWE-476] [-Wanalyzer-null-argument]"
:::::: 

CC: kbuild-...@lists.01.org
BCC: l...@intel.com
CC: linux-ker...@vger.kernel.org
TO: Konstantin Komarov <almaz.alexandrov...@paragon-software.com>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   8c23f235a6a8ae43abea215812eb9d8cf4dd165e
commit: 6e5be40d32fb1907285277c02e74493ed43d77fe fs/ntfs3: Add NTFS3 in 
fs/Kconfig and fs/Makefile
date:   11 months ago
:::::: branch date: 19 hours ago
:::::: commit date: 11 months ago
config: arm-randconfig-c002-20220625
compiler: arm-linux-gnueabi-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e5be40d32fb1907285277c02e74493ed43d77fe
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 6e5be40d32fb1907285277c02e74493ed43d77fe
        # save the config file
         ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' 

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <l...@intel.com>


gcc-analyzer warnings: (new ones prefixed by >>)
                                   |      |                            |
                                   |      |                            (39) 
...to here
                                   |......
                                   |  197 |                 if (err == -ENOSPC 
&& pre) {
                                   |      |                    ~
                                   |      |                    |
                                   |      |                    (40) following 
'false' branch...
                                   |......
                                   |  204 |                 if (err)
                                   |      |                    ~
                                   |      |                    |
                                   |      |                    (41) ...to here
                                   |......
                                   |  207 |                 if (new_lcn && vcn 
== vcn0)
                                   |      |                    ~
                                   |      |                    |
                                   |      |                    (42) following 
'false' branch...
                                   |......
                                   |  211 |                 if 
(!run_add_entry(run, vcn, lcn, flen, opt == ALLOCATE_MFT)) {
                                   |      |                      
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                   |      |                      |
                                   |      |                      (43) ...to here
                                   |
                            <------+
                            |
                          'attr_make_nonresident': events 44-55
                            |
                            |  291 |                 err = 
attr_allocate_clusters(sbi, run, 0, 0, len, NULL,
                            |      |                       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            |      |                       |
                            |      |                       (44) returning to 
'attr_make_nonresident' from 'attr_allocate_clusters'
                            |  292 |                                            
  ALLOCATE_DEF, &alen, 0, NULL);
                            |      |                                            
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            |  293 |                 if (err)
                            |      |                    ~   
                            |      |                    |
                            |      |                    (45) following 'false' 
branch (when 'err == 0')...
                            |......
                            |  296 |                 if (!rsize) {
                            |      |                    ~   
                            |      |                    |
                            |      |                    (46) ...to here
                            |      |                    (47) following 'false' 
branch (when 'rsize != 0')...
                            |  297 |                         /* empty resident 
-> non empty nonresident */
                            |  298 |                 } else if (!is_data) {
                            |      |                           ~
                            |      |                           |
                            |      |                           (48) ...to here
                            |      |                           (49) following 
'true' branch (when 'is_data != 0')...
                            |......
                            |  302 |                 } else if (!page) {
                            |      |                           ~
                            |      |                           |
                            |      |                           (50) ...to here
                            |      |                           (51) following 
'true' branch (when 'page' is NULL)...
                            |......
                            |  305 |                         page = 
grab_cache_page(ni->vfs_inode.i_mapping, 0);
                            |      |                                
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            |      |                                |
                            |      |                                (52) ...to 
here
                            |  306 |                         if (!page) {
                            |      |                            ~
                            |      |                            |
                            |      |                            (53) following 
'false' branch...
                            |......
                            |  310 |                         kaddr = 
kmap_atomic(page);
                            |      |                                 
~~~~~~~~~~~~~~~~~
                            |      |                                 |
                            |      |                                 (54) ...to 
here
                            |      |                                 (55) 
calling 'kmap_atomic' from 'attr_make_nonresident'
                            |
                            +--> 'kmap_atomic': event 56
                                   |
                                   |include/linux/highmem-internal.h:180:21:
                                   |  180 | static inline void 
*kmap_atomic(struct page *page)
                                   |      |                     ^~~~~~~~~~~
                                   |      |                     |
                                   |      |                     (56) entry to 
'kmap_atomic'
                                   |
                                 'kmap_atomic': event 57
                                   |
                                   |include/linux/mmzone.h:1341:12:
                                   | 1341 |         if 
(!mem_section[SECTION_NR_TO_ROOT(nr)])
                                   |      |            ^
                                   |      |            |
                                   |      |            (57) following 'true' 
branch...
                                   |
                                 'kmap_atomic': event 58
                                   |
                                   |cc1:
                                   | (58): ...to here
                                   |
                                 'kmap_atomic': event 59
                                   |
                                   | 1372 |         unsigned long map = 
section->section_mem_map;
                                   |      |                       ^~~
                                   |      |                       |
                                   |      |                       (59) 
dereference of NULL '<unknown>'
                                   |
   fs/ntfs3/attrib.c: In function 'attr_set_size':
>> fs/ntfs3/attrib.c:765:21: warning: use of NULL 'name' where non-null 
>> expected [CWE-476] [-Wanalyzer-null-argument]
     765 |                     memcmp(le_name(le), name, name_len * 
sizeof(short))) {
         |                     
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     'attr_collapse_range': events 1-6
       |
       | 1688 | int attr_collapse_range(struct ntfs_inode *ni, u64 vbo, u64 
bytes)
       |      |     ^~~~~~~~~~~~~~~~~~~
       |      |     |
       |      |     (1) entry to 'attr_collapse_range'
       |......
       | 1702 |         if (!bytes)
       |      |            ~
       |      |            |
       |      |            (2) following 'false' branch (when 'bytes != 0')...
       |......
       | 1706 |         attr_b = ni_find_attr(ni, NULL, &le_b, ATTR_DATA, NULL, 
0, NULL, &mi_b);
       |      |                  
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |                  |
       |      |                  (3) ...to here
       | 1707 |         if (!attr_b)
       |      |            ~
       |      |            |
       |      |            (4) following 'false' branch (when 'attr_b' is 
non-NULL)...
       |......
       | 1710 |         if (!attr_b->non_res) {
       |      |            ~ ~~~~~~~~~~~~~~~
       |      |            |       |
       |      |            |       (5) ...to here
       |      |            (6) following 'false' branch...
       |
     'attr_collapse_range': events 7-12
       |
       | 1715 |         data_size = le64_to_cpu(attr_b->nres.data_size);
       |......
       | 1727 |         if ((vbo & mask) || (bytes & mask)) {
       |      |            ~       
       |      |            |
       |      |            (8) following 'false' branch...
       |......
       | 1732 |         if (vbo > data_size)
       |      |            ~       
       |      |            |
       |      |            (9) ...to here
       |      |            (10) following 'false' branch (when 'data_size >= 
vbo')...
       |......
       | 1735 |         down_write(&ni->file.run_lock);
       |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |         |
       |      |         (11) ...to here
       | 1736 | 
       | 1737 |         if (vbo + bytes >= data_size) {
       |      |            ~       
       |      |            |
       |      |            (12) following 'true' branch...
       |
     'attr_collapse_range': event 13
       |
       |include/linux/compiler-gcc.h:42:45:
       |   42 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, 
prefix), __COUNTER__)
       |      |                                             ^~~~~~~~~~~~
       |      |                                             |
       |      |                                             (13) ...to here
   include/linux/minmax.h:31:27: note: in definition of macro '__cmp_once'
       |   31 |                 typeof(x) unique_x = (x);               \
       |      |                           ^~~~~~~~
   include/linux/compiler_types.h:60:22: note: in expansion of macro '___PASTE'
       |   60 | #define __PASTE(a,b) ___PASTE(a,b)
       |      |                      ^~~~~~~~
   include/linux/compiler-gcc.h:42:29: note: in expansion of macro '__PASTE'
       |   42 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, 
prefix), __COUNTER__)
       |      |                             ^~~~~~~
   include/linux/compiler_types.h:60:22: note: in expansion of macro '___PASTE'
       |   60 | #define __PASTE(a,b) ___PASTE(a,b)
       |      |                      ^~~~~~~~
   include/linux/compiler-gcc.h:42:37: note: in expansion of macro '__PASTE'
       |   42 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, 
prefix), __COUNTER__)
       |      |                                     ^~~~~~~
   include/linux/minmax.h:38:34: note: in expansion of macro '__UNIQUE_ID'
       |   38 |                 __cmp_once(x, y, __UNIQUE_ID(__x), 
__UNIQUE_ID(__y), op))
       |      |                                  ^~~~~~~~~~~
   include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
       |   45 | #define min(x, y)       __careful_cmp(x, y, <)
       |      |                         ^~~~~~~~~~~~~
   fs/ntfs3/attrib.c:1738:33: note: in expansion of macro 'min'
       | 1738 |                 u64 new_valid = min(ni->i_valid, vbo);
       |      |                                 ^~~
       |
     'attr_collapse_range': event 14
       |
       | 1742 |                 err = attr_set_size(ni, ATTR_DATA, NULL, 0, 
&ni->file.run, vbo,
       |      |                       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |      |                       |
       |      |                       (14) calling 'attr_set_size' from 
'attr_collapse_range'
       | 1743 |                                     &new_valid, true, NULL);
       |      |                                     ~~~~~~~~~~~~~~~~~~~~~~~
       |
       +--> 'attr_set_size': events 15-24
              |
              |  419 | int attr_set_size(struct ntfs_inode *ni, enum ATTR_TYPE 
type,
              |      |     ^~~~~~~~~~~~~
              |      |     |

vim +/name +765 fs/ntfs3/attrib.c

be71b5cba2e648 Konstantin Komarov 2021-08-13  408  
be71b5cba2e648 Konstantin Komarov 2021-08-13  409  /*
be71b5cba2e648 Konstantin Komarov 2021-08-13  410   * attr_set_size
be71b5cba2e648 Konstantin Komarov 2021-08-13  411   *
be71b5cba2e648 Konstantin Komarov 2021-08-13  412   * change the size of 
attribute
be71b5cba2e648 Konstantin Komarov 2021-08-13  413   * Extend:
be71b5cba2e648 Konstantin Komarov 2021-08-13  414   *   - sparse/compressed: no 
allocated clusters
be71b5cba2e648 Konstantin Komarov 2021-08-13  415   *   - normal: append 
allocated and preallocated new clusters
be71b5cba2e648 Konstantin Komarov 2021-08-13  416   * Shrink:
be71b5cba2e648 Konstantin Komarov 2021-08-13  417   *   - no deallocate if 
keep_prealloc is set
be71b5cba2e648 Konstantin Komarov 2021-08-13  418   */
be71b5cba2e648 Konstantin Komarov 2021-08-13  419  int attr_set_size(struct 
ntfs_inode *ni, enum ATTR_TYPE type,
be71b5cba2e648 Konstantin Komarov 2021-08-13  420                 const __le16 
*name, u8 name_len, struct runs_tree *run,
be71b5cba2e648 Konstantin Komarov 2021-08-13  421                 u64 new_size, 
const u64 *new_valid, bool keep_prealloc,
be71b5cba2e648 Konstantin Komarov 2021-08-13  422                 struct ATTRIB 
**ret)
be71b5cba2e648 Konstantin Komarov 2021-08-13  423  {
be71b5cba2e648 Konstantin Komarov 2021-08-13  424       int err = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  425       struct ntfs_sb_info 
*sbi = ni->mi.sbi;
be71b5cba2e648 Konstantin Komarov 2021-08-13  426       u8 cluster_bits = 
sbi->cluster_bits;
be71b5cba2e648 Konstantin Komarov 2021-08-13  427       bool is_mft =
be71b5cba2e648 Konstantin Komarov 2021-08-13  428               ni->mi.rno == 
MFT_REC_MFT && type == ATTR_DATA && !name_len;
be71b5cba2e648 Konstantin Komarov 2021-08-13  429       u64 old_valid, 
old_size, old_alloc, new_alloc, new_alloc_tmp;
be71b5cba2e648 Konstantin Komarov 2021-08-13  430       struct ATTRIB *attr = 
NULL, *attr_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  431       struct ATTR_LIST_ENTRY 
*le, *le_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  432       struct mft_inode *mi, 
*mi_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  433       CLST alen, vcn, lcn, 
new_alen, old_alen, svcn, evcn;
be71b5cba2e648 Konstantin Komarov 2021-08-13  434       CLST next_svcn, 
pre_alloc = -1, done = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  435       bool is_ext;
be71b5cba2e648 Konstantin Komarov 2021-08-13  436       u32 align;
be71b5cba2e648 Konstantin Komarov 2021-08-13  437       struct MFT_REC *rec;
be71b5cba2e648 Konstantin Komarov 2021-08-13  438  
be71b5cba2e648 Konstantin Komarov 2021-08-13  439  again:
be71b5cba2e648 Konstantin Komarov 2021-08-13  440       le_b = NULL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  441       attr_b = 
ni_find_attr(ni, NULL, &le_b, type, name, name_len, NULL,
be71b5cba2e648 Konstantin Komarov 2021-08-13  442                             
&mi_b);
be71b5cba2e648 Konstantin Komarov 2021-08-13  443       if (!attr_b) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  444               err = -ENOENT;
be71b5cba2e648 Konstantin Komarov 2021-08-13  445               goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  446       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  447  
be71b5cba2e648 Konstantin Komarov 2021-08-13  448       if (!attr_b->non_res) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  449               err = 
attr_set_size_res(ni, attr_b, le_b, mi_b, new_size, run,
be71b5cba2e648 Konstantin Komarov 2021-08-13  450                               
        &attr_b);
be71b5cba2e648 Konstantin Komarov 2021-08-13  451               if (err || 
!attr_b->non_res)
be71b5cba2e648 Konstantin Komarov 2021-08-13  452                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  453  
be71b5cba2e648 Konstantin Komarov 2021-08-13  454               /* layout of 
records may be changed, so do a full search */
be71b5cba2e648 Konstantin Komarov 2021-08-13  455               goto again;
be71b5cba2e648 Konstantin Komarov 2021-08-13  456       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  457  
be71b5cba2e648 Konstantin Komarov 2021-08-13  458       is_ext = 
is_attr_ext(attr_b);
be71b5cba2e648 Konstantin Komarov 2021-08-13  459  
be71b5cba2e648 Konstantin Komarov 2021-08-13  460  again_1:
be71b5cba2e648 Konstantin Komarov 2021-08-13  461       align = 
sbi->cluster_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  462  
be71b5cba2e648 Konstantin Komarov 2021-08-13  463       if (is_ext) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  464               align <<= 
attr_b->nres.c_unit;
be71b5cba2e648 Konstantin Komarov 2021-08-13  465               if 
(is_attr_sparsed(attr_b))
be71b5cba2e648 Konstantin Komarov 2021-08-13  466                       
keep_prealloc = false;
be71b5cba2e648 Konstantin Komarov 2021-08-13  467       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  468  
be71b5cba2e648 Konstantin Komarov 2021-08-13  469       old_valid = 
le64_to_cpu(attr_b->nres.valid_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  470       old_size = 
le64_to_cpu(attr_b->nres.data_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  471       old_alloc = 
le64_to_cpu(attr_b->nres.alloc_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  472       old_alen = old_alloc >> 
cluster_bits;
be71b5cba2e648 Konstantin Komarov 2021-08-13  473  
be71b5cba2e648 Konstantin Komarov 2021-08-13  474       new_alloc = (new_size + 
align - 1) & ~(u64)(align - 1);
be71b5cba2e648 Konstantin Komarov 2021-08-13  475       new_alen = new_alloc >> 
cluster_bits;
be71b5cba2e648 Konstantin Komarov 2021-08-13  476  
be71b5cba2e648 Konstantin Komarov 2021-08-13  477       if (keep_prealloc && 
is_ext)
be71b5cba2e648 Konstantin Komarov 2021-08-13  478               keep_prealloc = 
false;
be71b5cba2e648 Konstantin Komarov 2021-08-13  479  
be71b5cba2e648 Konstantin Komarov 2021-08-13  480       if (keep_prealloc && 
new_size < old_size) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  481               
attr_b->nres.data_size = cpu_to_le64(new_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  482               mi_b->dirty = 
true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  483               goto ok;
be71b5cba2e648 Konstantin Komarov 2021-08-13  484       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  485  
be71b5cba2e648 Konstantin Komarov 2021-08-13  486       vcn = old_alen - 1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  487  
be71b5cba2e648 Konstantin Komarov 2021-08-13  488       svcn = 
le64_to_cpu(attr_b->nres.svcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  489       evcn = 
le64_to_cpu(attr_b->nres.evcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  490  
be71b5cba2e648 Konstantin Komarov 2021-08-13  491       if (svcn <= vcn && vcn 
<= evcn) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  492               attr = attr_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  493               le = le_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  494               mi = mi_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  495       } else if (!le_b) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  496               err = -EINVAL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  497               goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  498       } else {
be71b5cba2e648 Konstantin Komarov 2021-08-13  499               le = le_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  500               attr = 
ni_find_attr(ni, attr_b, &le, type, name, name_len, &vcn,
be71b5cba2e648 Konstantin Komarov 2021-08-13  501                               
    &mi);
be71b5cba2e648 Konstantin Komarov 2021-08-13  502               if (!attr) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  503                       err = 
-EINVAL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  504                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  505               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  506  
be71b5cba2e648 Konstantin Komarov 2021-08-13  507  next_le_1:
be71b5cba2e648 Konstantin Komarov 2021-08-13  508               svcn = 
le64_to_cpu(attr->nres.svcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  509               evcn = 
le64_to_cpu(attr->nres.evcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  510       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  511  
be71b5cba2e648 Konstantin Komarov 2021-08-13  512  next_le:
be71b5cba2e648 Konstantin Komarov 2021-08-13  513       rec = mi->mrec;
be71b5cba2e648 Konstantin Komarov 2021-08-13  514  
be71b5cba2e648 Konstantin Komarov 2021-08-13  515       err = 
attr_load_runs(attr, ni, run, NULL);
be71b5cba2e648 Konstantin Komarov 2021-08-13  516       if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  517               goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  518  
be71b5cba2e648 Konstantin Komarov 2021-08-13  519       if (new_size > 
old_size) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  520               CLST 
to_allocate;
be71b5cba2e648 Konstantin Komarov 2021-08-13  521               size_t free;
be71b5cba2e648 Konstantin Komarov 2021-08-13  522  
be71b5cba2e648 Konstantin Komarov 2021-08-13  523               if (new_alloc 
<= old_alloc) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  524                       
attr_b->nres.data_size = cpu_to_le64(new_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  525                       
mi_b->dirty = true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  526                       goto ok;
be71b5cba2e648 Konstantin Komarov 2021-08-13  527               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  528  
be71b5cba2e648 Konstantin Komarov 2021-08-13  529               to_allocate = 
new_alen - old_alen;
be71b5cba2e648 Konstantin Komarov 2021-08-13  530  add_alloc_in_same_attr_seg:
be71b5cba2e648 Konstantin Komarov 2021-08-13  531               lcn = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  532               if (is_mft) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  533                       /* mft 
allocates clusters from mftzone */
be71b5cba2e648 Konstantin Komarov 2021-08-13  534                       
pre_alloc = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  535               } else if 
(is_ext) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  536                       /* no 
preallocate for sparse/compress */
be71b5cba2e648 Konstantin Komarov 2021-08-13  537                       
pre_alloc = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  538               } else if 
(pre_alloc == -1) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  539                       
pre_alloc = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  540                       if 
(type == ATTR_DATA && !name_len &&
be71b5cba2e648 Konstantin Komarov 2021-08-13  541                           
sbi->options.prealloc) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  542                               
CLST new_alen2 = bytes_to_cluster(
be71b5cba2e648 Konstantin Komarov 2021-08-13  543                               
        sbi, get_pre_allocated(new_size));
be71b5cba2e648 Konstantin Komarov 2021-08-13  544                               
pre_alloc = new_alen2 - new_alen;
be71b5cba2e648 Konstantin Komarov 2021-08-13  545                       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  546  
be71b5cba2e648 Konstantin Komarov 2021-08-13  547                       /* Get 
the last lcn to allocate from */
be71b5cba2e648 Konstantin Komarov 2021-08-13  548                       if 
(old_alen &&
be71b5cba2e648 Konstantin Komarov 2021-08-13  549                           
!run_lookup_entry(run, vcn, &lcn, NULL, NULL)) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  550                               
lcn = SPARSE_LCN;
be71b5cba2e648 Konstantin Komarov 2021-08-13  551                       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  552  
be71b5cba2e648 Konstantin Komarov 2021-08-13  553                       if (lcn 
== SPARSE_LCN)
be71b5cba2e648 Konstantin Komarov 2021-08-13  554                               
lcn = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  555                       else if 
(lcn)
be71b5cba2e648 Konstantin Komarov 2021-08-13  556                               
lcn += 1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  557  
be71b5cba2e648 Konstantin Komarov 2021-08-13  558                       free = 
wnd_zeroes(&sbi->used.bitmap);
be71b5cba2e648 Konstantin Komarov 2021-08-13  559                       if 
(to_allocate > free) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  560                               
err = -ENOSPC;
be71b5cba2e648 Konstantin Komarov 2021-08-13  561                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  562                       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  563  
be71b5cba2e648 Konstantin Komarov 2021-08-13  564                       if 
(pre_alloc && to_allocate + pre_alloc > free)
be71b5cba2e648 Konstantin Komarov 2021-08-13  565                               
pre_alloc = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  566               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  567  
be71b5cba2e648 Konstantin Komarov 2021-08-13  568               vcn = old_alen;
be71b5cba2e648 Konstantin Komarov 2021-08-13  569  
be71b5cba2e648 Konstantin Komarov 2021-08-13  570               if (is_ext) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  571                       if 
(!run_add_entry(run, vcn, SPARSE_LCN, to_allocate,
be71b5cba2e648 Konstantin Komarov 2021-08-13  572                               
           false)) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  573                               
err = -ENOMEM;
be71b5cba2e648 Konstantin Komarov 2021-08-13  574                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  575                       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  576                       alen = 
to_allocate;
be71b5cba2e648 Konstantin Komarov 2021-08-13  577               } else {
be71b5cba2e648 Konstantin Komarov 2021-08-13  578                       /* ~3 
bytes per fragment */
be71b5cba2e648 Konstantin Komarov 2021-08-13  579                       err = 
attr_allocate_clusters(
be71b5cba2e648 Konstantin Komarov 2021-08-13  580                               
sbi, run, vcn, lcn, to_allocate, &pre_alloc,
be71b5cba2e648 Konstantin Komarov 2021-08-13  581                               
is_mft ? ALLOCATE_MFT : 0, &alen,
be71b5cba2e648 Konstantin Komarov 2021-08-13  582                               
is_mft ? 0
be71b5cba2e648 Konstantin Komarov 2021-08-13  583                               
       : (sbi->record_size -
be71b5cba2e648 Konstantin Komarov 2021-08-13  584                               
          le32_to_cpu(rec->used) + 8) /
be71b5cba2e648 Konstantin Komarov 2021-08-13  585                               
                         3 +
be71b5cba2e648 Konstantin Komarov 2021-08-13  586                               
                 1,
be71b5cba2e648 Konstantin Komarov 2021-08-13  587                               
NULL);
be71b5cba2e648 Konstantin Komarov 2021-08-13  588                       if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  589                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  590               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  591  
be71b5cba2e648 Konstantin Komarov 2021-08-13  592               done += alen;
be71b5cba2e648 Konstantin Komarov 2021-08-13  593               vcn += alen;
be71b5cba2e648 Konstantin Komarov 2021-08-13  594               if (to_allocate 
> alen)
be71b5cba2e648 Konstantin Komarov 2021-08-13  595                       
to_allocate -= alen;
be71b5cba2e648 Konstantin Komarov 2021-08-13  596               else
be71b5cba2e648 Konstantin Komarov 2021-08-13  597                       
to_allocate = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  598  
be71b5cba2e648 Konstantin Komarov 2021-08-13  599  pack_runs:
be71b5cba2e648 Konstantin Komarov 2021-08-13  600               err = 
mi_pack_runs(mi, attr, run, vcn - svcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  601               if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  602                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  603  
be71b5cba2e648 Konstantin Komarov 2021-08-13  604               next_svcn = 
le64_to_cpu(attr->nres.evcn) + 1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  605               new_alloc_tmp = 
(u64)next_svcn << cluster_bits;
be71b5cba2e648 Konstantin Komarov 2021-08-13  606               
attr_b->nres.alloc_size = cpu_to_le64(new_alloc_tmp);
be71b5cba2e648 Konstantin Komarov 2021-08-13  607               mi_b->dirty = 
true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  608  
be71b5cba2e648 Konstantin Komarov 2021-08-13  609               if (next_svcn 
>= vcn && !to_allocate) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  610                       /* 
Normal way. update attribute and exit */
be71b5cba2e648 Konstantin Komarov 2021-08-13  611                       
attr_b->nres.data_size = cpu_to_le64(new_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  612                       goto ok;
be71b5cba2e648 Konstantin Komarov 2021-08-13  613               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  614  
be71b5cba2e648 Konstantin Komarov 2021-08-13  615               /* at least two 
mft to avoid recursive loop*/
be71b5cba2e648 Konstantin Komarov 2021-08-13  616               if (is_mft && 
next_svcn == vcn &&
be71b5cba2e648 Konstantin Komarov 2021-08-13  617                   ((u64)done 
<< sbi->cluster_bits) >= 2 * sbi->record_size) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  618                       
new_size = new_alloc_tmp;
be71b5cba2e648 Konstantin Komarov 2021-08-13  619                       
attr_b->nres.data_size = attr_b->nres.alloc_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  620                       goto ok;
be71b5cba2e648 Konstantin Komarov 2021-08-13  621               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  622  
be71b5cba2e648 Konstantin Komarov 2021-08-13  623               if 
(le32_to_cpu(rec->used) < sbi->record_size) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  624                       
old_alen = next_svcn;
be71b5cba2e648 Konstantin Komarov 2021-08-13  625                       evcn = 
old_alen - 1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  626                       goto 
add_alloc_in_same_attr_seg;
be71b5cba2e648 Konstantin Komarov 2021-08-13  627               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  628  
be71b5cba2e648 Konstantin Komarov 2021-08-13  629               
attr_b->nres.data_size = attr_b->nres.alloc_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  630               if 
(new_alloc_tmp < old_valid)
be71b5cba2e648 Konstantin Komarov 2021-08-13  631                       
attr_b->nres.valid_size = attr_b->nres.data_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  632  
be71b5cba2e648 Konstantin Komarov 2021-08-13  633               if (type == 
ATTR_LIST) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  634                       err = 
ni_expand_list(ni);
be71b5cba2e648 Konstantin Komarov 2021-08-13  635                       if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  636                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  637                       if 
(next_svcn < vcn)
be71b5cba2e648 Konstantin Komarov 2021-08-13  638                               
goto pack_runs;
be71b5cba2e648 Konstantin Komarov 2021-08-13  639  
be71b5cba2e648 Konstantin Komarov 2021-08-13  640                       /* 
layout of records is changed */
be71b5cba2e648 Konstantin Komarov 2021-08-13  641                       goto 
again;
be71b5cba2e648 Konstantin Komarov 2021-08-13  642               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  643  
be71b5cba2e648 Konstantin Komarov 2021-08-13  644               if 
(!ni->attr_list.size) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  645                       err = 
ni_create_attr_list(ni);
be71b5cba2e648 Konstantin Komarov 2021-08-13  646                       if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  647                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  648                       /* 
layout of records is changed */
be71b5cba2e648 Konstantin Komarov 2021-08-13  649               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  650  
be71b5cba2e648 Konstantin Komarov 2021-08-13  651               if (next_svcn 
>= vcn) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  652                       /* this 
is mft data, repeat */
be71b5cba2e648 Konstantin Komarov 2021-08-13  653                       goto 
again;
be71b5cba2e648 Konstantin Komarov 2021-08-13  654               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  655  
be71b5cba2e648 Konstantin Komarov 2021-08-13  656               /* insert new 
attribute segment */
be71b5cba2e648 Konstantin Komarov 2021-08-13  657               err = 
ni_insert_nonresident(ni, type, name, name_len, run,
be71b5cba2e648 Konstantin Komarov 2021-08-13  658                               
            next_svcn, vcn - next_svcn,
be71b5cba2e648 Konstantin Komarov 2021-08-13  659                               
            attr_b->flags, &attr, &mi);
be71b5cba2e648 Konstantin Komarov 2021-08-13  660               if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  661                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  662  
be71b5cba2e648 Konstantin Komarov 2021-08-13  663               if (!is_mft)
be71b5cba2e648 Konstantin Komarov 2021-08-13  664                       
run_truncate_head(run, evcn + 1);
be71b5cba2e648 Konstantin Komarov 2021-08-13  665  
be71b5cba2e648 Konstantin Komarov 2021-08-13  666               svcn = 
le64_to_cpu(attr->nres.svcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  667               evcn = 
le64_to_cpu(attr->nres.evcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  668  
be71b5cba2e648 Konstantin Komarov 2021-08-13  669               le_b = NULL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  670               /* layout of 
records maybe changed */
be71b5cba2e648 Konstantin Komarov 2021-08-13  671               /* find base 
attribute to update*/
be71b5cba2e648 Konstantin Komarov 2021-08-13  672               attr_b = 
ni_find_attr(ni, NULL, &le_b, type, name, name_len,
be71b5cba2e648 Konstantin Komarov 2021-08-13  673                               
      NULL, &mi_b);
be71b5cba2e648 Konstantin Komarov 2021-08-13  674               if (!attr_b) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  675                       err = 
-ENOENT;
be71b5cba2e648 Konstantin Komarov 2021-08-13  676                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  677               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  678  
be71b5cba2e648 Konstantin Komarov 2021-08-13  679               
attr_b->nres.alloc_size = cpu_to_le64((u64)vcn << cluster_bits);
be71b5cba2e648 Konstantin Komarov 2021-08-13  680               
attr_b->nres.data_size = attr_b->nres.alloc_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  681               
attr_b->nres.valid_size = attr_b->nres.alloc_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  682               mi_b->dirty = 
true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  683               goto again_1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  684       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  685  
be71b5cba2e648 Konstantin Komarov 2021-08-13  686       if (new_size != 
old_size ||
be71b5cba2e648 Konstantin Komarov 2021-08-13  687           (new_alloc != 
old_alloc && !keep_prealloc)) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  688               vcn = max(svcn, 
new_alen);
be71b5cba2e648 Konstantin Komarov 2021-08-13  689               new_alloc_tmp = 
(u64)vcn << cluster_bits;
be71b5cba2e648 Konstantin Komarov 2021-08-13  690  
be71b5cba2e648 Konstantin Komarov 2021-08-13  691               alen = 0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  692               err = 
run_deallocate_ex(sbi, run, vcn, evcn - vcn + 1, &alen,
be71b5cba2e648 Konstantin Komarov 2021-08-13  693                               
        true);
be71b5cba2e648 Konstantin Komarov 2021-08-13  694               if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  695                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  696  
be71b5cba2e648 Konstantin Komarov 2021-08-13  697               
run_truncate(run, vcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  698  
be71b5cba2e648 Konstantin Komarov 2021-08-13  699               if (vcn > svcn) 
{
be71b5cba2e648 Konstantin Komarov 2021-08-13  700                       err = 
mi_pack_runs(mi, attr, run, vcn - svcn);
be71b5cba2e648 Konstantin Komarov 2021-08-13  701                       if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  702                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  703               } else if (le 
&& le->vcn) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  704                       u16 
le_sz = le16_to_cpu(le->size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  705  
be71b5cba2e648 Konstantin Komarov 2021-08-13  706                       /*
be71b5cba2e648 Konstantin Komarov 2021-08-13  707                        * 
NOTE: list entries for one attribute are always
be71b5cba2e648 Konstantin Komarov 2021-08-13  708                        * the 
same size. We deal with last entry (vcn==0)
be71b5cba2e648 Konstantin Komarov 2021-08-13  709                        * and 
it is not first in entries array
be71b5cba2e648 Konstantin Komarov 2021-08-13  710                        * 
(list entry for std attribute always first)
be71b5cba2e648 Konstantin Komarov 2021-08-13  711                        * So 
it is safe to step back
be71b5cba2e648 Konstantin Komarov 2021-08-13  712                        */
be71b5cba2e648 Konstantin Komarov 2021-08-13  713                       
mi_remove_attr(mi, attr);
be71b5cba2e648 Konstantin Komarov 2021-08-13  714  
be71b5cba2e648 Konstantin Komarov 2021-08-13  715                       if 
(!al_remove_le(ni, le)) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  716                               
err = -EINVAL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  717                               
goto out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  718                       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  719  
be71b5cba2e648 Konstantin Komarov 2021-08-13  720                       le = 
(struct ATTR_LIST_ENTRY *)((u8 *)le - le_sz);
be71b5cba2e648 Konstantin Komarov 2021-08-13  721               } else {
be71b5cba2e648 Konstantin Komarov 2021-08-13  722                       
attr->nres.evcn = cpu_to_le64((u64)vcn - 1);
be71b5cba2e648 Konstantin Komarov 2021-08-13  723                       
mi->dirty = true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  724               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  725  
be71b5cba2e648 Konstantin Komarov 2021-08-13  726               
attr_b->nres.alloc_size = cpu_to_le64(new_alloc_tmp);
be71b5cba2e648 Konstantin Komarov 2021-08-13  727  
be71b5cba2e648 Konstantin Komarov 2021-08-13  728               if (vcn == 
new_alen) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  729                       
attr_b->nres.data_size = cpu_to_le64(new_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  730                       if 
(new_size < old_valid)
be71b5cba2e648 Konstantin Komarov 2021-08-13  731                               
attr_b->nres.valid_size =
be71b5cba2e648 Konstantin Komarov 2021-08-13  732                               
        attr_b->nres.data_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  733               } else {
be71b5cba2e648 Konstantin Komarov 2021-08-13  734                       if 
(new_alloc_tmp <=
be71b5cba2e648 Konstantin Komarov 2021-08-13  735                           
le64_to_cpu(attr_b->nres.data_size))
be71b5cba2e648 Konstantin Komarov 2021-08-13  736                               
attr_b->nres.data_size =
be71b5cba2e648 Konstantin Komarov 2021-08-13  737                               
        attr_b->nres.alloc_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  738                       if 
(new_alloc_tmp <
be71b5cba2e648 Konstantin Komarov 2021-08-13  739                           
le64_to_cpu(attr_b->nres.valid_size))
be71b5cba2e648 Konstantin Komarov 2021-08-13  740                               
attr_b->nres.valid_size =
be71b5cba2e648 Konstantin Komarov 2021-08-13  741                               
        attr_b->nres.alloc_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  742               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  743  
be71b5cba2e648 Konstantin Komarov 2021-08-13  744               if (is_ext)
be71b5cba2e648 Konstantin Komarov 2021-08-13  745                       
le64_sub_cpu(&attr_b->nres.total_size,
be71b5cba2e648 Konstantin Komarov 2021-08-13  746                               
     ((u64)alen << cluster_bits));
be71b5cba2e648 Konstantin Komarov 2021-08-13  747  
be71b5cba2e648 Konstantin Komarov 2021-08-13  748               mi_b->dirty = 
true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  749  
be71b5cba2e648 Konstantin Komarov 2021-08-13  750               if 
(new_alloc_tmp <= new_alloc)
be71b5cba2e648 Konstantin Komarov 2021-08-13  751                       goto ok;
be71b5cba2e648 Konstantin Komarov 2021-08-13  752  
be71b5cba2e648 Konstantin Komarov 2021-08-13  753               old_size = 
new_alloc_tmp;
be71b5cba2e648 Konstantin Komarov 2021-08-13  754               vcn = svcn - 1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  755  
be71b5cba2e648 Konstantin Komarov 2021-08-13  756               if (le == le_b) 
{
be71b5cba2e648 Konstantin Komarov 2021-08-13  757                       attr = 
attr_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  758                       mi = 
mi_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  759                       evcn = 
svcn - 1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  760                       svcn = 
0;
be71b5cba2e648 Konstantin Komarov 2021-08-13  761                       goto 
next_le;
be71b5cba2e648 Konstantin Komarov 2021-08-13  762               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  763  
be71b5cba2e648 Konstantin Komarov 2021-08-13  764               if (le->type != 
type || le->name_len != name_len ||
be71b5cba2e648 Konstantin Komarov 2021-08-13 @765                   
memcmp(le_name(le), name, name_len * sizeof(short))) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  766                       err = 
-EINVAL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  767                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  768               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  769  
be71b5cba2e648 Konstantin Komarov 2021-08-13  770               err = 
ni_load_mi(ni, le, &mi);
be71b5cba2e648 Konstantin Komarov 2021-08-13  771               if (err)
be71b5cba2e648 Konstantin Komarov 2021-08-13  772                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  773  
be71b5cba2e648 Konstantin Komarov 2021-08-13  774               attr = 
mi_find_attr(mi, NULL, type, name, name_len, &le->id);
be71b5cba2e648 Konstantin Komarov 2021-08-13  775               if (!attr) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  776                       err = 
-EINVAL;
be71b5cba2e648 Konstantin Komarov 2021-08-13  777                       goto 
out;
be71b5cba2e648 Konstantin Komarov 2021-08-13  778               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  779               goto next_le_1;
be71b5cba2e648 Konstantin Komarov 2021-08-13  780       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  781  
be71b5cba2e648 Konstantin Komarov 2021-08-13  782  ok:
be71b5cba2e648 Konstantin Komarov 2021-08-13  783       if (new_valid) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  784               __le64 valid = 
cpu_to_le64(min(*new_valid, new_size));
be71b5cba2e648 Konstantin Komarov 2021-08-13  785  
be71b5cba2e648 Konstantin Komarov 2021-08-13  786               if 
(attr_b->nres.valid_size != valid) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  787                       
attr_b->nres.valid_size = valid;
be71b5cba2e648 Konstantin Komarov 2021-08-13  788                       
mi_b->dirty = true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  789               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  790       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  791  
be71b5cba2e648 Konstantin Komarov 2021-08-13  792  out:
be71b5cba2e648 Konstantin Komarov 2021-08-13  793       if (!err && attr_b && 
ret)
be71b5cba2e648 Konstantin Komarov 2021-08-13  794               *ret = attr_b;
be71b5cba2e648 Konstantin Komarov 2021-08-13  795  
be71b5cba2e648 Konstantin Komarov 2021-08-13  796       /* update 
inode_set_bytes*/
be71b5cba2e648 Konstantin Komarov 2021-08-13  797       if (!err && ((type == 
ATTR_DATA && !name_len) ||
be71b5cba2e648 Konstantin Komarov 2021-08-13  798                    (type == 
ATTR_ALLOC && name == I30_NAME))) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  799               bool dirty = 
false;
be71b5cba2e648 Konstantin Komarov 2021-08-13  800  
be71b5cba2e648 Konstantin Komarov 2021-08-13  801               if 
(ni->vfs_inode.i_size != new_size) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  802                       
ni->vfs_inode.i_size = new_size;
be71b5cba2e648 Konstantin Komarov 2021-08-13  803                       dirty = 
true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  804               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  805  
be71b5cba2e648 Konstantin Komarov 2021-08-13  806               if (attr_b && 
attr_b->non_res) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  807                       
new_alloc = le64_to_cpu(attr_b->nres.alloc_size);
be71b5cba2e648 Konstantin Komarov 2021-08-13  808                       if 
(inode_get_bytes(&ni->vfs_inode) != new_alloc) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  809                               
inode_set_bytes(&ni->vfs_inode, new_alloc);
be71b5cba2e648 Konstantin Komarov 2021-08-13  810                               
dirty = true;
be71b5cba2e648 Konstantin Komarov 2021-08-13  811                       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  812               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  813  
be71b5cba2e648 Konstantin Komarov 2021-08-13  814               if (dirty) {
be71b5cba2e648 Konstantin Komarov 2021-08-13  815                       
ni->ni_flags |= NI_FLAG_UPDATE_PARENT;
be71b5cba2e648 Konstantin Komarov 2021-08-13  816                       
mark_inode_dirty(&ni->vfs_inode);
be71b5cba2e648 Konstantin Komarov 2021-08-13  817               }
be71b5cba2e648 Konstantin Komarov 2021-08-13  818       }
be71b5cba2e648 Konstantin Komarov 2021-08-13  819  
be71b5cba2e648 Konstantin Komarov 2021-08-13  820       return err;
be71b5cba2e648 Konstantin Komarov 2021-08-13  821  }
be71b5cba2e648 Konstantin Komarov 2021-08-13  822  

:::::: The code at line 765 was first introduced by commit
:::::: be71b5cba2e6485e8959da7a9f9a44461a1bb074 fs/ntfs3: Add attrib operations

:::::: TO: Konstantin Komarov <almaz.alexandrov...@paragon-software.com>
:::::: CC: Konstantin Komarov <almaz.alexandrov...@paragon-software.com>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to