]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
smbd: Make get_dfree_info() take a fsp
authorVolker Lendecke <vl@samba.org>
Tue, 27 Jan 2026 12:21:24 +0000 (13:21 +0100)
committerAnoop C S <anoopcs@samba.org>
Sun, 15 Feb 2026 10:42:33 +0000 (10:42 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Anoop C S <anoopcs@samba.org>
source3/modules/vfs_default.c
source3/smbd/dfree.c
source3/smbd/proto.h
source3/smbd/smb1_reply.c
source3/smbd/smb2_trans2.c
source3/smbd/vfs.c

index 480886d7d3856b97f2d2d81d2523381d0540adca..a4a5b54ecb778f46717859ac0fe3454eaa76fd16 100644 (file)
@@ -3011,8 +3011,7 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs
                "error %d. Falling back to slow manual allocation\n", errno);
 
        /* available disk space is enough or not? */
-       space_avail =
-           get_dfree_info(fsp->conn, fsp->fsp_name, &bsize, &dfree, &dsize);
+       space_avail = get_dfree_info(fsp, &bsize, &dfree, &dsize);
        /* space_avail is 1k blocks */
        if (space_avail == (uint64_t)-1 ||
                        ((uint64_t)space_to_write/1024 > space_avail) ) {
index c046bdda91610639e8cbf2b626760a0f1747daed..e7f4ecc8acca0af917ba436182dd739d330a951c 100644 (file)
@@ -213,9 +213,13 @@ struct dfree_cached_info {
        uint64_t dsize;
 };
 
-uint64_t get_dfree_info(connection_struct *conn, struct smb_filename *fname,
-                       uint64_t *bsize, uint64_t *dfree, uint64_t *dsize)
+uint64_t get_dfree_info(struct files_struct *fsp,
+                       uint64_t *bsize,
+                       uint64_t *dfree,
+                       uint64_t *dsize)
 {
+       struct connection_struct *conn = fsp->conn;
+       struct smb_filename *fname = fsp->fsp_name;
        int dfree_cache_time = lp_dfree_cache_time(SNUM(conn));
        struct dfree_cached_info *dfc = NULL;
        struct dfree_cached_info dfc_new = { 0 };
index 4c97c3a2b0bb7e48cc5236541fbfcc5710624793..26a6b6d91764370a98452ec08bf7579d5374ff51 100644 (file)
@@ -182,8 +182,10 @@ bool connections_snum_used(struct smbd_server_connection *unused, int snum);
 
 /* The following definitions come from smbd/dfree.c  */
 
-uint64_t get_dfree_info(connection_struct *conn, struct smb_filename *fname,
-                       uint64_t *bsize, uint64_t *dfree, uint64_t *dsize);
+uint64_t get_dfree_info(struct files_struct *fsp,
+                       uint64_t *bsize,
+                       uint64_t *dfree,
+                       uint64_t *dsize);
 void flush_dfree_cache(void);
 
 /* The following definitions come from smbd/dmapi.c  */
index d04b2493196f8b2d3f522d0987b0544e743360b1..152b2641e16a8606c16db9acde5d83c53fcf2124 100644 (file)
@@ -1008,7 +1008,7 @@ void reply_dskattr(struct smb_request *req)
                return;
        }
 
-       ret = get_dfree_info(conn, dot->fsp->fsp_name, &bsize, &dfree, &dsize);
+       ret = get_dfree_info(dot->fsp, &bsize, &dfree, &dsize);
 
        TALLOC_FREE(dot);
 
index 2cdc4606e54d8ac43e1a140c83aa5079dcddd6bf..e1bb2ef8214e2a8e016bc076651630cb28ad967e 100644 (file)
@@ -2042,8 +2042,7 @@ NTSTATUS smbd_do_qfsinfo(struct smbXsrv_connection *xconn,
                {
                        uint64_t dfree,dsize,bsize,block_size,sectors_per_unit;
                        data_len = 18;
-                       df_ret = get_dfree_info(
-                               conn, fsp->fsp_name, &bsize, &dfree, &dsize);
+                       df_ret = get_dfree_info(fsp, &bsize, &dfree, &dsize);
                        if (df_ret == (uint64_t)-1) {
                                return map_nt_error_from_unix(errno);
                        }
@@ -2203,8 +2202,7 @@ NTSTATUS smbd_do_qfsinfo(struct smbXsrv_connection *xconn,
                {
                        uint64_t dfree,dsize,bsize,block_size,sectors_per_unit;
                        data_len = 24;
-                       df_ret = get_dfree_info(
-                               conn, fsp->fsp_name, &bsize, &dfree, &dsize);
+                       df_ret = get_dfree_info(fsp, &bsize, &dfree, &dsize);
                        if (df_ret == (uint64_t)-1) {
                                return map_nt_error_from_unix(errno);
                        }
@@ -2245,8 +2243,7 @@ NTSTATUS smbd_do_qfsinfo(struct smbXsrv_connection *xconn,
                {
                        uint64_t dfree,dsize,bsize,block_size,sectors_per_unit;
                        data_len = 32;
-                       df_ret = get_dfree_info(
-                               conn, fsp->fsp_name, &bsize, &dfree, &dsize);
+                       df_ret = get_dfree_info(fsp, &bsize, &dfree, &dsize);
                        if (df_ret == (uint64_t)-1) {
                                return map_nt_error_from_unix(errno);
                        }
index ab61f012b24e09b8bdffb498aabfe48f17a8f67f..9322221940e81989a996edc75d51903730143779 100644 (file)
@@ -613,8 +613,7 @@ int vfs_allocate_file_space(files_struct *fsp, uint64_t len)
 
        len -= fsp->fsp_name->st.st_ex_size;
        len /= 1024; /* Len is now number of 1k blocks needed. */
-       space_avail =
-           get_dfree_info(conn, fsp->fsp_name, &bsize, &dfree, &dsize);
+       space_avail = get_dfree_info(fsp, &bsize, &dfree, &dsize);
        if (space_avail == (uint64_t)-1) {
                return -1;
        }