summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Merge tag 'erofs-for-5.6-rc1' of ↵Linus Torvalds2020-01-295-107/+74
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs Pull erofs updates from Gao Xiang: "A regression fix, several cleanups and (maybe) plus an upcoming new mount api convert patch as a part of vfs update are considered available for this cycle. All commits have been in linux-next and tested with no smoke out. Summary: - fix an out-of-bound read access introduced in v5.3, which could rarely cause data corruption - various cleanup patches" * tag 'erofs-for-5.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs: erofs: clean up z_erofs_submit_queue() erofs: fold in postsubmit_is_all_bypassed() erofs: fix out-of-bound read for shifted uncompressed block erofs: remove void tagging/untagging of workgroup pointers erofs: remove unused tag argument while registering a workgroup erofs: remove unused tag argument while finding a workgroup erofs: correct indentation of an assigned structure inside a function
| * erofs: clean up z_erofs_submit_queue()Gao Xiang2020-01-211-55/+40
| | | | | | | | | | | | | | | | | | A label and extra variables will be eliminated, which is more cleaner. Link: https://lore.kernel.org/r/20200121064819.139469-1-gaoxiang25@huawei.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
| * erofs: fold in postsubmit_is_all_bypassed()Gao Xiang2020-01-211-16/+7
| | | | | | | | | | | | | | | | | | | | No need to introduce such separated helper since cache strategy compile configs were changed into runtime options instead in v5.4. No logic changes. Link: https://lore.kernel.org/r/20200121064747.138987-1-gaoxiang25@huawei.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
| * erofs: fix out-of-bound read for shifted uncompressed blockGao Xiang2020-01-111-12/+10
| | | | | | | | | | | | | | | | | | | | | | | | rq->out[1] should be valid before accessing. Otherwise, in very rare cases, out-of-bound dirty onstack rq->out[1] can equal to *in and lead to unintended memmove behavior. Link: https://lore.kernel.org/r/20200107022546.19432-1-gaoxiang25@huawei.com Fixes: 7fc45dbc938a ("staging: erofs: introduce generic decompression backend") Cc: <stable@vger.kernel.org> # 5.3+ Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
| * erofs: remove void tagging/untagging of workgroup pointersVladimir Zapolskiy2020-01-071-7/+2
| | | | | | | | | | | | | | | | | | | | | | Because workgroup pointers inserted to a radix tree are always tagged with a single value of 0, it is possible to remove tagging and untagging of the pointers completely. Signed-off-by: Vladimir Zapolskiy <vladimir@tuxera.com> Link: https://lore.kernel.org/r/20200102120118.14979-4-vladimir@tuxera.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
| * erofs: remove unused tag argument while registering a workgroupVladimir Zapolskiy2020-01-073-5/+4
| | | | | | | | | | | | | | | | | | | | | | All workgroups are registered with tag value set to 0, to simplify erofs_register_workgroup() interface the tag argument can be removed, if its only value is sent down to the function body. Signed-off-by: Vladimir Zapolskiy <vladimir@tuxera.com> Link: https://lore.kernel.org/r/20200102120118.14979-3-vladimir@tuxera.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
| * erofs: remove unused tag argument while finding a workgroupVladimir Zapolskiy2020-01-073-5/+3
| | | | | | | | | | | | | | | | | | | | | | It is feasible to simplify erofs_find_workgroup() interface by removing an unused function argument. While formally the argument is used in the function itself, its assigned value is ignored on the caller side. Signed-off-by: Vladimir Zapolskiy <vladimir@tuxera.com> Link: https://lore.kernel.org/r/20200102120118.14979-2-vladimir@tuxera.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
| * erofs: correct indentation of an assigned structure inside a functionVladimir Zapolskiy2020-01-071-8/+9
| | | | | | | | | | | | | | | | | | | | Trivial change, the expected indentation ruled by the coding style hasn't been met. Signed-off-by: Vladimir Zapolskiy <vladimir@tuxera.com> Link: https://lore.kernel.org/r/20200102120232.15074-1-vladimir@tuxera.com Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Gao Xiang <gaoxiang25@huawei.com>
* | Merge branch 'work.adfs' of ↵Linus Torvalds2020-01-2910-740/+914
|\ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs Pull adfs updates from Al Viro: "adfs stuff for this cycle" * 'work.adfs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (42 commits) fs/adfs: bigdir: Fix an error code in adfs_fplus_read() Documentation: update adfs filesystem documentation fs/adfs: mostly divorse inode number from indirect disc address fs/adfs: super: add support for E and E+ floppy image formats fs/adfs: super: extract filesystem block probe fs/adfs: dir: remove debug in adfs_dir_update() fs/adfs: super: fix inode dropping fs/adfs: bigdir: implement directory update support fs/adfs: bigdir: calculate and validate directory checkbyte fs/adfs: bigdir: directory validation strengthening fs/adfs: bigdir: extract directory validation fs/adfs: bigdir: factor out directory entry offset calculation fs/adfs: newdir: split out directory commit from update fs/adfs: newdir: clean up adfs_f_update() fs/adfs: newdir: merge adfs_dir_read() into adfs_f_read() fs/adfs: newdir: improve directory validation fs/adfs: newdir: factor out directory format validation fs/adfs: dir: use pointers to access directory head/tails fs/adfs: dir: add more efficient iterate() per-format method fs/adfs: dir: switch to iterate_shared method ...
| * | fs/adfs: bigdir: Fix an error code in adfs_fplus_read()Dan Carpenter2020-01-251-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This code accidentally returns success, but it should return the -EIO error code from adfs_fplus_validate_header(). Acked-by: Russell King <rmk+kernel@armlinux.org.uk> Fixes: d79288b4f61b ("fs/adfs: bigdir: calculate and validate directory checkbyte") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | Documentation: update adfs filesystem documentationRussell King2020-01-201-0/+24
| | | | | | | | | | | | | | | | | | | | | | | | Add an introduction to adfs to its documentation detailing which formats are supported by the module. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: mostly divorse inode number from indirect disc addressRussell King2020-01-203-4/+7
| | | | | | | | | | | | | | | | | | | | | | | | Avoid using the inode number as the indirect disc address, even though these currently have the same value. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: super: add support for E and E+ floppy image formatsRussell King2020-01-201-1/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | Add support for ADFS E and E+ floppy image formats, which, unlike their hard disk variants, do not have a filesystem boot block - they have a single map zone, with the map fragment stored at sector 0. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: super: extract filesystem block probeRussell King2020-01-201-71/+78
| | | | | | | | | | | | | | | | | | | | | | | | | | | Separate the filesystem block probing from the superblock filling so we can support other ADFS filesystem formats, such as the single-zone E and E+ floppy image formats which do not have a boot block. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: remove debug in adfs_dir_update()Russell King2020-01-201-3/+0
| | | | | | | | | | | | | | | | | | | | | Remove the noisy debug in adfs_dir_update(). Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: super: fix inode droppingRussell King2020-01-201-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we have write support enabled, we must not drop inodes before they have been written back, otherwise we lose updates to the filesystem on umount. Keep the inodes around unless we are built in read-only mode, or we are mounted read-only. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: bigdir: implement directory update supportRussell King2020-01-201-1/+53
| | | | | | | | | | | | | | | | | | | | | | | | Implement big directory entry update support in the same way that we do for new directories. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: bigdir: calculate and validate directory checkbyteRussell King2020-01-201-0/+38
| | | | | | | | | | | | | | | | | | | | | | | | When reading a big directory, calculate the validate the directory checkbyte to ensure that the directory contents are valid. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: bigdir: directory validation strengtheningRussell King2020-01-201-1/+28
| | | | | | | | | | | | | | | | | | | | | | | | | | | Strengthen the directory validation by ensuring that the header fields contain sensible values that fit inside the directory, and limit the directory size to 4MB as per RISC OS requirements. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: bigdir: extract directory validationRussell King2020-01-201-10/+31
| | | | | | | | | | | | | | | | | | | | | | | | Extract the directory validation from the directory reading function as we will want to re-use this code. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: bigdir: factor out directory entry offset calculationRussell King2020-01-201-6/+11
| | | | | | | | | | | | | | | | | | | | | Factor out the directory entry byte offset calculation. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: newdir: split out directory commit from updateRussell King2020-01-203-13/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After changing a directory, we need to update the sequence numbers and calculate the new check byte before the directory is scheduled to be written back to the media. Since this needs to happen for any change to the directory, move this into a separate method. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: newdir: clean up adfs_f_update()Russell King2020-01-201-49/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | __adfs_dir_put() and adfs_dir_find_entry() are only called from adfs_f_update(), so move them into this function, removing some unnecessary entry copying by doing so. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: newdir: merge adfs_dir_read() into adfs_f_read()Russell King2020-01-201-26/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | adfs_dir_read() is only called from adfs_f_read(), so merge it into that function. As new directories are always 2048 bytes in size, (which we rely on elsewhere) we can consolidate some of the code. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: newdir: improve directory validationRussell King2020-01-201-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Check that the lastmask and reserved fields are all zero, as per the documentation. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: newdir: factor out directory format validationRussell King2020-01-201-28/+20
| | | | | | | | | | | | | | | | | | | | | | | | We have two locations where we validate the new directory format, so factor this out to a helper. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: use pointers to access directory head/tailsRussell King2020-01-203-36/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add and use pointers in the adfs_dir structure to access the directory head and tail structures, which will always be contiguous in a buffer. This allows us to avoid memcpy()ing the data in the new directory code, making it slightly more efficient. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add more efficient iterate() per-format methodRussell King2020-01-204-14/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | Rather than using setpos + getnext to iterate through the directory entries, pass iterate() down to the dir format code to populate the dirents. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: switch to iterate_shared methodRussell King2020-01-201-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | There is nothing in our readdir (aka iterate) method that relies on the directory inode being exclusively locked, so switch to using the iterate_shared() hook rather than iterate(). Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: improve compiler coverage in adfs_dir_updateRussell King2020-01-201-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | Get rid of the ifdef, using IS_ENABLED() instead to detect whether the code should be callable. This allows the compiler to always parse the following code, reducing the chances of errors being missed. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: improve update failure handlingRussell King2020-01-201-12/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When we update a directory, a number of errors may happen. If we failed to find the entry to update, we can just release the directory buffers as normal. However, if we have some other error, we may have partially updated the buffers, resulting in an invalid directory. In this case, we need to discard the buffers to avoid writing the contents back to the media, and later re-read the directory from the media. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: modernise on-disk directory structuresRussell King2020-01-202-27/+31
| | | | | | | | | | | | | | | | | | | | | Use __u8 and pack the structures for on-disk directories. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: update directory lockingRussell King2020-01-201-26/+29
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Update directory locking such that it covers the validation of the directory, which could fail if another thread is concurrently writing to the same directory. Since we may sleep, we need to use a rwsem rather than a rw spinlock. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add helper to mark directory buffers dirtyRussell King2020-01-202-4/+13
| | | | | | | | | | | | | | | | | | | | | | | | Provide a helper for marking directory buffers dirty so they get written back to disk. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add helper to read directory using inodeRussell King2020-01-201-10/+22
| | | | | | | | | | | | | | | | | | | | | | | | Add a helper to read a directory using the inode, which we do in two places. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add generic directory readingRussell King2020-01-204-77/+74
| | | | | | | | | | | | | | | | | | | | | | | | | | | Both directory formats code the mechanics of fetching the directory buffers using their own implementations. Consolidate these into one implementation. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add generic copy functionsRussell King2020-01-204-82/+75
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Directories can span multiple buffers, and we currently open-code memcpy access to these buffers, including dealing with entries that are split across multiple buffers. Such code exists in both directory format implementations. Provide common functions to allow data to be copied from/to the directory buffers as if they were a contiguous set of buffers, and use them when accessing directories. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add common directory sync methodRussell King2020-01-204-40/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | adfs_fplus_sync() can be used for both directory formats since we now have a common way to access the buffer heads, so move it into dir.c and appropriately rename it. Remove the directory-format specific implementations. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add common directory buffer release methodRussell King2020-01-204-60/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the bhs pointer in place, we have no need for separate per-format free() methods, since a generic version will do. Provide a generic implementation, remove the format specific implementations and the method function pointer. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: add common dir object initialisationRussell King2020-01-203-12/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | Initialise the dir object before we pass it down to the directory format specific read handler. This allows us to get rid of the initialisation inside those handlers. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: dir: rename bh_fplus to bhsRussell King2020-01-202-30/+28
| | | | | | | | | | | | | | | | | | | | | | | | Rename bh_fplus to bhs in preparation to make some of the directory handling code sharable between implementations. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: fix map scanningRussell King2020-01-201-2/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | When scanning the map for a fragment id, we need to keep track of the free space links, so we don't inadvertently believe that the freespace link is a valid fragment id. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: move map-specific sb initialisation to map.cRussell King2020-01-202-10/+10
| | | | | | | | | | | | | | | | | | | | | | | | Move map specific superblock initialisation to map.c, rather than having it spread into super.c. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: use find_next_bit_le() rather than open coding itRussell King2020-01-201-55/+21
| | | | | | | | | | | | | | | | | | | | | | | | Use find_next_bit_le() to find the end of a fragment in the map rather than open-coding this functionality. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: incorporate map offsets into layoutRussell King2020-01-201-11/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | lookup_zone() and scan_free_map() cope in different ways with the location of the map data within a zone: 1. lookup_zone() adds a four byte offset to the map data pointer to skip over the check and free link bytes. 2. scan_free_map() needs to use the free link pointer, which is an offset from itself, so we end up adding a 32-bit offset to the end pointer (aka mapsize) which is really confusing. Rename mapsize to endbit as this is really what it is, and incorporate the 32-bit offset into the map layout. This means that both dm_startbit and dm_endbit are now bit offsets from the start of the buffer, rather than four bytes in to the buffer. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: factor out map cleanupRussell King2020-01-203-8/+11
| | | | | | | | | | | | | | | | | | | | | | | | We have several places which deal with releasing the map buffers and freeing the map array. Provide a helper for this. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: break up adfs_read_map()Russell King2020-01-201-21/+59
| | | | | | | | | | | | | | | | | | | | | | | | Split up adfs_read_map() into separate helpers to layout the map, read the map, and release the map buffers. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: rename adfs_map_free() to adfs_map_statfs()Russell King2020-01-203-9/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | adfs_map_free() is not obvious whether it is freeing the map or returning the number of free blocks on the filesystem. Rename it to the more generic statfs() to make it clear that it's a statistic function. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: map: move map reading and validation to map.cRussell King2020-01-203-98/+100
| | | | | | | | | | | | | | | | | | | | | | | | Keep all the map code together in map.c, rather than having some in super.c Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
| * | fs/adfs: inode: fix adfs_mode2atts()Russell King2020-01-201-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | Fix adfs_mode2atts() to actually update the file permissions on the media rather than using the current inode mode. Note also that directories do not have read/write permissions stored on the media. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
OpenPOWER on IntegriCloud