diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-07-19 14:33:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-07-19 14:33:22 -0400 |
commit | d2fbf4b6d585e40f2369675148777abce3abd0e7 (patch) | |
tree | 0749aa1da31af21d752585dc7a2f31715d434ee3 /fs/adfs/inode.c | |
parent | 933a90bf4f3505f8ec83bda21a3c7d70d7c2b426 (diff) | |
parent | b4ed8f75c82876342b3399942427392ba5f3bbb5 (diff) |
Merge branch 'work.adfs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull adfs updates from Al Viro:
"More ADFS patches from Russell King"
* 'work.adfs' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
fs/adfs: add time stamp and file type helpers
fs/adfs: super: limit idlen according to directory type
fs/adfs: super: fix use-after-free bug
fs/adfs: super: safely update options on remount
fs/adfs: super: correct superblock flags
fs/adfs: clean up indirect disc addresses and fragment IDs
fs/adfs: clean up error message printing
fs/adfs: use %pV for error messages
fs/adfs: use format_version from disc_record
fs/adfs: add helper to get filesystem size
fs/adfs: add helper to get discrecord from map
fs/adfs: correct disc record structure
Diffstat (limited to 'fs/adfs/inode.c')
-rw-r--r-- | fs/adfs/inode.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/fs/adfs/inode.c b/fs/adfs/inode.c index 904d624541ad..124de75413a5 100644 --- a/fs/adfs/inode.c +++ b/fs/adfs/inode.c | |||
@@ -94,7 +94,7 @@ adfs_atts2mode(struct super_block *sb, struct inode *inode) | |||
94 | return S_IFDIR | S_IXUGO | mode; | 94 | return S_IFDIR | S_IXUGO | mode; |
95 | } | 95 | } |
96 | 96 | ||
97 | switch (ADFS_I(inode)->filetype) { | 97 | switch (adfs_filetype(ADFS_I(inode)->loadaddr)) { |
98 | case 0xfc0: /* LinkFS */ | 98 | case 0xfc0: /* LinkFS */ |
99 | return S_IFLNK|S_IRWXUGO; | 99 | return S_IFLNK|S_IRWXUGO; |
100 | 100 | ||
@@ -174,7 +174,7 @@ adfs_adfs2unix_time(struct timespec64 *tv, struct inode *inode) | |||
174 | 2208988800000000000LL; | 174 | 2208988800000000000LL; |
175 | s64 nsec; | 175 | s64 nsec; |
176 | 176 | ||
177 | if (ADFS_I(inode)->stamped == 0) | 177 | if (!adfs_inode_is_stamped(inode)) |
178 | goto cur_time; | 178 | goto cur_time; |
179 | 179 | ||
180 | high = ADFS_I(inode)->loadaddr & 0xFF; /* top 8 bits of timestamp */ | 180 | high = ADFS_I(inode)->loadaddr & 0xFF; /* top 8 bits of timestamp */ |
@@ -213,7 +213,7 @@ adfs_unix2adfs_time(struct inode *inode, unsigned int secs) | |||
213 | { | 213 | { |
214 | unsigned int high, low; | 214 | unsigned int high, low; |
215 | 215 | ||
216 | if (ADFS_I(inode)->stamped) { | 216 | if (adfs_inode_is_stamped(inode)) { |
217 | /* convert 32-bit seconds to 40-bit centi-seconds */ | 217 | /* convert 32-bit seconds to 40-bit centi-seconds */ |
218 | low = (secs & 255) * 100; | 218 | low = (secs & 255) * 100; |
219 | high = (secs / 256) * 100 + (low >> 8) + 0x336e996a; | 219 | high = (secs / 256) * 100 + (low >> 8) + 0x336e996a; |
@@ -247,7 +247,7 @@ adfs_iget(struct super_block *sb, struct object_info *obj) | |||
247 | 247 | ||
248 | inode->i_uid = ADFS_SB(sb)->s_uid; | 248 | inode->i_uid = ADFS_SB(sb)->s_uid; |
249 | inode->i_gid = ADFS_SB(sb)->s_gid; | 249 | inode->i_gid = ADFS_SB(sb)->s_gid; |
250 | inode->i_ino = obj->file_id; | 250 | inode->i_ino = obj->indaddr; |
251 | inode->i_size = obj->size; | 251 | inode->i_size = obj->size; |
252 | set_nlink(inode, 2); | 252 | set_nlink(inode, 2); |
253 | inode->i_blocks = (inode->i_size + sb->s_blocksize - 1) >> | 253 | inode->i_blocks = (inode->i_size + sb->s_blocksize - 1) >> |
@@ -263,8 +263,6 @@ adfs_iget(struct super_block *sb, struct object_info *obj) | |||
263 | ADFS_I(inode)->loadaddr = obj->loadaddr; | 263 | ADFS_I(inode)->loadaddr = obj->loadaddr; |
264 | ADFS_I(inode)->execaddr = obj->execaddr; | 264 | ADFS_I(inode)->execaddr = obj->execaddr; |
265 | ADFS_I(inode)->attr = obj->attr; | 265 | ADFS_I(inode)->attr = obj->attr; |
266 | ADFS_I(inode)->filetype = obj->filetype; | ||
267 | ADFS_I(inode)->stamped = ((obj->loadaddr & 0xfff00000) == 0xfff00000); | ||
268 | 266 | ||
269 | inode->i_mode = adfs_atts2mode(sb, inode); | 267 | inode->i_mode = adfs_atts2mode(sb, inode); |
270 | adfs_adfs2unix_time(&inode->i_mtime, inode); | 268 | adfs_adfs2unix_time(&inode->i_mtime, inode); |
@@ -355,7 +353,7 @@ int adfs_write_inode(struct inode *inode, struct writeback_control *wbc) | |||
355 | struct object_info obj; | 353 | struct object_info obj; |
356 | int ret; | 354 | int ret; |
357 | 355 | ||
358 | obj.file_id = inode->i_ino; | 356 | obj.indaddr = inode->i_ino; |
359 | obj.name_len = 0; | 357 | obj.name_len = 0; |
360 | obj.parent_id = ADFS_I(inode)->parent_id; | 358 | obj.parent_id = ADFS_I(inode)->parent_id; |
361 | obj.loadaddr = ADFS_I(inode)->loadaddr; | 359 | obj.loadaddr = ADFS_I(inode)->loadaddr; |