From: Nikolay Borisov <nborisov@suse.com>
To: Namjae Jeon <namjae.jeon@samsung.com>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Cc: gregkh@linuxfoundation.org, valdis.kletnieks@vt.edu, hch@lst.de,
linkinjeon@gmail.com, Markus.Elfring@web.de,
sj1557.seo@samsung.com
Subject: Re: [PATCH v2 05/13] exfat: add file operations
Date: Wed, 20 Nov 2019 11:14:20 +0200 [thread overview]
Message-ID: <398eeca9-e59f-385b-791d-561e56567026@suse.com> (raw)
In-Reply-To: <20191119071107.1947-6-namjae.jeon@samsung.com>
On 19.11.19 г. 9:10 ч., Namjae Jeon wrote:
> This adds the implementation of file operations for exfat.
>
> Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com>
> Signed-off-by: Sungjong Seo <sj1557.seo@samsung.com>
> ---
> fs/exfat/file.c | 346 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 346 insertions(+)
> create mode 100644 fs/exfat/file.c
>
> diff --git a/fs/exfat/file.c b/fs/exfat/file.c
> new file mode 100644
> index 000000000000..5afd65a36eb5
> --- /dev/null
> +++ b/fs/exfat/file.c
> @@ -0,0 +1,346 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2012-2013 Samsung Electronics Co., Ltd.
> + */
> +
> +#include <linux/slab.h>
> +#include <linux/cred.h>
> +#include <linux/buffer_head.h>
> +
> +#include "exfat_raw.h"
> +#include "exfat_fs.h"
> +
<snip>
> +
> +static int exfat_allow_set_time(struct exfat_sb_info *sbi, struct inode *inode)
> +{
> + mode_t allow_utime = sbi->options.allow_utime;
> +
> + if (!uid_eq(current_fsuid(), inode->i_uid)) {
> + if (in_group_p(inode->i_gid))
> + allow_utime >>= 3;
> + if (allow_utime & MAY_WRITE)
> + return 1;
> + }
> +
> + /* use a default check */
> + return 0;
this function can be made to return bool.
> +}
> +
<snip>
> +/* resize the file length */
> +int __exfat_truncate(struct inode *inode, loff_t new_size)
> +{
> + unsigned int num_clusters_new, num_clusters_phys;
> + unsigned int last_clu = FREE_CLUSTER;
> + struct exfat_chain clu;
> + struct exfat_timestamp tm;
> + struct exfat_dentry *ep, *ep2;
> + struct super_block *sb = inode->i_sb;
> + struct exfat_sb_info *sbi = EXFAT_SB(sb);
> + struct exfat_inode_info *ei = EXFAT_I(inode);
> + struct exfat_entry_set_cache *es = NULL;
> + int evict = (ei->dir.dir == DIR_DELETED) ? 1 : 0;
> +
> + /* check if the given file ID is opened */
> + if (ei->type != TYPE_FILE && ei->type != TYPE_DIR)
> + return -EPERM;
> +
> + exfat_set_vol_flags(sb, VOL_DIRTY);
> +
> + num_clusters_new = EXFAT_B_TO_CLU_ROUND_UP(i_size_read(inode), sbi);
> + num_clusters_phys =
> + EXFAT_B_TO_CLU_ROUND_UP(EXFAT_I(inode)->i_size_ondisk, sbi);
> +
> + exfat_chain_set(&clu, ei->start_clu, num_clusters_phys, ei->flags);
> +
> + if (new_size > 0) {
> + /*
> + * Truncate FAT chain num_clusters after the first cluster
> + * num_clusters = min(new, phys);
> + */
> + unsigned int num_clusters =
> + min(num_clusters_new, num_clusters_phys);
> +
> + /*
> + * Follow FAT chain
> + * (defensive coding - works fine even with corrupted FAT table
> + */
> + if (clu.flags == 0x03) {
That 0x03 is magic constant, better define actual flags and check
clu.flag == (FLAG1|FLAG2)
> + clu.dir += num_clusters;
> + clu.size -= num_clusters;
> + } else {
> + while (num_clusters > 0) {
> + last_clu = clu.dir;
> + if (exfat_get_next_cluster(sb, &(clu.dir)))
> + return -EIO;
> +
> + num_clusters--;
> + clu.size--;
> + }
> + }
> + } else {
> + ei->flags = 0x03;
again, magic constant.
> + ei->start_clu = EOF_CLUSTER;
> + }
> +
> + i_size_write(inode, new_size);
> +
> + if (ei->type == TYPE_FILE)
> + ei->attr |= ATTR_ARCHIVE;
<snip>
next prev parent reply other threads:[~2019-11-20 9:14 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20191119071401epcas1p4a42c781276e89928a24d53379fe13d64@epcas1p4.samsung.com>
2019-11-19 7:10 ` [PATCH v2 00/13] add the latest exfat driver Namjae Jeon
[not found] ` <CGME20191119071402epcas1p138f426d591ee81b65f45d092bcad0ebc@epcas1p1.samsung.com>
2019-11-19 7:10 ` [PATCH v2 01/13] exfat: add in-memory and on-disk structures and headers Namjae Jeon
2019-11-20 9:22 ` Nikolay Borisov
[not found] ` <CGME20191119071403epcas1p3f3d69faad57984fa3d079cf18f0a46dc@epcas1p3.samsung.com>
2019-11-19 7:10 ` [PATCH v2 02/13] exfat: add super block operations Namjae Jeon
2019-11-19 8:56 ` Daniel Wagner
2019-11-19 9:22 ` Namjae Jeon
2019-11-19 17:17 ` Christoph Hellwig
2019-11-20 4:33 ` Namjae Jeon
[not found] ` <CGME20191119071403epcas1p2e2a6d2fca608587547027e46d2185cb9@epcas1p2.samsung.com>
2019-11-19 7:10 ` [PATCH v2 03/13] exfat: add inode operations Namjae Jeon
[not found] ` <CGME20191119071404epcas1p4a26ef051aecc9386f90111eddaa4e8f5@epcas1p4.samsung.com>
2019-11-19 7:10 ` [PATCH v2 04/13] exfat: add directory operations Namjae Jeon
[not found] ` <CGME20191119071404epcas1p4f8df45690c07c4dd032af9cbfb5efcc6@epcas1p4.samsung.com>
2019-11-19 7:10 ` [PATCH v2 05/13] exfat: add file operations Namjae Jeon
2019-11-20 9:14 ` Nikolay Borisov [this message]
2019-11-21 1:42 ` Namjae Jeon
2019-11-21 3:18 ` Valdis Klētnieks
2019-11-21 3:39 ` Namjae Jeon
[not found] ` <CGME20191119071405epcas1p29e1af8242cce221c45eb529921028e48@epcas1p2.samsung.com>
2019-11-19 7:11 ` [PATCH v2 06/13] exfat: add exfat entry operations Namjae Jeon
2019-11-20 9:19 ` Nikolay Borisov
[not found] ` <CGME20191119071405epcas1p2c282cb850ef14d181208554796403739@epcas1p2.samsung.com>
2019-11-19 7:11 ` [PATCH v2 07/13] exfat: add bitmap operations Namjae Jeon
2019-11-20 9:24 ` Nikolay Borisov
[not found] ` <CGME20191119071406epcas1p34788f32abd876190f2b0a5c2ba39e4b1@epcas1p3.samsung.com>
2019-11-19 7:11 ` [PATCH v2 08/13] exfat: add exfat cache Namjae Jeon
[not found] ` <CGME20191119071406epcas1p285f075eac966cfdd6f79362ecc433d6b@epcas1p2.samsung.com>
2019-11-19 7:11 ` [PATCH v2 09/13] exfat: add misc operations Namjae Jeon
2020-01-08 19:53 ` Arnd Bergmann
2020-01-09 23:35 ` Namjae Jeon
[not found] ` <CGME20191119071407epcas1p4af1dc25ff22a70050b87f82be4cdf731@epcas1p4.samsung.com>
2019-11-19 7:11 ` [PATCH v2 10/13] exfat: add nls operations Namjae Jeon
[not found] ` <CGME20191119071408epcas1p355692e5e4b48c7c08617974715ae636d@epcas1p3.samsung.com>
2019-11-19 7:11 ` [PATCH v2 11/13] exfat: add Kconfig and Makefile Namjae Jeon
[not found] ` <CGME20191119071409epcas1p1b2464462c7972c11ae8719528f0c43a8@epcas1p1.samsung.com>
2019-11-19 7:11 ` [PATCH v2 12/13] exfat: add exfat in fs/Kconfig and fs/Makefile Namjae Jeon
[not found] ` <CGME20191119071409epcas1p2253bc4b3be05ac82201126bc62bd37ac@epcas1p2.samsung.com>
2019-11-19 7:11 ` [PATCH v2 13/13] MAINTAINERS: add exfat filesystem Namjae Jeon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=398eeca9-e59f-385b-791d-561e56567026@suse.com \
--to=nborisov@suse.com \
--cc=Markus.Elfring@web.de \
--cc=gregkh@linuxfoundation.org \
--cc=hch@lst.de \
--cc=linkinjeon@gmail.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=namjae.jeon@samsung.com \
--cc=sj1557.seo@samsung.com \
--cc=valdis.kletnieks@vt.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).